Ansible docker_container
模块
一、简介
- 功能:
docker_container
模块用于管理 Docker 容器。它可以创建、启动、停止、删除容器,管理容器的配置、网络和挂载卷等。这个模块支持大多数 Docker 容器的管理任务,是 Ansible 中用于自动化容器化部署的核心工具。 - 使用场景:常用于自动化部署和管理 Docker 容器化应用,如启动新的应用服务、更新现有容器、管理容器网络和存储配置等。
二、基本用法
2.1 语法
ansible <pattern> -m docker_container -a "name=<container_name> image=<image_name> [other options]"
<pattern>
:指定要操作的主机或主机组,例如all
、docker_hosts
。-m docker_container
:指定使用docker_container
模块。name=<container_name>
:指定容器的名称。image=<image_name>
:指定容器使用的 Docker 镜像。
2.2 常见 state
参数
present
:确保容器已创建并正在运行。started
:确保容器已启动,如果容器已停止,则重新启动它。stopped
:确保容器已停止。absent
:确保容器已删除。
三、使用示例
3.1 启动新容器
ansible all -m docker_container -a "name=myapp image=nginx state=started"
- 解释:在所有主机上使用
nginx
镜像启动一个名为myapp
的容器。如果容器已经存在但未运行,docker_container
模块会启动它。
3.2 停止并删除容器
ansible all -m docker_container -a "name=myapp state=absent"
- 解释:在所有主机上停止并删除名为
myapp
的容器。
3.3 使用环境变量启动容器
ansible all -m docker_container -a "name=myapp image=myapp:latest env='ENV_VAR1=value1 ENV_VAR2=value2' state=started"
- 解释:在所有主机上启动一个名为
myapp
的容器,并传递环境变量ENV_VAR1=value1
和ENV_VAR2=value2
。
3.4 启动带有挂载卷的容器
ansible all -m docker_container -a "name=myapp image=myapp:latest volumes='/host/path:/container/path' state=started"
- 解释:在所有主机上启动一个名为
myapp
的容器,并将主机路径/host/path
挂载到容器的/container/path
路径下。
3.5 启动容器并连接到指定网络
ansible all -m docker_container -a "name=myapp image=myapp:latest networks='my_network' state=started"
- 解释:在所有主机上启动一个名为
myapp
的容器,并将其连接到名为my_network
的 Docker 网络。
3.6 重新启动一个容器
ansible all -m docker_container -a "name=myapp state=restarted"
- 解释:在所有主机上重新启动名为
myapp
的容器。
四、其他常用选项
4.1 image
-
功能:指定用于创建容器的 Docker 镜像,可以包括标签(如
nginx:latest
)。 -
用法:
ansible all -m docker_container -a "name=myapp image=myapp:1.0 state=started"
- 解释:使用
myapp:1.0
镜像启动一个名为myapp
的容器。
- 解释:使用
4.2 volumes
-
功能:指定要挂载到容器的卷,格式为
host_path:container_path
,可以是多个卷的列表。 -
用法:
ansible all -m docker_container -a "name=myapp image=myapp:latest volumes='/host/path:/container/path'"
- 解释:将主机路径
/host/path
挂载到容器的/container/path
。
- 解释:将主机路径
4.3 env
-
功能:设置容器的环境变量,格式为
KEY=value
,可以是多个变量的列表。 -
用法:
ansible all -m docker_container -a "name=myapp image=myapp:latest env='ENV_VAR1=value1 ENV_VAR2=value2'"
- 解释:启动容器并设置环境变量
ENV_VAR1
和ENV_VAR2
。
- 解释:启动容器并设置环境变量
4.4 networks
-
功能:指定容器要连接的 Docker 网络,可以是单个网络或多个网络的列表。
-
用法:
ansible all -m docker_container -a "name=myapp image=myapp:latest networks='my_network'"
- 解释:启动容器并连接到
my_network
网络。
- 解释:启动容器并连接到
4.5 ports
-
功能:映射容器端口到主机端口,格式为
host_port:container_port
,可以是多个端口的列表。 -
用法:
ansible all -m docker_container -a "name=myapp image=myapp:latest ports='8080:80'"
- 解释:将容器的端口
80
映射到主机的8080
端口。
- 解释:将容器的端口
4.6 restart_policy
-
功能:设置容器的重启策略,如
always
(始终重启)、unless-stopped
(除非手动停止)、on-failure
(仅在失败时重启)等。 -
用法:
ansible all -m docker_container -a "name=myapp image=myapp:latest restart_policy=always"
- 解释:设置容器的重启策略为始终重启(
always
)。
- 解释:设置容器的重启策略为始终重启(
五、注意事项
- 资源限制:启动容器时,考虑配置
memory
、cpu_shares
等资源限制,以避免容器占用过多资源影响主机性能。 - 状态一致性:在多主机环境中,确保容器的状态在所有目标主机上保持一致。如果需要跨多个主机部署服务,请注意容器的网络和存储配置的一致性。
- 日志管理:配置
log_driver
和log_options
来管理容器的日志,避免日志占用过多磁盘空间。