2015-01-18 wcdj
摘要:通常linux系統管理員通過ssh服務來管理os,但docker的很多映象是不帶ssh服務的,可以通過attach(遇到假死的現象)或者exec(目前測試ok)的方法進入容器來管理,但是這些命令都無法解決遠端管理容器的問題,因此,當需要遠端登陸到容器內進行一些操作的時候,就需要ssh的支援了。本文記錄如何使用docker commit建立乙個帶有ssh服務的ubuntu映象。
(1) 首先以互動的方式執行我們本地的ubuntu容器
docker run -it ubuntu:14.04 /bin/bash
(2) 嘗試使用sshd命令,會發現容器中沒有安裝該服務。
sshd
bash: sshd: command not found
(3) 使用apt包管理器安裝openssh-server
apt-get update
apt-get install openssh-server
(4) 安裝和配置ssh服務
要正常啟動ssh服務,需要目錄/var/run/sshd存在,手動建立它,並啟動服務:
mkdir -p /var/run/sshd
/usr/sbin/sshd -d &
此時檢視容器的22埠(ssh伺服器預設監聽的埠),已經處於監聽狀態:
(5) 修改ssh服務的安全登陸配置
在遠端客戶端機器(即,非容器機器)執行命令 ssh-keygen -t rsa 生成rsa的公私金鑰對,然後把公鑰的資訊拷貝到執行ubuntu容器機器的授權檔案中:
mkdir /root/.ssh
vi /root/.ssh/authorized_keys # 貼上客戶端的公鑰資訊
(6) 建立自啟動ssh服務的可執行檔案run.sh
vi /run.sh
chmod +x /run.sh
指令碼內容如下:
#!/bin/bash
/usr/sbin/sshd -d
(7) 最後退出容器,並將當前修改後的容器儲存為乙個新的映象
在宿主主機執行命令 docker ps -a 檢視容器的執行狀態,可以得到剛才退出容器的container id,記住id前三位。
然後執行提交命令,儲存新的映象:
docker commit $(container id前三位) ubuntu_sshd_gerry:14.04
此命令提交後,會生成乙個新的映象id*(image id)和新的映象 ubuntu_sshd_gerry:14.04(支援ssh服務的ubuntu映象)
最後,可以使用 docker images 檢視本地的映象是否已經包含我們新建立的映象 ubuntu_sshd_gerry:14.04。
(8) 使用新映象和配置埠對映
啟動容器,並新增埠對映 10022(宿主主機埠)---> 22(容器內部ssh服務監聽埠):
docker run -p 10022:22 -d ubuntu_sshd_gerry:14.04 /run.sh
啟動後,可以在宿主主機上看到容器執行的詳細資訊:
(9) 在宿主主機,或者其他遠端主機,使用ssh訪問10022埠來登陸容器,測試ok
補充說明:
對乙個映象打乙個新的tag的方法(只是tag不一樣,實際是同乙個image,因為image id是一樣的):
docker tag $(image id) ubuntu_sshd_gerry:14.04
然後將老的tag刪除掉:
docker rm $(container id)
參考[1] docker技術入門與實踐
建立支援SSH服務的映象
上圖中,我們首先檢視當前系統中有哪些映象,可以看到我們有乙個ubuntu latest的映象,我們使用該映象來建立乙個容器。docker run it ubuntu latest bin bash,這個命令相當於create 並且 run起這個容器,這樣我們就進入了這個建立好容器的bash中 在ba...
建立支援ssh服務的docker映象
容器裡面執行以下操作 1 apt get install openssh server 2 mkdir p var run sshd 3 修改 etc ssh sshd config rsaauthentication yes 啟用 rsa 認證 pubkeyauthentication yes 啟...
詳解Docker建立支援ssh服務的容器和映象
1.這裡使用的centos作為容器,所以首先 centos的images sudo docker pull centos 2.後執行乙個centos的容器,這裡使用centos6作為我測試的容器 sudo docker run name centos ssh i t centos centos6 b...