- 来自@L_404_0@: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 B4 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