鏡像添加SSH服務(wù)

《Docker技術(shù)入門與實(shí)踐》筆記

為了解決遠(yuǎn)程管理容器的問題,需要SSH的支持。為鏡像添加SSH功能,一般有兩種方式:

  • 基于docker commit命令創(chuàng)建鏡像
  • 基于Dockerfile創(chuàng)建鏡像

1 基于docker commit命令創(chuàng)建鏡像

docker commit命令支持用戶提交對指定容器的修改,并生成新的鏡像。格式:

$ docker commit CONTAINER [REPOSITORY[:TAG]]

因此,我們只需要使用需要添加SSH功能的鏡像創(chuàng)建一個容器,在容器中添加SSH服務(wù),并使用docker commit命令提交并生成新的支持SSH功能的鏡像。

以在Ubuntu:14.04鏡像中增加SSH功能為例,主要步驟為:

// 創(chuàng)建一個容器
$ docker run -it ubuntu:14.04 /bin/bash

// 更新apt緩存
# apt-get update

// 為容器安裝和配置SSH功能
# apt-get install openssh-server -y

// 啟動SSH之前,必須確保/var/run/sshd目錄存在,手動創(chuàng)建
# mkdir -p /var/run/sshd

// 啟動SSH服務(wù)
# /usr/sbin/sshd -D &

// 查看容器的22端口,已經(jīng)處于LISTEN狀態(tài)
# netstat -tunlp

// 注釋/etc/pam.d/sshd文件中的session 
// required pam_loginuid.so行,取消pam登陸限制
# sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd

// 增加本地主機(jī)的公鑰信息
# mkdir root/.ssh
# vi /root/.ssh/authorized_keys

// 創(chuàng)建自動啟動SSH功能的可執(zhí)行文件run.sh
# vi /run.sh
        #!/bin/bash
        /usr/sbin/sshd -D
// 添加可執(zhí)行權(quán)限
# chmod +x run.sh

// 容器修改完成,退出容器
# exit

// 提交并生成一個新的鏡像sshd:ubuntu
$ docker commit ffaed(容器ID) sshd:ubuntu

// 使用鏡像sshd:ubuntu啟動容器,并將本地主機(jī)的10022端口
// 映射到容器的SSH服務(wù)監(jiān)聽端口22,同時使該容器啟動ssh服務(wù):
$ docker run -p 10022:22 -d sshd:ubuntu /run.sh

// 查看本地主機(jī)的ip地址(192.168.118.1)
$ ipconfig

// 從本地主機(jī),通過SSH訪問10022端口登陸到容器中
$ ssh root@192.168.118.1 -p 10022

2 基于Dockerfile創(chuàng)建鏡像

使用Dockerfile也可以在一個鏡像的基礎(chǔ)上創(chuàng)建一個包含SSH功能的鏡像。

# 創(chuàng)建sshd_ubuntu工作目錄
$ mkdir sshd_ubuntu
$ cd sshd_ubuntu

# windows下cmd創(chuàng)建Dockerfile和run.sh文件
$ type nul > Dockerfile
$ type nul > run.sh

# 將.ssh目錄下的id_rsa.pub的內(nèi)容復(fù)制到sshd_ubuntu目錄下的authorized_keys文件中
$ type .ssh\id_rsa.pub > sshd_ubuntu\authorized_keys

# 在sshd_ubuntu目錄下使用Dockerfile創(chuàng)建新鏡像ssh:dockerfile。
$ cd sshd_ubuntu
$ docker build -t ssh:dockerfile .
Successfully built XXX

// 使用鏡像sshd:ubuntu啟動容器,并將本地主機(jī)的10122端口
// 映射到容器的SSH服務(wù)監(jiān)聽端口22,同時使該容器啟動ssh服務(wù):
$ docker run -p 10122:22 -d sshd:ubuntu /run.sh

// 查看本地主機(jī)的ip地址(192.168.118.1)
$ ipconfig

// 從本地主機(jī),通過SSH訪問10122端口登陸到容器中
$ ssh root@192.168.118.1 -p 10122
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容