docker安装与使用
Posted glh-ty
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker安装与使用相关的知识,希望对你有一定的参考价值。
一,容器概念
容器三大基本概念 镜像 image 容器 container 仓库 repository
docker整个生命周期就是这三个概念。
docker镜像
image相当于一个root文件系统,比如官方镜像 ubuntu:14.04 就包含了完整的一套 Ubuntu 14.04 最小系统的 root 文件系统。
image的分层存储
因为镜像包含完整的root文件系统,体积是非常庞大的,因此docker在设计时按照Union FS的技术,将其设计为分层存储的架构。
镜像不是ISO那种完整的打包文件,镜像只是一个虚拟的概念,他不是一个完整的文件,而是由一组文件组成,或者多组文件系统联合组成。
docker容器
image和container的关系,就像面向对象程序设计中的 类和实例一样,镜像是静态的定义(class),容器是镜像运行时的实体(object)。 容器可以被创建、启动、停止、删除、暂停
docker仓库
镜像构建完成后,可以很容易的在宿主机上运行,如果要在其他服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务。docker registry就是这样的服务。
一个docker registry可以包含多个仓库(repository),每个仓库有多个tag(标签),每个标签对应一个镜像。
一个仓库包含同一个软件不同版本的镜像,标签就是用于标记版本的。
如
ubantu:14.04
ubantu:16.05
不指定tag的话默认是
ubantu:latest
仓库名海会以 bob/nginx-proxy形式出现,表明docker registry多用户环境下的 用户名/软件名
docker Registry
Docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry 服 务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务 供用户管理私有镜像。
最常使用的 Registry 公开服务是官方的 Docker Hub,这也是默认的 Registry,并 拥有大量的高质量的官方镜像。
除此以外,还有 CoreOS 的 Quay.io,CoreOS 相 关的镜像存储在这里;Google 的 Google Container Registry,Kubernetes 的镜像 使用的就是这个服务。
由于某些原因,在国内访问这些服务可能会比较慢。
国内的一些云服务商提供了针 对 Docker Hub 的镜像服务(Registry Mirror),这些镜像服务被称为加速器。常见 的有 阿里云加速器、DaoCloud 加速器、灵雀云加速器等。
使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从官方网站下载速度会提高很多。在后 面的章节中会有进一步如何配置加速器的讲解。
国内也有一些云服务商提供类似于 Docker Hub 的公开服务。比如 时速云镜像仓 库、网易云镜像服务、DaoCloud 镜像市场、阿里云镜像库等。
二,安装
官方教程如下,最正确安装docker姿势
1.卸载旧版本 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine 2.设置存储库 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 3.安装docker社区版 sudo yum install docker-ce 4.启动关闭docker systemctl start docker
5. 查看版本
docker version
#yum安装软件的整个过程 1.配置yum源,在/etc/yum.repos.d/下产生 docker.repo文件 2.检查这个文件中的baseurl地址,下载的软件包就来自于这里 3.baseurl=https://download.docker.com/linux/centos/7/$basearch/stable 4.查看yum到底安装的是谁 docker-ce-18.09.0-3.el7.x86_64.rpm 2018-11-07 23:58:48 18.7 docker-ce-cli-18.09.0-3.el7.x86_64.rpm 5.yum自动下载rpm包,自动解决依赖关系,非常方便 6.通过yum下载的软件包,systemctl进行管理 7. systemctl start docker 8.docker version查看版本 假如你配置yum官方仓库无法安装,由于网络因素,那你就别配yum官方仓库了,删掉仓库 通过自带的epel源下载 yum install docker ,只是这个版本较低,
docker版本
Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。
企业版包含了一些收费服务,个人开发者一般用不到。本文的介绍都针对社区版。
系统环境准备
docker最低支持centos7且在64位平台上,内核版本在3.10以上
[[email protected]_python ~ 10:48:11]#uname -r
3.10.0-693.el7.x86_64
Docker镜像加速器
https://www.daocloud.io/mirror#accelerator-doc https://www.cnblogs.com/pyyu/p/6925606.html #一条命令加速 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io # 或者也可以手动 vim /etc/docker/daemo.json 写入 {"registry-mirrors": ["http://95822026.m.daocloud.io"]}
三,使用
1,基本命令
启动docker
systemctl start/restart/stop docker
基本命令
1.docker加速器,加速镜像下载 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io 2.获取docker镜像 docker search ubuntu #查找ubuntu镜像 docker pull ubuntu #下载ubuntu镜像 3.查看docker存在哪些镜像 docker image ls docker images 4.删除镜像文件 1.删除容器相关记录 docker rm 容器id 2.删除镜像记录 docker rmi 镜像名(镜像id) 3.批量删除容器记录 docker rm `docker ps -aq` 5.检查容器进程(存活) docker ps 6.检查容器进程记录(挂掉的) docker ps -a 7. 运行镜像,产生容器 docker run hello-world 8.交互式运行docker容器 docker run -it --rm ubuntu bash docker run就是运行容器的命令。 参数 -it : -i 是交互式操作,-t是终端 -rm : 容器退出后将其删除。也可以不指定参数,手动docker rm,使用-rm可以避免浪费空间。 ubuntu:14.04 这指的是镜像文件 bash : 指定用交互式的shell,因此需要bash命令
后台模式启动docker
-d参数:后台运行容器,返回容器ID
# docker在centos中运行一段shell脚本,后台运行
docker run -d centos /bin/sh -c "while true;do echo hello centos; sleep 1;done" # 返回结果
c0283f1077d16a2bf2597e269d51a02815334f7390f18a62ed7a4ba07f351b65 #检查容器进程docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c0283f1077d1 centos "/bin/sh -c ‘while..." 6 seconds ago Up 5 seconds fervent_turing
查看容器内的标准输出
docker logs c02
停止容器
docker stop c02
#此时容器进程不存在
docker ps
启动容器
docker start c02
#检查容器进程
docker ps
删除容器 docker rm c02
2,提交创建自定义的镜像(docker container commit)
1.我们进入交互式的centos容器中,发现没有vim命令 docker run -it centos 2.在当前容器中,安装一个vim yum install -y vim 3.安装好vim之后,exit退出容器 exit 4.查看刚才安装好vim的容器记录 docker container ls -a 5.提交这个容器,创建新的image docker commit 059fdea031ba sss/centos-vim 6.查看镜像文件 [[email protected] /home]docker images REPOSITORY TAG IMAGE ID CREATED SIZE sss/centos-vim latest fd2685ae25fe 5 minutes ago 348MB
3,搭建简单web应用,外部访问容器
容器中可以运行网络应用,但是要让外部也可以访问这些应用,可以通过-p或-P参数指定端口映射。
-P 参数会随机映射端口到容器开放的网络端口
#docker run -d -P training/webapp python app.py
检查映射的端口
#宿主机ip:32768 映射容器的5000端口
[[email protected]_python ~ 16:34:02]#docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cfd632821d7a training/webapp "python app.py" 21 seconds ago Up 20 seconds 0.0.0.0:32768->5000/tcp brave_fermi
查看容器日志信息
#不间断显示log
docker logs -f cfd
也可以通过-p参数指定映射端口:常用
#指定服务器的9000端口,映射到容器内的5000端口
[[email protected]_python ~ 16:46:13]#docker run -d -p 9000:5000 training/webapp python app.py c0b5a6278d0f4f2e9b9eba8680451111d8b911b61de0c37ea64cb337aefb854e
访问服务器的9000端口
(如果访问失败的话,检查自己的防火墙,以及云服务器的安全组)
查看指定容器的端口映射
#docker port c0b 5000/tcp -> 0.0.0.0:9000
查看容器内的进程
#docker top c0b UID PID PPID C STIME TTY TIME CMD root 3926 3912 0 16:46 ? 00:00:00 python app.py
四,发布docker image到仓库
1,docker hub公有镜像发布
1.docker提供了一个类似于github的仓库dockerhub, 网址https://hub.docker.com/需要注册使用 2.注册docker id后,在linux中登录dockerhub docker login
注意要保证image的tag是账户名,如果镜像名字不对,需要改一下tag
docker tag ubuntu mrglh/ubuntu
语法是: docker tag 仓库名 mrglh/仓库名
3.推送docker image到dockerhub docker push mrglh/ubuntu
4.在dockerhub中检查镜像 https://hub.docker.com/
5.删除本地镜像,测试下载pull 镜像文件 docker pull mrglh/ubuntu
2,私有仓库
但是这种镜像仓库是公开的,其他人也是可以下载,并不安全,因此还可以使用docker registry官方提供的私有仓库
docker私有仓库搭建: docker -v 参数 假设我要在docker容器中安装 nginx 软件 nginx软件有网页根目录 root /opt/static/nginx js css 这个nginx静态文件,可以放在容器中管理 也可以通过-v参数挂载一个数据 -v 宿主机/opt/staic/nginx 容器/opt/static/nginx js1 js2 js3 容器中的nginx软件,读取数据时候,通过-v参数,去宿主机读取
步骤详解
1.找到本地docker文件 vim /etc/docker/daemon.json 2.写入配置 必须注意此文件是json格式!!!注意引号 {"registry-mirrors": ["http://95822026.m.daocloud.io"], "insecure-registries":["45.32.52.244:5000"] } 3.将此文件,添加到docker服务脚本中 vim /lib/systemd/system/docker.service 4.写入以下配置,注意!!!,写入到[Service]配置块中,加载此配置文件 [Service] EnvironmentFile=/etc/docker/daemon.json 5.修改了docker配置文件,重新加载docker systemctl daemon-reload 6.重启docker服务,使得生效 systemctl restart docker 7.由于重启了docker,所有的容器实例全挂了,因此要打开私有仓库的容器实例 1.docker ps -a 检查私有仓库的容器记录 2. docker start 私有仓库的id 3.此时docker ps 检查 私有仓库服务是否启动 8.修改本地镜像的tag,便于推送到本地镜像仓库 docker tag 镜像名 45.32.52.244:5000/镜像名 如 docker tag ubuntu 45.32.52.244:5000/ubuntu 9.推送本地镜像到私有docker仓库 docker push 45.32.52.244:5000/ubuntu 10.docker私有仓库提供了API数据可供查看 http://10.0.0.10:5000/v2/_catalog 11.可以测试删除本地镜像,然后从私有仓库拖取镜像 docker pull 45.32.52.244:5000/ubuntu
以上是关于docker安装与使用的主要内容,如果未能解决你的问题,请参考以下文章
Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段
Python3 - Docker Compose的安装与使用