一. 使用dockerfile创建支持ssh服务的centos7镜像
注意:本文基础都是在docker和ansible都安装好的情况下
- 创建dockerfile目录
[root@localhost /]# mkdir mydocker
[root@localhost /]# cd mydocker
#创建启动ssh服务的shell脚本
[root@localhost mydocker]# vim run.sh
#!/bin/bash
/usr/sbin/sshd -D
#创建ssh公钥实现免密登录
[root@localhost mydocker]# ssh-keygen -t rsa
[root@localhost mydocker]# cat /root/.ssh/id_rsa.pub > authorized_keys
# 创建Dockerfile空文件
[root@localhost mydocker]# vim Dockerfile
#在mydocker路径下应该有这三个文件
[root@localhost mydocker]# ls
authorized_keys Dockerfile run.sh
- 编写Dockerfile文件
[root@localhost mydocker]# vim Dockerfile
#设置继承镜像
FROM centos
#提供作者信息
MAINTAINER from xldwhj
#开始运行命令
RUN yum -y update
#安装openssh-serverfuwu
RUN yum -y install openssh-server
#修改/etc/ssh/sshd_config
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN mkdir -p /var/run/sshd
RUN mkdir -p /root/.ssh
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
#复制配置文件到相应位置,并赋予脚本可执行权限
ADD authorized_keys /root/.ssh/authorized_keys
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#变更root密码为123123
RUN echo "root:123456"|chpasswd
#开放22端口
EXPOSE 22
#运行脚本,启动sshd服务
CMD ["/run.sh"]
- docker build构建镜像
[root@localhost mydocker]# docker build -t ssh/centos .
Sending build context to Docker daemon 4.096kB
Step 1/15 : FROM centos
---> 0f3e07c0138f
Step 2/15 : MAINTAINER by liuguangshun ([email protected])
---> Using cache
---> 93b9680ef262
Step 3/15 : RUN yum -y update
---> Using cache
---> 7384fbe6821d
Step 4/15 : RUN yum -y install openssh-server
---> Using cache
---> c9725936d71b
Step 5/15 : RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
---> Using cache
---> 8fc8409955ca
Step 6/15 : RUN mkdir -p /var/run/sshd
---> Using cache
---> 47e8ddda1ad1
Step 7/15 : RUN mkdir -p /root/.ssh
---> Using cache
---> 2aee3b07ce2b
Step 8/15 : RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
---> Using cache
---> 53b36cea4e28
Step 9/15 : RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
---> Using cache
---> cfd4ebdc8788
Step 10/15 : ADD authorized_keys /root/.ssh/authorized_keys
---> Using cache
---> b6cd0bdd1bc5
Step 11/15 : ADD run.sh /run.sh
---> Using cache
---> cb9228a99fb7
Step 12/15 : RUN chmod 755 /run.sh
---> Using cache
---> 42ff75e5607a
Step 13/15 : RUN echo "root:123456"|chpasswd
---> Using cache
---> 596cc21ae7d6
Step 14/15 : EXPOSE 22
---> Using cache
---> d2595ca13c62
Step 15/15 : CMD ["/run.sh"]
---> Using cache
---> 6db3052632ab
Successfully built 6db3052632ab
Successfully tagged ssh/centos:latest
#检查镜像是否构建成功
[root@localhost mydocker]# docker images
ssh/centos latest 6db3052632ab 3 hours ago 378MB
- 使用镜像创建容器
#--privileged /usr/sbin/init 这两参数可以让在容器中使用systemctl命令
[root@localhost mydocker]# docker run --name ansible1 --privileged -d ssh/centos /usr/sbin/init
#查看创建的容器
[root@localhost mydocker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
16cebcbd5868 centos/ssh "/usr/sbin/init" 3 hours ago Up 3 hours 22/tcp ansible1
二. Ansible连接被管理主机(创建的容器)
- hosts 文件添加被管理机
vim /etc/ansible/hosts
添加:
[client]
172.17.0.2 #容器的IP
- 测试ansible能否连接被管理主机
[root@localhost /]# ansible all -m ping
172.17.0.2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}