容器实际上是在父镜像的基础上创建了一个可读写的文件层级,所有的修改操作都在这个文件层级上进行,而父镜像并未受到影响,根据这种修改创建新的本地镜像,有两种不同的方式

方式一:

     1、创建容器

         根据本地镜像创建一个容器:

         a、执行【docker image】命令,查看本地镜像;

         b、根据本地镜像中的nginx镜像,创建一个nginx容器,并启动;

         c、将宿主机中的一个index.html文件拷贝到容器中;

         d、访问容器,发现改变已经生效;

         e、接下来重新创建一个容器,名为nginx2;

         f、访问nginx2,发现nginx2中的默认页面时nginx中的,没有改变;

     2、创建本地镜像

         根据刚刚创建的容器,创建一个本地镜像。

       【docker commit -m "update index.html" --author='Rlu' [镜像所依据的容器id]  Rlu/nginx:v1】

         解释:a、【-m】:创建该镜像的一个简单描述;

                    b、【--author】:该镜像的一个作者;

                    c、【Rlu/nginx 】:表示仓库名,Rlu是名称空间,nginx是镜像名;

                    d、【v1】:表示仓库的tag

        创建完成后通过【docker images】可以查看刚刚创建的镜像。之后运行一个该镜像的容器,发现该容器的默认首页已经改变。

方式二:(Dockerfile)

      commit方式存在问题:无法重复,体积较大,所以考虑使用【Dockerfile】。

      Dockerfile就是一个普通文件,其中包含了一条条指令,每一条指令构建一层。

      1、在一个空白目录创建一个名为Dockerfile的文件,其中包含的内容:

FROM nginx
MAINTAINER Rlu “Rlu@mail.com”
RUN echo 'hello world!' >..[路径]../index.html

COPY ./hello.html  /....

           a、FROM nginx表示该镜像的构建,以已有的nginx镜像为基础,在其基础上构建。

           b、MAINTAINER 创建作者的信息以及邮箱信息(非必须)。

           c、RUN指令用来修改镜像,安装程序、安装库以及配置应用。

           d、COPY 将上下文的hello.html拷贝到镜像。

     2、文件创建完成之后,【docker build -t Rlu/nginx:v1】

          a、【-t】用来指定命名空间,仓库名以及TAG等信息。

     3、【docker images】查看

     4、创建容器并启动。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐