在寫這個之前給大家推薦一個很好用的docker image 下載地方——daocloud(http://get.daocloud.io/)
對於docker容器的操作,我們可以通過
docker exec -it <容器名 或 容器id> /bin/bash
或者
docker attach <容器名 或 容器id>
進入容器內部操作,其實有很多的時候我們可以通過 ssh 連接從而來操作容器,今天就來跟大家分享一下如何用docker commit指令來製作一個ssh image
以下的操作都是用 root 賬號進行操作的,宿主機是 Ubuntu16.04-server版的。
1.我們進入(我個人喜歡在 /home 目錄中進行操作)/home 目錄
cd /home
2.先從daocloud中pull一個基礎鏡像下來:
docker pull docker pull daocloud.io/library/ubuntu:14.04
3.用基礎鏡像創建一個容器:
docker run -it --name ssh-base daocloud.io/library/ubuntu:14.04 /bin/bash
不出意外話,我們應該在容器中了。
4.我們先更新一下這個容器的安裝包:
apt-get update -y
5.我們安裝ssh服務和ssh客戶端(主要用於測試)
apt-get install -y openssh-server openssh-client libmysqlclient (安裝三個軟件)
6.我們給容器的 root 用戶設置一個密碼:
passwd root (按照提示輸入密碼即可)
在這裏一個要注意:容器的 root 用戶 和 宿主機的 root 用戶不是同一個用戶,因爲 在 docker容器中用一個 用戶命名空間 的概念從而讓容器與容器,容器與宿主機之間
進行隔離。
7.對於Ubuntu而言,root用戶是不能通過 ssh 連接的,但是可以修改 ssh 的配置文件
vi /etc/ssh/sshd_config
把文件中的 PermitRootLogin 這一行註釋掉,改爲 PermitRootLogin yes ,保存退出
8.重新啓動 ssh 服務:
先創建一個目錄
mkdir -p /var/run/sshd
/etc/init.d/ssh restart
9.這個時候我們在容器中測試一個可不可以 ssh 登錄了:
ssh localhost
不出意外的話,我們可以成功登錄了, 輸入 exit 我們就可以退出登錄
10.我們創建一個 /runssh.sh 文件:
vi /runssh.sh
在該文件中我們輸入以下內容:
/usr/sbin/sshd -D
然後我們保存退出
給該文件賦予一定的權限: chmod 777 /runssh.sh
11.這個時候,我們就可以退出容器了:
exit
12.我們就用剛纔的容器來創建鏡像了:
docker commit ssh-base ssh:01
注意:ssh-base:是剛纔創建的容器名;ssh:01 是我們要創建的鏡像名
13.我們可以啓動一個 ssh 容器了:
docker run -it -d --name ssh01 -P ssh:01 /runssh.sh
14.我們可以通過ssh連接該容器了:
ssh root@localhost -p <端口號>
15.如果我們要進入改容器內部應該用下面的指令:
docker exec -it ssh01 /bin/bash