3-3.5 创建镜像

创建镜像的三种方式:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建。第三种基于Dockerfile创建镜像的方式会在后续章节深入讲解

    1.使用commit 方式创建

    思路:先获取一个镜像,进入容器中对容器进行修改,之后提交该容器,生成一个新镜像。

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

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

这条命令会用 nginx 镜像启动一个容器,命名为 webserver ,并且映射了 80 端口,这样我们可以用浏览器去访问这个 nginx 服务器。

如果是云主机,则访问公网IP;若是Docker for Mac、Docker for Windows,那么可以直接访问:http://localhost。如图:

进入容器,对其进行修改:

$ docker exec -it webserver bash

root@4e8b9f358d54:/#    echo    '<h1>Hello,   Docker!</h1>' >    /usr/share/nginx/html/index.html

root@4e8b9f358d54:/#    exit

扫描二维码关注公众号,回复: 3840642 查看本文章

exit

我们以交互式终端方式进入webserver 容器,并执行了 bash 命令,也就是获得一个可操作的Shell。并修改了 /usr/share/nginx/html/index.html。

刷新浏览器:

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

$   docker  diff    webserver

    提交容器,将其保存为镜像:docker commit ,其语法格式为:

docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]

主要选项:

  • -a, --author="" 坐着信息
  • -m, --message="" 提交信息
  • -p, --pause=true 提交时暂停容器运行  

$   docker  commit  \

   --author  "yuor name <your email>"    \

   --message  "修改了默认网页" \

   webserver   \

   nginx:v2

查看生成的镜像:

docker images

    2. 使用Dockerfile制作镜像

 nginx 镜像为例。

在一个空白目录中,建立一个文本文件,并命名为 Dockerfile :

mkdir mynginx

cd  mynginx

touch  Dockerfile

其内容为:

FROM nginx

RUN echo '<h1>Hello, Docker!</h1>' /usr/share/nginx/html/index.html

这个 Dockerfile 很简单,一共就两行。涉及到了两条指令, FROM 和 RUN 。

在 Dockerfile 文件所在目录执行:

$ docker build -t nginx:v3 .

(末尾的“.”保留)

     3. 基于本地模板导入

格式:

docker import [选项] <文件>|<URL>|- [<仓库名>[:<标签>]]

压缩包可以是本地文件、远程 Web 文件,甚至是从标准输入中得到。压缩包将会在镜像 / 目录展开,并直接作为镜像第一层提交。

比如创建一个 OpenVZ 的 Ubuntu 14.04 模板的镜像:

$ docker import \

http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz \

openvz/ubuntu:14.04

对应 docker import 有一个 docker export ,这个命令用于导出容器的文件系统到压缩文件中,用法:

docker export [OPTIONS] CONTAINER ,导出的文件位置在当前执行命令的目录下,这里不多做介绍。

猜你喜欢

转载自blog.csdn.net/ANXIN997483092/article/details/82697977