Docker是一组平台即服务(PaaS)的产品。它基于操作系统层级的虚拟化技术,将软件与其依赖项打包为 容器。Docker能够帮助开发者在轻量级容器中自动部署应用程序,并使得不同容器中的应用程序彼此隔离,高效工作。
Docker镜像(Image)是一个轻量级、可执行的独立软件包,它包含运行某个软件所需的所有代码、运行时、库、环境变量和配置文件等。镜像可以被装载到任何支持 Docker 的系统上,实现应用程序的快速部署和运行。
Docker容器(Container)是镜像的运行实例。容器可以启动、停止、删除,但它们是基于镜像创建的。每个容器都是相互隔离的,运行在自己的用户空间和文件系统中,并且拥有自己的 IP 地址和端口等。

1. 容器导出

容器导出是指将现有的容器导出成tar包文件,是为了迁移到新的服务器上可以通过载入镜像的方式快速创新新的容器。
容器导出有两种方式:saveexport

1.1 save和export对比

特性docker save(基于镜像)docker export(基于容器)
包含内容完整镜像(元数据、历史层、配置信息)仅容器文件系统快照(无元数据)
能否保留启动命令能(保留原镜像的 CMD/ENTRYPOINT)不能(需重新配置启动命令)
适用场景保存修改后的完整环境(含配置和启动规则)仅需文件系统快照,无需元数据时

1.2 docker save

由于docker save是基于镜像的,因此需要先变成新的镜像,再导出tar包。
变成新的镜像可以通过commit,也可以基于Dockerfile

1.2.1 docker commit

# 语法:docker commit [容器ID或名称] [新镜像名:标签]
docker commit my-running-container my-custom-image:v1

1.2.2 Dokerfile

Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
ENTRYPOINT 为固定命令,在容器启动那一刻便运行,通常进程id为1
CMD 为默认参数,可在被容器启动命令覆盖

  1. 构建Dokerfile文件
# Dockerfile
# 基础镜像
FROM my-custom-image:v1

# 工作目录
WORKDIR /root

# 固定基础命令(python3 app.py)
ENTRYPOINT ["python3", "app.py"]

# 默认参数(--port 5000),可被docker run参数覆盖
CMD ["--port", "5000"]
  1. 构建镜像
# 语法:docker build [新镜像名:标签] . (当前目录存在Dockerfile文件,注意文件名大小写)
docker build -t my-custom-image:v1 .

1.2.3 docker save

# 语法:docker save -o [输出文件名.tar] [导出的镜像名:标签]
docker save -o my-custom-image.tar my-custom-image:v1

1.3 docker export

# 语法:docker save [容器ID或名称] > [输出文件名.tar]
docker export my-running-container > my-custom-image.tar

2. 镜像载入

相对应的镜像载入也有两种方式
load 对应 save
import 对应 export

2.1 docker load

# 语法:docker load -i [文件名.tar]
docker load -i my-custom-image.tar

2.1 docker import

# 语法:docker import [文件名.tar] [镜像名:标签]
docker import my-custom-image.tar my-custom-image:v1

3. 容器创建

3.1 docker run

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用参数说明:
-d: 后台运行容器并返回容器 ID。
-it: 交互式运行容器,分配一个伪终端。
--name: 给容器指定一个名称。
-p: 端口映射,格式为 host_port:container_port。
-v: 挂载卷,格式为 host_dir:container_dir。
--rm: 容器停止后自动删除容器。
--env 或 -e: 设置环境变量。
--network: 指定容器的网络模式。
--restart: 容器的重启策略(如 no、on-failure、always、unless-stopped)。
-u: 指定用户。
# 运行容器(无需手动指定命令,会自动执行CMD/ENTRYPOINT)
docker run -d -p 5000:5000 --name my-service my-custom-image:v1
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐