当需要远程登陆到容器内进行操作时,需要SSH的支持
基于commit命令创建
用于用户提交自己对制定容器的修改,并生成新的镜像
格式:docker commit CONTAINER [REPOSITORY[:TAG]]
准备工作
创建容器1
docker run -it ubuntu:14.04 /bin/bash
更新apt缓存,并安装openssh-server1
apt update && apt install openssh-server -y
配置SSH服务
启动sshd服务1
2mkdir -p /var/run/sshd
/usr/sbin/sshd -D &
修改SSH服务的安全登陆配置,取消pam登陆限制1
sed -ri 's#session required pam_loginuid.so#session required pam_loginuid.so#g' /etc/pam.d/sshd
在root目录下创建.ssh目录,并复制需要登录的公钥信息(一般为本地主机用户目录下的.ssh/id_rsa.pub文件,可由ssh-keygen -t rsa命令生成)到.ssh目录下的authorized_keys中1
2
3mkdir /root/.ssh
cd /root/.ssh
vi /root/.ssh/authorized_keys
创建自启动的SSH服务可执行文件run.sh,并添加可执行权限1
2
3
4cat run.sh
#!/bin/bash
/usr/sbin/sshd -D &
chmod +x run.sh
退出容器1
exit
保存镜像
将退出的容器用docker commit命令保存为一个新的sshd:ubuntu镜像1
docker commit Container_id sshd:ubuntu
使用镜像
启动容器,并添加端口映射,本地主机的10022端口映射到容器的22端口1
docker run -d -p 10022:22 sshd:ubuntu /run.sh
在本地主机(10.0.0.31)或其他主机上通过ssh连接本地(10.0.0.31)的10022端口1
ssh 10.0.0.31 -p 10022
使用Dockerfile创建
使用Dockerfile创建一个支持SSH服务的镜像
创建工作目录
创建一个sshd_ubuntu工作目录1
mkdir -p sshd_ubuntu
在其中,创建Dockerfile和run.sh文件1
cd sshd_ubuntu/ && touch Dockerfile run.sh
编写run.sh脚本和authorized_keys文件
本地主机为Linux系统1
2
3cat run.sh
#!/bin/bash
/usr/sbin/sshd -D &
在本地主机上生成SSH密钥对,并创建authorized_keys文件1
ssh-keygen -t rsa
1 | cat /root/.ssh/id_rsa.pub > ./authorized_keys |
编写Dockerfile
1 | # 基础镜像信息 |
创建镜像
在sshd_ubuntu目录下1
docker build -t sshd:dockerfile .
上面命令最后有一个.,表示使用当前目录中的Dockerfile文件
测试镜像,运行容器
1 | docker run -it -p 10122:22 sshd:dockerfile /bin/bash |
本地主机(10.0.0.31)连接新建的ssh容器1
ssh 10.0.0.31 -p 10122