《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