如何在centos7中使用docker創建一個支持ssh連接的容器
以下內容已有現成的,這里借用下這哥們的帖子https://www.cnblogs.com/caidingyu/p/10642158.html。
並附上自己理解
1.拉取centos7.4鏡像(由於7.4目前是最穩定的版本,所以推薦使用centos7.4)
ps:最新版已到8,可去https://hub.docker.com/查閱
1
|
docker pull centos:7.4.1708
|
2.執行以下命令查看已有的鏡像
1
|
docker images
|
3、基於centos鏡像,創建一個名為centos7ssh的容器並進入容器(這里名稱可以自定義)
ps:啟動時 /bin/bash 表示命令行path。該path環境變量,自帶的有:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
1
|
docker run -it --name centos7ssh centos:7.4.1708
/bin/bash
|
4、進入容器后,安裝ssh服務端和客戶端,服務端能讓其他主機遠程登錄本機,客戶端能讓本機遠程登錄其他主機
ps:docker安裝的centos沒有passwd命令,但是你用whereis passwd依然可以找到位置。所有建議你安裝ssh的passwd命令
1
|
yum -y
install
passwd
openssl openssh-server openssh-clients
|
ps:我自己安裝yum install openssh-server 后。無需走5,6步
5.創建 /var/run/sshd/目錄,要不然sshd服務啟動會報錯
1
|
mkdir
/var/run/sshd/
|
6.編輯sshd的配置文件/etc/ssh/sshd_config,將其中的UsePAM yes改為UsePAM no
可以進入sshd_config文件中去修改,也可以使用命令:
1
|
sed
-i
"s/UsePAM.*/UsePAM no/g"
/etc/ssh/sshd_config
|
ps:你用密碼登錄就無需步驟7
7.創建公私密鑰,輸入命令后,直接按兩次enter鍵確認就行了
1
2
3
|
ssh
-keygen -t rsa -f
/etc/ssh/ssh_host_rsa_key
ssh
-keygen -t ecdsa -f
/etc/ssh/ssh_host_ecdsa_key
ssh
-keygen -t ed25519 -f
/etc/ssh/ssh_host_ed25519_key
|
8.完成上述幾步后,可以開啟ssh服務了(&表示后台啟動)
1
|
/usr/sbin/sshd
-D &
|
9.此時使用命令ps -ef | grep sshd 便可以看到
10.查詢22端口是否處於監聽狀態
1
|
yum -y
install
lsof
|
1
|
lsof
-i:22
|
11.修改root密碼
1
|
passwd
|
12.測試
輸入命令ssh localhost,然后輸入之前設置的root密碼
上圖中可以看到已經登錄到本機了,也就說容器中的主機擁有了ssh遠程登錄其它主機的能力,當然你也可以登錄其他主機。
要退出的話,輸入命令exit即可
13.如何配置外部客戶端訪問docker里的centos7.4容器
獲取容器的ID等端口映射信息
1
|
docker
ps
-a
|
提交容器成為新的鏡像,例如叫做sshd_centos7.4,輸入
1
|
docker commit 容器ID sshd_centos7.4
|
啟動這個鏡像的容器,並映射本地的一個閑置的端口(例如15000)到容器的22端口,並啟動容器的sshd(只要端口不沖突可以同時啟動多個容器,如下圖)
1
|
docker run -d -p 15000:22 sshd_centos7.4
/usr/sbin/sshd
-D
|
現在打開新的終端,輸入ssh root@宿主機IP地址 -p 15000,如果能連接成功,會要求輸入密碼的,輸入剛才passwd命令設置的root賬戶密碼就可以進入容器的終端了
如果連接失敗,請檢查防火牆是否未開放該端口。
參考文檔:https://www.cnblogs.com/whutxldwhj/p/6427530.html
https://blog.csdn.net/u013140345/article/details/79777311
https://blog.csdn.net/weipeng19861130/article/details/79006555
以下為網友提供的方法還未驗證是否可用,可自行驗證
1
2
3
4
5
6
7
8
9
10
11
12
|
docker pull centos:7.2.1511
//
也可以不指定版本,默認最新latest
docker run -t -i centos:7.2.1511
/bin/bash
//
啟動並進入docker 容器
yum
install
wget
wget -O
/etc/yum
.repos.d
/CentOS-Base
.repo http:
//mirrors
.aliyun.com
/repo/Centos-7
.repo
yum cleal all
yum
install
passwd
yum
install
openssh-server
#安裝ssh服務端
echo
'passw0rd'
|
passwd
root
//
修改root密碼
docker commit [容器ID] [新鏡像名]
//
使用commit 提交,簡單的配置可以使用dockerfile創建鏡像,但是要配置環境比較復雜,還是需要用到commit
docker run -d -p 220:22 c7ssh
/usr/sbin/sshd
-D
//
啟動容器,並綁定容器端口22到宿主主機, 可以有多個-p 綁定多個端口,例如22端口讓遠程客戶端連接,8080 可以訪問容器內tomcat
|
總結:起初我安裝的是ubuntu,當然ubuntu的image很小只有80M左右。但是他僅僅只是一個內核,什么都沒有,自己需要安裝的東西太多。直接換的centos