利用Docker容器提供Ansible学习环境

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Docker系列

Ansible是一个自动化运维框架,由Python语言开发,通过ssh实现无Agent对服务器进行一些列的自动化管理,比如进行软件安装、配置文件更新、文件分发等操作。这些功能的实现实际上是通过Ansible的诸多模块实现的,通过与模块之间的交互通信,实现这些功能。今天我们首先准备一下Ansible的实验环境,然后在此试验环境内进行Ansible由浅入深的学习。

通过轻量化的容器充当虚拟机,作为Ansible实验学习的基础环境,因此我们需要配置一个可以带有SSHD服务的容器,注意Dockerfile中登录容器的账号和密码为root:password

FROM ubuntu:18.04
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list

RUN apt-get update

RUN apt-get install -y openssh-server
RUN mkdir /var/run/sshd

RUN echo 'root:password' |chpasswd


RUN sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
RUN sed -ri 's/^#?PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config

RUN mkdir /root/.ssh

RUN apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

EXPOSE 22

CMD    ["/usr/sbin/sshd", "-D"]

构建镜像

docker build -t ansible_vm:v1 -f Dockerfile .

然后批量运行多个容器,初始化"虚拟机"环境:

root@nodec:~/workspace/ansible# for i in `seq 1 5`;do docker run -d --name ansible_vm_$i ansible_vm:v1;done
6cff77c574620987439c07a4b2698cd8bbff5ef46def505877df9bfd6b9a9966
cedb69ba3a1767116db2fc19ba64571f5e4e7d4269ad668881ef57d99b89c0e8
54278e64f06883b9d726a1c8d1458c53610c7375e345846183e36a59dee30040
921b7ec45b6cfd8569f25ac222525423b35c2272321c6585bc96c0e9839ea97d
beb134faa1098a107e742d0c9c81a542af9ea65ccee14ee5f66ce3250768c202
root@nodec:~/workspace/ansible# docker ps -a |grep ansible_vm
beb134faa109        ansible_vm:v1                               "/usr/sbin/sshd -D"      14 seconds ago      Up 11 seconds                     22/tcp                              ansible_vm_5
921b7ec45b6c        ansible_vm:v1                               "/usr/sbin/sshd -D"      16 seconds ago      Up 13 seconds                     22/tcp                              ansible_vm_4
54278e64f068        ansible_vm:v1                               "/usr/sbin/sshd -D"      18 seconds ago      Up 15 seconds                     22/tcp                              ansible_vm_3
cedb69ba3a17        ansible_vm:v1                               "/usr/sbin/sshd -D"      21 seconds ago      Up 18 seconds                     22/tcp                              ansible_vm_2
6cff77c57462        ansible_vm:v1                               "/usr/sbin/sshd -D"      23 seconds ago      Up 20 seconds                     22/tcp                              ansible_vm_1

root@nodec:~/workspace/ansible# for i in `seq 1 5`;do docker inspect ansible_vm_$i -f {{.NetworkSettings.Networks.bridge.IPAddress}};done > ansible_vm_ips
root@nodec:~/workspace/ansible# cat ansible_vm_ips # 所有测试节点的IP
172.17.0.2
172.17.0.3
172.17.0.4
172.17.0.5
172.17.0.6

# 如果需要销毁这些容器,参考下方的命令👹
for i in `seq 1 5`;do docker stop ansible_vm_$i && docker rm ansible_vm_$i;done

节点准备完成之后,我们准备在宿主机上开始安装Ansible

sudo apt update
sudo apt install software-properties-common -y
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible -y
date;ansible --version
Sat Sep 26 18:25:53 CST 2020
ansible 2.9.13
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.12 (default, Jul 21 2020, 15:19:50) [GCC 5.4.0 20160609]

准备由ansible托管的机器清单,这里我们直接修改前面我们通过docker准备的ip列表文件

root@nodec:~/workspace/ansible# sed -i '1 i[docker]' ansible_vm_ips 
root@nodec:~/workspace/ansible# cat ansible_vm_ips 
[docker]
172.17.0.2
172.17.0.3
172.17.0.4
172.17.0.5
172.17.0.6
# Ansible官方把由ansible托管的机器列表配置文件叫做inventory.cfg. 所以我们重命名一下
root@nodec:~/workspace/ansible# mv ansible_vm_ips inventory.cfg

最后一步重要的步骤就是配置无密访问这些托管的机器

root@nodec:~/workspace/ansible# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:7mxkv8t2FXzVS43pOwCQ3fT4THravv1oFKSMTXXKjVc root@nodec.devopsman.cn
The key's randomart image is:
+---[RSA 2048]----+
|        .+ o...oE|
|        . o o++*=|
|           *.=B =|
|          . ===o.|
|        S   ..+= |
|       .o    +=  |
|       o..  .o.. |
|       o..o ...o |
|       .o.++ .+.+|
+----[SHA256]-----+

# 然后将公钥分发给这些托管机器
root@nodec:~/workspace/ansible# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.17.0.2
root@nodec:~/workspace/ansible# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.17.0.3
root@nodec:~/workspace/ansible# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.17.0.4
root@nodec:~/workspace/ansible# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.17.0.5
root@nodec:~/workspace/ansible# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.17.0.6

现在我们通过ansible的基础模块ping进行测试

root@nodec:~/workspace/ansible# ansible docker -i ./inventory.cfg -m ping
172.17.0.3 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    }, 
    "changed": false, 
    "ping": "pong"
}
172.17.0.5 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    }, 
    "changed": false, 
    "ping": "pong"
}
172.17.0.6 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    }, 
    "changed": false, 
    "ping": "pong"
}
172.17.0.2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    }, 
    "changed": false, 
    "ping": "pong"
}
172.17.0.4 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    }, 
    "changed": false, 
    "ping": "pong"
}

这样我们的Ansible实验环境就完成了。

相关文章
|
2月前
|
Kubernetes 供应链 安全
云原生环境下的容器安全与最佳实践
云原生时代,容器与 Kubernetes 成为企业应用核心基础设施,但安全挑战日益突出。本文探讨容器安全现状与对策,涵盖镜像安全、运行时防护、编排系统风险及供应链安全,提出最小权限、漏洞扫描、网络控制等最佳实践,并结合阿里云 ACK、ACR 等服务提供全链路解决方案,展望零信任、AI 安全与 DevSecOps 融合趋势。
127 4
|
1月前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
113 5
|
1月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
1月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
345 5
|
1月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
169 6
|
3月前
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
282 16
|
弹性计算 应用服务中间件 Linux
基于ECS快速搭建Docker环境
本教程介绍如何快速搭建Docker环境,并使用Docker部署一个Nginx服务。
基于ECS快速搭建Docker环境