1. 程式人生 > >docker筆記--容器之間如何互相免密?

docker筆記--容器之間如何互相免密?

在使用docker搭建hadoop分散式叢集的時候,需要各容器之間相互免密登入,傳統的方式我想或許會很麻煩,特別是當容器達到幾百上千臺的時候,這時就需要有一種方式來更簡單實現免密登入了。

環境介紹:

宿主機:centos 7

docker 版本:18.09.0

映象版本:ubuntu:14.04(官方映象,無ssh,需要自行安裝)

方法一:

      怎麼說呢,第一種方法不是不可以,但很麻煩。這裡只是說一下方法:

當容器建立完成以後,拷貝容器裡面的主機名和ip對映關係到本地host.file檔案,通過這個host.file檔案遠端到容器執行ssh-keygen命令生成祕鑰,然後把每一個容器生成的祕鑰拷貝到宿主機的authorized_file,最後把host.file檔案上傳到容器裡面/etc/hosts下,把authorized-file檔案拷貝到容器的~/.ssh/authorized_keys,當然,這個需要指令碼實現,比較麻煩。下面介紹一種更簡單的方式

方法二:

(1)因為官方的ubuntu映象沒有ssh,所以需要在ubuntu裡面安裝,這裡有兩種方法,第一種是通過Dockerfile檔案,第二種是先docker run 然後安裝完ssh在執行doxker commit。我這裡使用Dockerfile

FROM ubuntu:14.04
MAINTAINER yjt xxx
RUN sudo apt-get update && \
sudo apt-get install -y net-tools openssh-server psmisc iproute wget vim
RUN ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' && cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys && \
sed -i 's/PermitEmptyPasswords yes/PermitEmptyPasswords no /' /etc/ssh/sshd_config && \
sed -i 's/PermitRootLogin without-password/PermitRootLogin yes /' /etc/ssh/sshd_config && \
echo " StrictHostKeyChecking no" >> /etc/ssh/ssh_config && \
echo " UserKnownHostsFile /dev/null" >> /etc/ssh/ssh_config && \
echo "root:1234" | chpasswd
CMD [ "sh", "-c", "sudo service ssh start; bash"]

接下來,命令列執行:

# docker build -t ubuntu-ssh .

通過剛剛生成的映象啟動兩臺容器:

#  docker run -it --rm --name=yjt1 --net mynetwork --ip 172.20.1.1 --privileged ubuntu-ssh

# docker run -it --rm --name=yjt2 --net mynetwork --ip 172.20.1.2 --privileged ubuntu-ssh

進入到某一臺容器執行 ssh yjt1 或者ssh  yjt2 如果能成功的免密登入,那說明OK

列:

進入到容器檢視hosts檔案:

看到沒有,這裡並沒有做ip與主機的對映,接下來ssh 到yjt1 或者 yjt2 試試效果:

 

 

到此,docker容器互相免密就OK了,希望能幫助到需要的朋友。