🍂落页
登 录

《Docker 实战》笔记

  • 速查表
  • 欢迎来到 Docker 的世界
  • 在容器中运行软件
  • 使用 Docker 安装软件
  • 使用存储和卷
  • 单主机网络
  • 通过资源控制来限制风险
  • 将软件打包到镜像中
  • 用 Dockerfile 构建镜像
🍂落页
TALAXY
使用 Docker 安装软件
🍂落页
TALAXY

使用 Docker 安装软件

使用 Docker 安装软件
  • 镜像
  • 命名仓库
  • 镜像标签
  • 安装镜像
  • 镜像层级
  • 容器文件系统

镜像

Docker 通过镜像来创建容器。镜像是文件,它包含两类数据:

  • 用于创建容器的文件;
  • 镜像的元数据,包括 标签、环境变量、默认的执行上下文、镜像的命令历史记录等。

每个镜像都有全局唯一的标识符,更改镜像后标识符也会跟着变更。

命名仓库

命名仓库是一个网络服务,用于注册存放镜像文件。可以通过一个 仓库名称 来获取对应的镜像。仓库名称类似 URL,结构为:

<主机名>/<用户名或组织名>/<镜像简称>
如:"docker.io/dockerinaction/ch3_hello_registry"

一个仓库名称可以有多个版本的镜像,可通过镜像标签去标记。

镜像标签

标签既可以用来唯一标识镜像,也可以用来创建有用的别名。标签只能作用于单个镜像,而镜像可以有多个别名。

安装镜像

通常有三种方式来安装镜像:

  • 从 Docker Hub 或私有的仓库注册表直接拉取镜像;
  • 从文件中加载镜像;
  • 在项目中使用 Dockerfile 来构建镜像。

可以通过 docker login 及 docker logout 来登录登出 Docker Hub 或私有的注册表,用以后续发布镜像。

在未指定注册表时执行 docker pull 或 docker run 等命令,Docker 默认会从 Docker Hub 获取镜像。

拉取及删除镜像:

# 地址形式:`[仓库主机名[:端口]/][用户名/]名称[:标签]`
docker pull quay.io/dockerinaction/ch3_hello_registry:latest
docker rmi quay.io/dockerinaction/ch3_hello_registry
  • docker pull 为 docker image pull 的别名;
  • docker rmi 为 docker image rm 的别名,支持传入多个镜像,用空格隔开。

可以用 docker save 将镜像保存为文件,其中 -o 指定了输出的文件地址:

docker pull busybox:latest
docker save -o myfile.tar busybox:latest

可以用 docker load 从文件中加载并安装镜像,同样,-i 指定输入的文件地址:

docker load -i myfile.tar

使用项目中编写的 Dockerfile 来构建镜像:

git clone https://github.com/dockerinaction/ch3_dockerfile.git
docker build -t dia_ch3/dockerfile:latest ch3_dockerfile

镜像层级

通常谈论到的"镜像"实际上是多个镜像层级的集合。比如一个 app 镜像的实际层级可能是这样的:

[debian] → [openjdk] → [app]

这样的好处在于,如果多个"镜像"中存在相同的层级镜像时,Docker 将不会重复下载公共层级。

默认情况下,docker images 仅显示镜像。而如果制定了 -a 选项,输出列表将会包括已安装的层级镜像。

容器文件系统

在 docker run 中可以用 --rm 选项来在容器退出时自动删除容器。

Docker 通过 联合文件系统 UFS 实现容器文件系统的隔离,它采用了写时复制(copy-on-write)的模式。从容器的角度看,它具有镜像提供的文件的专有副本。

其他有用的工具包括 MNT 命名空间和 chroot 系统调用。当 Docker 创建容器时,新容器会有自己的 MNT 命名空间,并挂载到镜像上。其次 chroot 会使镜像文件系统的根成为容器环境中的根,这样可以防止容器中的程序引用到主机文件系统的其他部分。

TALAXY 落于 2024年5月25日 。