《轉》建立支援SSH服務的Docker映象

2021-07-27 03:00:42 字數 2087 閱讀 8345

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...