一. 使用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"
}