10.1基于commit命令创建
命令格式为 docker commit CONTAINER [REPOSITORY[:TAG]]
1.准备工作
首先使用 ubuntu:16.04镜像来创建一个容器
$ docker run -it ubuntu:16.04 /bin/bash
root@962ddbdf1575:/#
更新apt缓存,并安装 openssh-server:
root@962ddbdf1575:/# apt-get update ; apt-get install openssh-server -y
2.安装和配置SSH服务
选择主流的 openshh-server 作为服务端:
root@962ddbdf1575:/# apt-get install openssh-server -y
如果需要正常启动SSH服务,则目录 /var/run/sshd 必须存在。手动创建它,并启动服务:
root@962ddbdf1575:/# mkdir -p /var/run/sshd
root@962ddbdf1575:/# /usr/sbin/sshd -D & # 启动SSH服务
[1] 3636
此时查看容器的22端口(SSH默认坚挺的端口),可见此端口已经处于监听状态:
root@962ddbdf1575:/# apt-get install net-tools # 有些没有netstat功能,通过此命令安装
root@962ddbdf1575:/# 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:22 0.0.0.0:* LISTEN 3636/sshd
tcp6 0 0 :::22 :::* LISTEN 3636/sshd
修改SSH服务的安全登录配置,取消pam登录限制:
root@962ddbdf1575:/# 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 命令生成)到authorized_keys文件中:
root@962ddbdf1575:/# mkdir root/.ssh
root@962ddbdf1575:~/.ssh# vim authorized_key
创建自动启动SSH服务的可执行文件run.sh,并添加可执行权限:
root@962ddbdf1575:/# vi /run.sh
root@962ddbdf1575:/# chmod +x run.sh
root@962ddbdf1575:/# vim /run.sh # 自行百度vim的使用命令
#!/bin/bash
/usr/sbin/sshd -D
:wq # 保存并退出
root@962ddbdf1575:/# exit #最后,退出容器
exit
3.保存镜像
讲所退出的容器用 docker commit 命令保存为一个新的 ubuntu:sshd 镜像:
$ docker commit 962ddbdf1575 ubuntu:sshd
sha256:3caead90f45bf7712f2306cbead056def6f33817328d803016b23d441e716146
使用 docker images 查看本地生成的新镜像 ubuntu:sshd :
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu sshd 3caead90f45b About a minute ago 251MB
ubuntu 16.04 14f60031763d 2 weeks ago 120MB
busybox latest efe10ee6727f 2 weeks ago 1.13MB
centos latest 36540f359ca3 4 weeks ago 193MB