• Docker 哲学 - docker save | load | export | import 及实践


    当我们说 "归档文件包含了容器的所有文件,但不包含容器的元数据和配置",我们是指 docker export 命令导出的 tar 归档文件包含了容器的文件系统中的所有文件,包括应用程序、库、数据等。但是,这个归档文件不包含关于容器本身的信息,例如环境变量、运行命令、网络设置等。

    这些信息是 Docker 在运行容器时需要的,它们定义了容器的运行环境和行为。例如,环境变量可以用于配置应用程序,运行命令定义了容器启动时要执行的命令,网络设置定义了容器的网络接口和路由。

    当你使用 docker import 命令将这个归档文件导入到 Docker 中时,你会得到一个新的镜像。这个镜像只包含文件系统,不包含元数据和配置。你需要在运行这个镜像时提供这些信息,例如使用 docker run -e VAR=value -p 80:80 image 命令来设置环境变量和端口映射。

    导出镜像

    1. 如果在公司内部有私有的Docker镜像仓库,我们可以把构建好的镜像上传至私有仓库,然后再从测试/线上的机器拉取对应的镜像即可,启动容器即可。

    2. 在没有私有的Docker镜像仓库的情况下,可以将咱们的镜像进行导出,导出之后再拷贝到目标的机器上进行导入,然后启动容器。

    如何导出镜像

    一、docker save是用来将一个或多个image打包保存的工具。

    docker save -o images.tar postgres:9.6  mongo:3.4
    

    二、docker export是用来将container的文件系统进行打包的。

    docker export  -o postgres-export.tar postgres
    

    两者之间有什么区别呢:

    • docker save保存的是镜像(image),docker export保存的是容器(container);

    • docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;* docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。

    docker save的应用场景是,如果你的应用是使用docker-compose.yml编排的多个镜像组合,但你要部署的客户服务器并不能连外网。这时,你可以使用docker save将用到的镜像打个包,然后拷贝到客户服务器上使用docker load载入。

    docker export的应用场景主要用来制作基础镜像,比如你从一个ubuntu镜像启动一个容器,然后安装一些软件和进行一些设置后,使用docker export保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。

    四、导入镜像

    一、使用 docker import 命令则可将这个镜像文件导入进来(跟docker export配对使用)。

    docker import /path/to/latest.tar
    

    二、使用docker load命令则可将这个镜像文件载入进来(跟docker save配对使用)。

    docker load -i /path/to/fedora-latest.tar
    

    五、启动容器

    假设我们已经导入了服务端镜像my-server以及前端镜像my-front,我们该如何启动呢?

    首先我们需要先创建一个网络,让容器具备互联的基础:

    docker network create -d bridge my-net
    

    然后,分别启动一下我们的服务端和前端容器。

    • 服务端启动:docker run -d -p 8360:8360 --network my-net --network-alias myserver my-server

    • web端启动 docker run -d -p 8080:80 --network my-net --network-alias myfront my-front

    真实场景下的部署体验感觉

    一、传统模式下的部署

    传统的部署模式下,我们需要挨个去安装各种各样的环境:

    图片

    安装完成之后,再拷贝相关的代码以及配置文件到目标的机器上:

    图片

    启动服务,调试一下前端、服务端、数据库是否能正常链接。

    二、使用Docker改造之后的部署

    1. 安装docker 环境

    2. 创建 docker 网络:sudo docker network create -d bridge my-net

    3. 上传镜像文件(my-front.tar、my-server.tar)至服务器

    4. 导入镜像:sudo docker load -i my-front.tar、sudo docker load -i my-server.tar

    5. 启动服务端容器:docker run -d -p 8360:8360 --network wenjuan-net --network-alias myserver  my-server

    6. 启动系统前端容器:sudo docker run -d -p 8080:80 --network my-net --network-alias myfront  my-front

  • 相关阅读:
    Web大学生网页作业成品:基于html制作中国科技发展网站设计题材【航天之路7页】HTML+CSS+JavaScript
    【小程序专栏】第一个uniapp项目编译到微信开发者工具以及android真机运行
    Shell开发实践:服务器的磁盘、CPU、内存的占用监控
    介绍Node.js中fs模块 代码和注释。
    富文本编辑器添加图片
    C++: 多态
    制药企业液体制剂生产设备管理利器:中央设备状态监控系统CMS
    构建dagu+replicadb镜像
    什么是RPC框架?
    将 Python3 程序打包成 APK 并运行在 ARM 的 Android 系统中
  • 原文地址:https://blog.csdn.net/gu2022_3_5_21_23/article/details/138062765