快速上手10.0 Ansible Docker
2021-03-26 09:44
746 查看
概览
Ansible内置一些专用的Docker模块,帮助我们更好的管理容器相关环境
环境信息
Ansible 2.9.16 CentOS Linux release 7.9.2009 (Core) Docker version 18.09.9 Python 2.7.5 Docker python module docker-4.4.1
依赖安装
#1 安装docker https://blog.csdn.net/xys2015/article/details/109370082 #2 开启EPEL repository https://blog.csdn.net/xys2015/article/details/109378741 #3 安装pip yum install python-pip #4 安装docker python module pip install docker
这些依赖当然也可以通过Ansible来安装
快速上手
话不多说,环境配置好后,我们先看一个示例
目标
- 在本机基于Dockerfile构建镜像
- 启动构建好的镜像
目录结构
[root@192_168_1_237 ysansible]# tree docker/ docker/ ├── main.yml ├── mybusybox │ └── Dockerfile └── README.md #完整内容参见 https://gitee.com/as4k/ysansible/tree/master/docker/main1.yml
关于Docker本身的一些知识,本文不多做介绍
重点提要
- name: Ensure Docker image is built from the test Dockerfile. docker_image: #相当于docker build相关功能 name: mybusybox:v3 #这里是构建后的镜像名称,如果需要重新构建镜像,这里的版本号需要更改 source: build build: pull: yes #自动拉取构建需要的镜像,我们这里即自动拉取busybox镜像 path: mybusybox #在 ./mybusybox 找 Dockerfile 文件 state: present - name: Ensure the test container is running. docker_container: #相当于docker run相关功能 image: mybusybox:v3 #运行这个镜像 name: mybusybox #镜像的名称 state: started
执行结果验证
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f80619da371e mybusybox:v3 "tail -F /tmp/tmp.txt" 36 minutes ago Up 36 minutes mybusybox # docker exec mybusybox hostname f80619da371e
Docker命令与Ansible状态对应关系
Docker Command | Ansible state value | 备注 |
---|---|---|
docker run | started | |
docker run | present | 保持原样,如果容器已经是停止状态,将不会启动 |
docker stop | stopped | |
docker rm | absent |
在远程机器进行build
1 远程机器依赖安装
参考上文,当然也可以使用Ansible安装
2 改动playbook
- name: copy Dockerfile to target machine copy: src: mybusybox dest: /tmp - name: Ensure Docker image is built from the test Dockerfile. docker_image: name: mybusybox:v3 source: build build: pull: yes path: /tmp/mybusybox state: present - name: Ensure the test container is running. docker_container: image: mybusybox:v3 name: mybusybox state: started
完整内容参考 https://gitee.com/as4k/ysansible/blob/master/docker/main2.yml
3 执行
ansible-playbook main2.yml --limit 192.168.31.101
docker_image 模块
如果我们熟悉
docker image xxx相关操作,
docker_image基本上跟其对应,可以使用
ansible-doc docker_image查看文档,或者查看其官方文档 https://docs.ansible.com/ansible/latest/collections/community/docker/docker_image_module.html#ansible-collections-community-docker-docker-image-module
下面列举一些示例
#1 下载镜像 - name: Pull an image community.docker.docker_image: name: pacur/centos-7 source: pull #2 给镜像打标签 - name: Add tag latest to image community.docker.docker_image: name: myimage:7.1.2 #原镜像名称 repository: myimage:latest #新打的镜像名称 force_tag: yes #如果标签重复,强制覆盖 source: local #3 删除一个镜像 - name: Remove image community.docker.docker_image: state: absent name: registry.ansible.com/chouseknecht/sinatra tag: v1 #4 导出镜像为tar包 - name: Archive image community.docker.docker_image: name: registry.ansible.com/chouseknecht/sinatra tag: v1 archive_path: my_sinatra.tar source: local
docker_container 模块
同类,这个模块实现
docker container xxx相关功能,在线文档 https://docs.ansible.com/ansible/latest/collections/community/docker/docker_container_module.html#ansible-collections-community-docker-docker-container-module
一些参考示例如下:
#1 启动一个容器 - name: Ensure the test container is running. docker_container: image: mybusybox:v3 pull: yes #无论镜像是否存在,都进行拉取,这种情况可以规避镜像被更新,但是标签没变的情况 name: mybusybox state: started #2 启动镜像并挂载本地存储 - name: Finer container restart/update control community.docker.docker_container: name: test image: ubuntu:18.04 env: arg1: "true" arg2: "whatever" volumes: - /tmp:/tmp #3 启动镜像并附带健康检查 - name: Start container with healthstatus community.docker.docker_container: name: nginx-proxy image: nginx:1.13 state: started healthcheck: test: ["CMD", "curl", "--fail", "http://nginx.host.com"] interval: 1m30s timeout: 10s retries: 3 start_period: 30s
报错处理
#1 没有安装docker python module ================== fatal: [localhost]: FAILED! => {"changed": false, "msg": "Failed to import the required Python library (Docker SDK for Python: docker (Python >= 2.7) or docker-py (Python 2.6)) on 192_168_1_237's Python /usr/bin/python2. Please read module documentation and install in the appropriate location. If the required library is installed, but Ansible is using the wrong Python interpreter, please consult the documentation on ansible_python_interpreter, for example via `pip install docker` or `pip install docker-py` (Python 2.6). The error was: No module named requests.exceptions"} #2 没有安装docker或者docker未启动 ================== fatal: [localhost]: FAILED! => {"changed": false, "msg": "Error connecting: Error while fetching server API version: ('Connection aborted.', error(111, 'Connection refused'))"}
参考资料
https://docs.ansible.com/ansible/latest/scenario_guides/guide_docker.html https://docs.ansible.com/ansible/latest/collections/index_module.html https://docs.ansible.com/ansible/latest/collections/community/docker/docker_image_module.html#ansible-collections-community-docker-docker-image-module
全部支持的docker模块截图如下
相关文章推荐
- 带你快速上手docker
- Docker 快速上手系列(1): 镜像的概念及相关操作
- Ansible 快速上手(转)
- Docker快速上手系列(1):镜像的概念及相关操作
- 0202 - Apache Pulsar快速上手-在Docker下安装
- 用Docker在一台笔记本电脑上搭建一个具有10个节点7种角色的Hadoop集群(上)-快速上手Docker
- Docker 快速上手系列(5): 网络基础配置和容期间通信
- Ansible 快速上手
- Docker 快速上手系列(2): 容器的概念及相关操作
- Docker 快速上手系列(3): 仓库的概念及相关操作
- Ansible 快速上手
- 使用 mongodb 的 Docker Image 快速上手系列 lab
- Docker 快速上手系列(4): 数据卷,数据卷容器的概念及相关操作
- Dockerfile快速上手
- [授权发表]Docker 快速上手:用 Docker + GitBook 写书
- Docker 入门快速上手指南
- Docker 快速上手指南
- [Docker]Docker快速上手学习笔记
- SpringMVC快速上手教程及SSM整合案例
- 使用Docker快速部署Storm环境