用docker commit 的方式創建ssh直連docker容器鏡像
- 拉取鏡像,這里采用centos:7作為基礎鏡像
docker pull centos:7
- 運行鏡像,生成容器
docker run -d --name ssh_box --privileged=true centos:7 /usr/sbin/init
07228ec257564c4874ca24216d651bda65573d49e4149064a079cacca27de4e1 # 生成的容器ID
--name 給新生成的容器命名
--privileged=true 給容器訪問Linux內核特權,后面要訪問systemctl
返回一串容器ID表示容器生成成功
- 進入剛剛生成的容器
docker exec -it 07228ec25756 /bin/bash
- 進入容器后,使用passwd密碼來修改密碼(如提示沒有這個命令行使用yum install passwd安裝)
passwd
5.安裝vim和Openssh(docker 容器中執行)
yum install vim openssh-server openssh-clients -y
6.修改SSH配置文件
vim /etc/ssh/sshd_config
修改如下:
PubkeyAuthentication yes #啟用公鑰私鑰配對認證方式
AuthorizedKeysFile .ssh/authorized_keys #公鑰文件路徑(和上面生成的文件同)
PermitRootLogin yes #root能使用ssh登錄
ClientAliveInterval 60 #參數數值是秒 , 是指超時時間
ClientAliveCountMax 3 #設置允許超時的次數
- 重啟ssh服務,並設置開機啟動
systemctl restart sshd.service
systemctl enable sshd.service
Failed to get D-Bus connection: Operation not permitted
這里如果報這個錯誤說明容器權限不足,第2步執行有誤
8.退出容器並保存更改
exit
- 用剛才生成的容器創建鏡像
docker commit -m 'openssh' -a 'Docker for ssh' ffe81683c404 ssh_box
-m:來指定提交的說明信息,跟我們使用的版本控制工具一樣
-a 可以指定更新的用戶信息
ffe81683c404: 創建鏡像的容器的ID,就是上面的容器id,也就是我們剛才進入的容器id
ssh_box: 目標鏡像的倉庫名
docker images
可以查看到新生成的鏡像
10.刪除構建容器(可選)
我們用centos基礎容器修改配置后已經生成了所需要的鏡像,之前的構建容器就可以刪除了
docker stop 07228ec25756
docker rm 07228ec25756
- 用新生成的鏡像啟動新的容器並打通22端口
docker run -d -p 2222:22 ssh_box /usr/sbin/sshd -D
12.然后可以使用xshell連接新生成的容器
ip: 為宿主主機的ip,而不是docker容器的ip
端口:就是上面的2222
用戶名: root
密碼: 就是上面password部分設置的密碼
在mac上可通過ssh root@127.0.0.1 -p:2222 登錄新生成的容器
至此ssh連接docker容器連接成功
以Dockerfile的方式創建ssh直連docker容器
- 創建Dockerfile文件
#生成的新鏡像以centos7鏡像為基礎
FROM centos:7
MAINTAINER by jesse (jesse152@163.com)
#升級系統
RUN yum -y update
#安裝openssh-server
RUN yum -y install openssh-server
#修改/etc/ssh/sshd_config
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
# 生成sshkey
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
#變更root密碼
RUN echo "root:jesse131978"|chpasswd
#開放窗口的22端口
EXPOSE 22
#運行腳本,啟動sshd服務
CMD ["/usr/sbin/sshd", "-D"]
2.在dockerfile文件同級目錄中運行創建命令
docker build -t centos7_ssh .
命令成功后,就會創建一個名字為centos7_ssh的image,可以使用“docker images”來查看
3. 根據鏡像創建容器
docker run -d -P --name=ssh_box centos7_ssh
- 查看容器ip
docker inspect ssh_box
5.查看端口
docker port ssh_box 22
知道ip和端口后就可以通過ssh建立連接了
遠程Dockerfile
我將Dockerfile文件上傳至github,可通過命令直接用github上的Dockerfile
docker build -t linux git@github.com:Jesse121/mylinux.git