Ansible docker_image
模块
一、简介
- 功能:
docker_image
模块用于管理 Docker 镜像。它可以从 Docker Hub 或私有注册表中拉取镜像、构建本地镜像、删除不需要的镜像,以及推送镜像到注册表。这个模块是自动化 Docker 镜像管理的重要工具。 - 使用场景:常用于自动化部署流程中,确保目标主机上拥有最新的应用镜像,或者在部署之前构建和准备应用镜像。
二、基本用法
2.1 语法
ansible <pattern> -m docker_image -a "name=<image_name> [other options]"
<pattern>
:指定要操作的主机或主机组,例如all
、docker_hosts
。-m docker_image
:指定使用docker_image
模块。name=<image_name>
:指定要管理的 Docker 镜像名称,通常包括镜像标签(如nginx:latest
)。
2.2 常见 state
参数
present
:确保镜像已存在。如果镜像不存在,则拉取或构建它。absent
:确保镜像已删除。latest
:确保镜像是最新版本。如果有更新版本,则拉取最新镜像。
三、使用示例
3.1 拉取最新镜像
ansible all -m docker_image -a "name=nginx:latest state=present"
- 解释:在所有主机上拉取
nginx:latest
镜像。如果镜像已经存在,则不会拉取;如果不存在,则从 Docker Hub 拉取该镜像。
3.2 删除镜像
ansible all -m docker_image -a "name=myapp:old_version state=absent"
- 解释:在所有主机上删除名为
myapp:old_version
的 Docker 镜像。
3.3 构建本地镜像
ansible all -m docker_image -a "path=/path/to/dockerfile name=myapp:latest state=present"
- 解释:在所有主机上使用指定路径的 Dockerfile 构建一个名为
myapp:latest
的本地镜像。
3.4 从私有注册表拉取镜像
ansible all -m docker_image -a "name=registry.example.com/myapp:latest state=present"
- 解释:在所有主机上从私有注册表
registry.example.com
拉取myapp:latest
镜像。
3.5 推送镜像到注册表
ansible all -m docker_image -a "name=myapp:latest push=yes"
- 解释:将本地主机上的
myapp:latest
镜像推送到配置的 Docker 注册表中。
四、其他常用选项
4.1 path
-
功能:指定 Dockerfile 所在的路径,用于构建本地镜像。
-
用法:
ansible all -m docker_image -a "path=/path/to/dockerfile name=myapp:latest state=present"
- 解释:使用
/path/to/dockerfile
路径下的 Dockerfile 构建myapp:latest
镜像。
- 解释:使用
4.2 pull
-
功能:指定是否强制拉取最新版本的镜像。设置为
yes
时,会忽略本地缓存并拉取最新版本。 -
用法:
ansible all -m docker_image -a "name=nginx:latest pull=yes"
- 解释:在所有主机上强制拉取
nginx:latest
镜像,即使本地已有该镜像也会拉取更新版本。
- 解释:在所有主机上强制拉取
4.3 push
-
功能:指定是否将构建的镜像推送到 Docker 注册表。通常与
path
一起使用。 -
用法:
ansible all -m docker_image -a "path=/path/to/dockerfile name=myapp:latest push=yes"
- 解释:构建
myapp:latest
镜像后,将其推送到配置的 Docker 注册表。
- 解释:构建
4.4 force
-
功能:在构建镜像时强制覆盖已有的同名镜像。
-
用法:
ansible all -m docker_image -a "path=/path/to/dockerfile name=myapp:latest force=yes"
- 解释:在所有主机上强制构建并覆盖
myapp:latest
镜像,即使同名镜像已经存在。
- 解释:在所有主机上强制构建并覆盖
4.5 source
-
功能:指定镜像的来源,可以是
pull
(从注册表拉取)、build
(从 Dockerfile 构建)或load
(从存档文件加载)。 -
用法:
ansible all -m docker_image -a "source=build path=/path/to/dockerfile name=myapp:latest"
- 解释:从 Dockerfile 构建
myapp:latest
镜像。
- 解释:从 Dockerfile 构建
4.6 load_path
-
功能:指定要从中加载 Docker 镜像的 tarball 文件路径。通常用于将预先保存的镜像导入到 Docker 中。
-
用法:
ansible all -m docker_image -a "source=load load_path=/path/to/image.tar"
- 解释:从
image.tar
文件中加载 Docker 镜像。
- 解释:从
五、注意事项
- 私有注册表认证:如果从私有注册表拉取或推送镜像,确保主机上已经正确配置了 Docker 注册表的认证信息。
- 镜像构建速度:在资源受限的主机上,构建大型镜像可能耗时较长。建议通过
pull
选项提前拉取依赖镜像,减少构建时间。 - 磁盘空间管理:频繁拉取和构建镜像可能占用大量磁盘空间,建议定期清理不再需要的镜像或使用
docker system prune
命令清理未使用的资源。