84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
Docker中镜像和容器的关系是什么? 看了几个版本,有点不太清晰。 是容器里面放置镜像? 还是镜像本身就是一个容器?
业精于勤,荒于嬉;行成于思,毁于随。
容器是镜像运行的一个实例!
玩过虚拟机吗?相对来说就是Ios文件和虚拟出来的系统。
镜像是文件, 容器是进程。 容器是基于镜像创建的, 即容器中的进程依赖于镜像中的文件, 这里的文件包括进程运行所需要的可执行文件, 依赖软件, 库文件, 配置文件等等...
不妨通过一个实例来获得更直观的认识。
假设你需要把nginx(web服务器)运行在Docker容器中, 则第一步需要下载nginx镜像:
sudo docker pull nginx
下载nginx镜像之后可以查看Docker镜像:
sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 0d409d33b27e 2 weeks ago 182.7 MB
可知, nginx镜像的大小为182.7MB。
事实上, nginx镜像并非一个单独的文件,而是具有层级结构:
sudo docker history nginx IMAGE CREATED CREATED BY SIZE COMMENT 0d409d33b27e 2 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon o 0 B <missing> 2 weeks ago /bin/sh -c #(nop) EXPOSE 443/tcp 80/tcp 0 B <missing> 2 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx/ 0 B <missing> 2 weeks ago /bin/sh -c apt-key adv --keyserver hkp://pgp. 57.67 MB <missing> 2 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.11.1-1~ 0 B <missing> 3 weeks ago /bin/sh -c #(nop) MAINTAINER NGINX Docker Mai 0 B <missing> 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B <missing> 3 weeks ago /bin/sh -c #(nop) ADD file:5d8521419ad6cfb695 125.1 MB
可知, nginix镜像一共有8层, 其中, 第1层为125.1MB, 第5层为57.67MB, 其他层的大小可以忽略。
将nginx运行在Docker容器中:
sudo docker run -itd \ -p 80:80 \ --name=nginx \ nginx
查看nginx容器
sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 263e88fc53d3 nginx "nginx -g 'daemon off" 3 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp, 443/tcp nginx
可知, nginx容器运行成功。
查看nginx容器中的进程
sudo docker exec nginx ps aux | grep -v ps USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 31680 2872 ? Ss+ 05:18 0:00 nginx: master process nginx -g daemon off; nginx 5 0.0 0.0 32072 1696 ? S+ 05:18 0:00 nginx: worker process
可知, nginx容器中一共运行了两个进程, 分别是nginx的master和worker进程。
容器中进程的COMMAND为"nginx -g daemon off", 但是, 主机上并未安装nginx, nginx安装在Docker镜像中。
不妨再次查看nginx镜像的各个层,这时使用"--no-trunc"显示详细内容:
docker history --no-trunc nginx IMAGE CREATED CREATED BY SIZE COMMENT sha256:0d409d33b27e47423b049f7f863faa08655a8c901749c2b25b93ca67d01a470d 2 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon off;"] 0 B <missing> 2 weeks ago /bin/sh -c #(nop) EXPOSE 443/tcp 80/tcp 0 B <missing> 2 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log 0 B <missing> 2 weeks ago /bin/sh -c apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 && echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list && apt-get update && apt-get install --no-install-recommends --no-install-suggests -y ca-certificates nginx=${NGINX_VERSION} nginx-module-xslt nginx-module-geoip nginx-module-image-filter nginx-module-perl nginx-module-njs gettext-base && rm -rf /var/lib/apt/lists/* 57.67 MB <missing> 2 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.11.1-1~jessie 0 B <missing> 3 weeks ago /bin/sh -c #(nop) MAINTAINER NGINX Docker Maintainers "docker-maint@nginx.com" 0 B <missing> 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B <missing> 3 weeks ago /bin/sh -c #(nop) ADD file:5d8521419ad6cfb6956ed26ab70a44422d512f82462046ba8e68b7dcb8283f7e in / 125.1 MB
其中, 第5层为57.67MB, 它的CREATED BY是这样的(把连接符号&&换为换行符):
apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list apt-get update apt-get install --no-install-recommends --no-install-suggests -y ca-certificates nginx=${NGINX_VERSION} nginx-module-xslt nginx-module-geoip nginx-module-image-filter nginx-module-perl nginx-module-njs gettext-base rm -rf /var/lib/apt/lists/*
可知, nginx镜像的第5层安装了nginx。
可以类比为 文件--进程 的关系
镜像可以理解为一个ios的系统光盘文档容器是装好后可运行的系统
就像墙壁与壁纸的关系
墙壁
壁纸
container = image + docker run
container
image
docker run
比如类和实例。
类
实例
docker run 就是把类实例化。
镜像就是容器的系统文件
镜像相当于一个标准化的模板,启动容器相当于实例化一个镜像来用,销毁容器后只是这个实例被销毁了,镜像还是在的
容器是镜像运行的一个实例!
玩过虚拟机吗?相对来说就是Ios文件和虚拟出来的系统。
镜像是文件, 容器是进程。 容器是基于镜像创建的, 即容器中的进程依赖于镜像中的文件, 这里的文件包括进程运行所需要的可执行文件, 依赖软件, 库文件, 配置文件等等...
不妨通过一个实例来获得更直观的认识。
假设你需要把nginx(web服务器)运行在Docker容器中, 则第一步需要下载nginx镜像:
下载nginx镜像之后可以查看Docker镜像:
可知, nginx镜像的大小为182.7MB。
事实上, nginx镜像并非一个单独的文件,而是具有层级结构:
可知, nginix镜像一共有8层, 其中, 第1层为125.1MB, 第5层为57.67MB, 其他层的大小可以忽略。
将nginx运行在Docker容器中:
查看nginx容器
可知, nginx容器运行成功。
查看nginx容器中的进程
可知, nginx容器中一共运行了两个进程, 分别是nginx的master和worker进程。
容器中进程的COMMAND为"nginx -g daemon off", 但是, 主机上并未安装nginx, nginx安装在Docker镜像中。
不妨再次查看nginx镜像的各个层,这时使用"--no-trunc"显示详细内容:
其中, 第5层为57.67MB, 它的CREATED BY是这样的(把连接符号&&换为换行符):
可知, nginx镜像的第5层安装了nginx。
可以类比为 文件--进程 的关系
镜像可以理解为一个ios的系统光盘文档
容器是装好后可运行的系统
就像
墙壁
与壁纸
的关系container
=image
+docker run
比如
类
和实例
。docker run 就是把类实例化。
镜像就是容器的系统文件
镜像相当于一个标准化的模板,启动容器相当于实例化一个镜像来用,销毁容器后只是这个实例被销毁了,镜像还是在的