在Docker容器中,使用Dockerfile自定义容器镜像并执行镜像迁移【测试成功】

艺帆风顺 发布于 2025-04-03 25 次阅读


一、需求概述

    在此前的实践中,采用docker commit可以将正在运行的容器打包成镜像;在实际中,比如涉及到版本的发布与更新,需要事前订制镜像,此时就用到了Dockerfile。

二、简单示例

    1、编写Dockerfile文件

        mkdir -p /ops/nginx

        vim Dockerfile

    FROM nginxRUN echo '

    Hello, Docker!

    ' > /usr/share/nginx/html/index.html

        2、执行打包

        docker build -t nginx:v0.1 .

        查看镜像:

      [root@Devops nginx]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx v0.1 bd4d03571e94 About a minute ago 141MB

      3、运行测试

          docker run --name test -d -p 81:80 nginx:v0.1

        [root@Devops nginx]# docker run --name test -d -p 81:80 nginx:v0.1dede15797a04bb486b53a72f72d4468db5f797a7d1690559b4d5e8e697a9ff36

        三、实际前端项目打包示例

            需要将前端文件源码更新至容器镜像内,则

        1、编写dockerfile文件

            上传源码dist目录到与Dockerfile文件同名目录

            vim Dockerfile

          FROM nginxCOPY /dist  /usr/share/nginx/html/

          2、构建镜像

             备注:不是必须使用Dockerfile作为文件名,比如可以-f指定文件   

              docker build -f nginx0.2 -t nginx:v0.3 .

              docker build -t nginx:v0.2 .

          3、容器运行

              docker run --name test2 -d -p 82:80 nginx:v0.2

          四、镜像的迁移

          1、查看镜像

            [root@Devops nginx]# docker image ls nginxREPOSITORY TAG IMAGE ID CREATED SIZEnginx v0.2 2f41692bdd06 2 hours ago 150MBnginx v0.3 2f41692bdd06 2 hours ago 150MBnginx v2 2a9b11ef288b 45 hours ago 141MBnginx latest 605c77e624dd 2 years ago 141MB

            2、保存导出镜像文件

                docker save nginx:v0.3| gzip > nginx-v0.3.tar.gz

                保存正在运行的容器:

              # docker commit > --author "test" > --message "稳定运行一年" > ylcloud > ylcloud:v1.0

              3、上传到另一台机器并导入

                  docker load -i nginx-v0.3.tar.gz 

                [root@XAYL ops]# docker load -i nginx-v0.3.tar.gz 2edcec3590a4: Loading layer 83.86MB/83.86MBe379e8aedd4d: Loading layer 62MB/62MBb8d6e692a25e: Loading layer 3.072kB/3.072kBf1db227348d0: Loading layer 4.096kB/4.096kB32ce5f6a5106: Loading layer 3.584kB/3.584kBd874fd2bc83b: Loading layer 7.168kB/7.168kBa558f1fd952c: Loading layer 8.62MB/8.62MBLoaded image: nginx:v0.3

                4、运行导入后的容器。

                备注:从一个机器将镜像迁移到另一个机器,并显示进度条:

                docker save 镜像名> | bzip2 | pv | ssh 用户名>@主机名> 'cat | docker load'