这里我们用Ubuntu18.04作为基础镜像。
基于Commit命令创建:
1、准备工作
首先,获取Ubuntu:18.04镜像并创建一个容器:
docker pull ubuntu:18.04
docker run -it ubuntu:18.04 bash
root@09c5e8c04b11:~#
2、配置软件源
root@09c5e8c04b11:~# apt-get update
3、安装和配置SSH服务
root@09c5e8c04b11:~# apt-get install openssh-server
如果需要正常启动 SSH 服务, 则目录/var/run/sshd 必须存在 。 下面手动创建它,并启动SSH 服务:
root@09c5e8c04b11:~# mkdir -p /var/run/sshd
root@09c5e8c04b11:~# /usr/sbin/sshd -D &
安装net-tools查看容器22端口(SSH服务默认监听端口),可见端口已经处于监听状态。
root@09c5e8c04b11:~# apt-get install net-tools
root@09c5e8c04b11:~# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1/sshd
tcp6 0 0 :::22 :::* LISTEN 1/sshd
修改SSH服务的安全配置,取消pam登录限制:
root@09c5e8c04b11:~# sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
在root目录下创建.ssh目录,并使用ssh-keygen命令生成秘钥。
给容器root设置密码
root@09c5e8c04b11:~#passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
修改配置让root能登录
root@09c5e8c04b11:~#vim /etc/ssh/sshd_config
注释
# PermitRootLogin prohibit-password.
添加
PermitRootLogin yes
保存,退出,重启SSH服务
root@09c5e8c04b11:~#/etc/init.d/ssh restart
到目前可以通过密码ssh到容器
root@09c5e8c04b11:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.5 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:05 txqueuelen 0 (Ethernet)
RX packets 3184 bytes 349005 (349.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2908 bytes 341429 (341.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@09c5e8c04b11:~# exit
[root@5gd51 ~]# ssh 172.17.0.5
root@172.17.0.5's password:输入密码可以进入
root@09c5e8c04b11:~# exit
退出,复制需要登录的公钥信息到 authorized_keys文件中
[root@5gd51 ~]#ssh-copy-id -i /root/.ssh/id_rsa.pub 172.17.0.5
这种方式是为了保证文件权限准确
[root@5gd51 ~]#ssh 172.17.0.5
root@09c5e8c04b11:~#
OK,到此SSH服务成功配置。
然后,在容器中新建脚本/run.sh
root@09c5e8c04b11:~# apt-get install vim
root@09c5e8c04b11:~# vim /run.sh
run.sh脚本如下:
#!/bin/bash
/usr/sbin/sshd -D
root@09c5e8c04b11:~#chmod +x /run.sh
最后,退出容器
root@09c5e8c04b11:~# exit
4、保存镜像
[root@5gd51 ~]#docker commit 09c5e8c04b11 sshd:ubuntu
sha256:5998511380c52caa60a54fa75a28dc258f387b72aea41ffaa9c8c2ad209c8399
[root@5gd51 ~]#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sshd ubuntu 5998511380c5 20 hours ago 245MB
5、使用镜像
[root@5gd51 ~]#docker run -p 10022:22 -d sshd:ubuntu /run.sh
3bfc78853f924097ab494c11683cfc444402df1c370df02d1d791bb3dca736a8
[root@5gd51 ~]# ssh 101.33.22.44(公网IP) -p 10022
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 3.10.0-693.el7.x86_64 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
Last login: Fri Jul 24 05:59:55 2020 from 172.17.0.1
root@3bfc78853f92:~#
成功用SSH连接
参考:《Docker技术入门与实战第三版》
博客:https://blog.csdn.net/qq_27068845/article/details/77015432