一、镜像
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
二、容器
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
三、镜像与容器间的关系
镜像是容器的基础,每次执行 docker run 的时候都会指定哪个镜像作为容器运行的基础。
四、多层存储
镜像是多层存储,每一层是在前一层的基础上进行的修改;而容器同样也是多层存储,是在以镜像为基础层,在其基础上加一层作为容器运行时的存储层。
五、实际操作
1、定制Web服务器
为了更加直观地理解镜像,我们以定制一个 Web 服务器。
思路:用 nginx 镜像启动一个容器,命名为 webserver,并且映射了 80 端口,这样我们可以用浏览器去访问这个 nginx 服务器。
具体操作指令:docker run --name webserver -d -p 80:80 nginx
结果如下:
注意:此时docker中并没有nginx镜像,所以去docker hub拉取nginx这个镜像
2、访问结果
此时我们访问: http://localhost ,可以看到下图结果(默认的 Nginx 欢迎页面):
注意: 如果是在本机运行的 Docker,那么可以直接访问,如果是在虚拟机、云服务器上安装的 Docker,则需要将 localhost 换为虚拟机地址或者实际云服务器地址。
3、修改网页内容
在实际操作中,如果我们想要修改欢迎页面,可以使用 docker exec 命令进入容器,修改其内容。
操作指令:
先进入容器内:
docker exec -it webserver /bin/bash
在交互界面输入:
echo '<h1>Hello, Docker, hi zmq!</h1>' > /usr/share/nginx/html/index.html
具体操作如下图所示:
接下来再刷新浏览器的话,内容修改成我们想要的了
4、查看具体改动
我们修改了容器的文件,也就是改动了容器的存储层。我们可以通过 docker diff 命令看到具体的改动。
操作指令为:
docker diff webserver
在下图我们就可以看到具体的改动了