創(chuàng)建支持SSH服務(wù)的Docker鏡像的方法
摘要:通常Linux系統(tǒng)管理員通過SSH服務(wù)來管理OS,但Docker的很多鏡像是不帶SSH服務(wù)的,可以通過attach(遇到假死的現(xiàn)象)或者exec(目前測試ok)的方法進(jìn)入容器來管理,但是這些命令都無法解決遠(yuǎn)程管理容器的問題,因此,當(dāng)需要遠(yuǎn)程登陸到容器內(nèi)進(jìn)行一些操作的時候,就需要SSH的支持了。本文記錄如何使用docker commit創(chuàng)建一個帶有SSH服務(wù)的ubuntu鏡像。
(1) 首先以交互的方式運行我們本地的ubuntu容器
docker run -it ubuntu:14.04 /bin/bash
(2) 嘗試使用sshd命令,會發(fā)現(xiàn)容器中沒有安裝該服務(wù)。
sshd bash: sshd: command not found
(3) 使用apt包管理器安裝openssh-server
apt-get update apt-get install openssh-server
(4) 安裝和配置SSH服務(wù)
要正常啟動SSH服務(wù),需要目錄/var/run/sshd存在,手動創(chuàng)建它,并啟動服務(wù):
mkdir -p /var/run/sshd /usr/sbin/sshd -D &
此時查看容器的22端口(SSH服務(wù)器默認(rèn)監(jiān)聽的端口),已經(jīng)處于監(jiān)聽狀態(tài):

(5) 修改SSH服務(wù)的安全登陸配置
在遠(yuǎn)端客戶端機器(即,非容器機器)執(zhí)行命令 ssh-keygen -t rsa 生成rsa的公私密鑰對,然后把公鑰的信息拷貝到運行ubuntu容器機器的授權(quán)文件中:
mkdir /root/.ssh vi /root/.ssh/authorized_keys # 粘貼客戶端的公鑰信息
(6) 創(chuàng)建自啟動SSH服務(wù)的可執(zhí)行文件run.sh
vi /run.sh chmod +x /run.sh
腳本內(nèi)容如下:
#!/bin/bash /usr/sbin/sshd -D
(7) 最后退出容器,并將當(dāng)前修改后的容器保存為一個新的鏡像
在宿主主機執(zhí)行命令 docker ps -a 查看容器的運行狀態(tài),可以得到剛才退出容器的container id,記住id前三位。
然后執(zhí)行提交命令,保存新的鏡像:
docker commit $(container id前三位) ubuntu_sshd_gerry:14.04
此命令提交后,會生成一個新的鏡像id*(image id)和新的鏡像 ubuntu_sshd_gerry:14.04(支持ssh服務(wù)的ubuntu鏡像)
最后,可以使用 docker images 查看本地的鏡像是否已經(jīng)包含我們新創(chuàng)建的鏡像 ubuntu_sshd_gerry:14.04。

(8) 使用新鏡像和配置端口映射
啟動容器,并添加端口映射 10022(宿主主機端口)---> 22(容器內(nèi)部SSH服務(wù)監(jiān)聽端口):
docker run -p 10022:22 -d ubuntu_sshd_gerry:14.04 /run.sh
啟動后,可以在宿主主機上看到容器運行的詳細(xì)信息:

(9) 在宿主主機,或者其他遠(yuǎn)程主機,使用SSH訪問10022端口來登陸容器,測試OK

補充說明:
對一個鏡像打一個新的tag的方法(只是tag不一樣,實際是同一個image,因為image id是一樣的):
docker tag $(image id) ubuntu_sshd_gerry:14.04
然后將老的tag刪除掉:
docker rm $(container id)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Docker 容器文件系統(tǒng)詳細(xì)介紹(圖文)
這篇文章主要介紹了Docker 容器文件系統(tǒng)詳細(xì)介紹(圖文)的相關(guān)資料,這里對Docker 容器文件系統(tǒng)進(jìn)行了具體的分析詳解,需要的朋友可以參考下2016-12-12
Docker使用Git實現(xiàn)Jenkins發(fā)布、測試項目的詳細(xì)流程
這篇文章主要介紹了Docker使用Git實現(xiàn)Jenkins發(fā)布、測試項目的詳細(xì)流程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
Mac下部署springBoot項目到Docker中(demo)
本文通過一個簡單的demo給大家分享Mac下部署springBoot項目到Docker的方法,感興趣的朋友一起看看吧2018-01-01
docker windows10 共享目錄掛載失敗的解決方案
這篇文章主要介紹了docker windows10 共享目錄掛載失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Docker部署Tomcat及Web應(yīng)用的實現(xiàn)
這篇文章主要介紹了Docker部署Tomcat及Web應(yīng)用的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Linux/Docker 中使用 System.Drawing.Common 踩坑記錄分享
這篇文章主要介紹了Linux/Docker 中使用 System.Drawing.Common 踩坑記錄,本文通過兩種方案給大家詳細(xì)介紹,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07

