Docker - 镜像 - 利用 commit 理解镜像构成

前端之家收集整理的这篇文章主要介绍了Docker - 镜像 - 利用 commit 理解镜像构成前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  • 来自

利用 commit 理解镜像构成

镜像是多层存储,每一层是在前一层的基础上进行的修改;而容器同样也是多层存储,是在以镜像为基础层,在其基础上加一层作为容器运行时的存储层。

$ docker run --name webserver -d -p 80:80 nginx

这条命令会用 nginx 镜像启动一个容器,命名为 webserver,并且映射了 80 端口,这样我们可以用浏览器去访问这个 nginx 服务器。
在本地的话可以直接访问
:80,我们会看到默认的 Nginx 欢迎页面

现在,假设我们非常不喜欢这个欢迎页面,我们希望改成欢迎 Docker 的文字,我们可以使用docker exec命令进入容器,修改内容

$ (winpty) docker exec -it webserver bash
root@3729b97e8226:/# echo '

Hello,Docker!

' > /usr/share/Nginx/html/index.html root@3729b97e8226:/# exit exit

我们修改了容器的文件,也就是改动了容器的存储层。我们可以通过 docker diff 命令看到具体的改动。

$ docker diff webserver
C /root
A /root/.bash_history
C /run
C /usr
C /usr/share
C /usr/share/Nginx
C /usr/share/Nginx/html
C /usr/share/Nginx/html/index.html
C /var
C /var/cache
C /var/cache/Nginx
A /var/cache/Nginx/client_temp
A /var/cache/Nginx/fastcgi_temp
A /var/cache/Nginx/proxy_temp
A /var/cache/Nginx/scgi_temp
A /var/cache/Nginx/uwsgi_temp

要知道,当我们运行一个容器的时候(如果不使用卷的话),我们做的任何文件修改都会被记录于容器存储层里。而 Docker 提供了一个 docker commit 命令,可以将容器的存储层保存下来成为镜像。换句话说,就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。以后我们运行这个新镜像的时候,就会拥有原有容器最后的文件变化。

docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
$ docker commit \
    --author "Tao Wang " \
    --message "修改了默认网页" \
    webserver \
    Nginx:v2
sha256:07e33465974800ce65751acc279adc6ed2dc5ed4e0838f8b86f0c87aa1795214

其中 --author 是指定修改的作者,而 --message 则是记录本次修改内容。这点和 git 版本控制相似,不过这里这些信息可以省略留空。

$ docker image ls Nginx
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
Nginx               v2                  07e334659748        9 seconds ago       181.5 MB
Nginx               1.11                05a60462f8ba        12 days ago         181.5 MB
Nginx               latest              e43d811ce2f4        4 weeks ago         181.5 MB```

我们还可以用 docker history 具体查看镜像内的历史记录,如果比较 <a href="/tag/Nginx/" target="_blank" class="keywords">Nginx</a>:latest 的历史记录,我们会发现新增了我们刚刚提交的这一层。
bash
$ docker history Nginx:v2
IMAGE CREATED CREATED BY SIZE COMMENT
07e334659748 54 seconds ago Nginx -g daemon off; 95 B 修改了默认网页
e43d811ce2f4 4 weeks ago /bin/sh -c #(nop) CMD ["Nginx" "-g" "daemon 0 B

4 weeks ago /bin/sh -c #(nop) EXPOSE 443/tcp 80/tcp 0 B 4 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/Nginx/ 22 B 4 weeks ago /bin/sh -c apt-key adv --keyserver hkp://pgp. 58.46 MB 4 weeks ago /bin/sh -c #(nop) ENV Nginx_VERSION=1.11.5-1 0 B 4 weeks ago /bin/sh -c #(nop) MAINTAINER Nginx Docker Ma 0 B 4 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B 4 weeks ago /bin/sh -c #(nop) ADD file:23aa4f893e3288698c 123 MB

新的镜像定制好后,我们可以来运行这个镜像。:80

docker run --name web2 -d -p 81:80 Nginx:v2

猜你在找的Docker相关文章