创建镜像的三种方式:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建。第三种基于Dockerfile创建镜像的方式会在后续章节深入讲解
1.使用commit 方式创建
思路:先获取一个镜像,进入容器中对容器进行修改,之后提交该容器,生成一个新镜像。
镜像是多层存储,每一层是在前一层的基础上进行的修改;而容器同样也是多层存储,是在以镜像为基础层,在其基础上加一层作为
容器运行时的存储层。测试样例:
|
这条命令会用 nginx 镜像启动一个容器,命名为 webserver ,并且映射了 80 端口,这样我们可以用浏览器去访问这个 nginx 服务器。
如果是云主机,则访问公网IP;若是Docker for Mac、Docker for Windows,那么可以直接访问:http://localhost。如图:
进入容器,对其进行修改:
|
我们以交互式终端方式进入webserver 容器,并执行了 bash 命令,也就是获得一个可操作的Shell。并修改了 /usr/share/nginx/html/index.html。
刷新浏览器:
至此,我们修改了容器的文件,也就是改动了容器的存储层。我们可以通过 docker diff 命令看到具体的改动。
|
提交容器,将其保存为镜像:docker commit ,其语法格式为:
|
主要选项:
- -a, --author="" 坐着信息
- -m, --message="" 提交信息
- -p, --pause=true 提交时暂停容器运行
|
查看生成的镜像:
|
2. 使用Dockerfile制作镜像
以 nginx 镜像为例。
在一个空白目录中,建立一个文本文件,并命名为 Dockerfile :
|
其内容为:
|
这个 Dockerfile 很简单,一共就两行。涉及到了两条指令, FROM 和 RUN 。
在 Dockerfile 文件所在目录执行:
|
(末尾的“.”保留)
3. 基于本地模板导入
格式:
|
压缩包可以是本地文件、远程 Web 文件,甚至是从标准输入中得到。压缩包将会在镜像 / 目录展开,并直接作为镜像第一层提交。
比如创建一个 OpenVZ 的 Ubuntu 14.04 模板的镜像:
|
对应 docker import 有一个 docker export ,这个命令用于导出容器的文件系统到压缩文件中,用法:
docker export [OPTIONS] CONTAINER ,导出的文件位置在当前执行命令的目录下,这里不多做介绍。