一、基于commit命令创建
- 准备工作
首先,获取centos镜像,并创建一个容器:
[root@docker sshd_centos]# docker pull centos
[root@docker sshd_centos]# docker run -it centos:latest bash
- 安装和配置SSH服务
[root@7b44d4e2dc60 ~]# yum install passwd openssh-server -y
- 修改root密码
[root@7b44d4e2dc60 ~]# passwd
- 生成秘钥
[root@7b44d4e2dc60 ~]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
[root@7b44d4e2dc60 ~]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key
[root@7b44d4e2dc60 ~]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key
- 修改配置文件
[root@7b44d4e2dc60 ~]# vi /etc/ssh/sshd_config
#禁用 PAM
UsePAM no
- 编写服务启动脚本
[root@7b44d4e2dc60 ~]# vi /run.sh
[root@7b44d4e2dc60 ~]# chmod +x /run.sh
- 其中 /run.sh的内容为:
!/bin/bash
/usr/sbin/sshd -D
- 退出容器,保存镜像
[root@9df7d2107aad /]# exit
[root@docker ~]# docker commit 9df7d2107aad sshd:centos
- 查看镜像
[root@docker ~]# docker images sshd
- 使用镜像,运行容器
[root@docker ~]# docker run -p 10086:22 -d sshd:centos /run.sh
- ssh链接docker容器
[root@docker ~]# ssh root@192.168.0.3 -p 10086
二、使用Dockerfile创建
- 创建工作目录及相关文件
[root@docker ~]# mkdir sshd_centos
[root@docker ~]# touch sshd_centos/Dockerfile run.sh
- 编写run.sh脚本,创建authorized_keys文件
[root@docker ~]# vim run.sh
#! /bin/bash
/usr/sbin/sshd -D
- 在宿主主机上生成SSH密钥对,并创建authorized_keys文件:
[root@docker ~]# ssh-keygen -t rsa
[root@docker ~]# cat /root/.ssh/id_rsa.pub > authorized_keys
编写Dockerfile
#设置继承镜像FROM centos:latest#提供一些作者的信息MAINTAINER docker_user (user@docker.com)#安装 ssh 服务RUN yum install openssh-server -y#修改root用户密码RUN /bin/echo "123.com" | passwd --stdin root#修改配置信息RUN /bin/sed -i 's/.*session.*required.*pam_loginuid.so.*/session optional pam_loginuid.so/g' /etc/pam.d/sshd \&& /bin/sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config \&& /bin/sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config#生成密钥RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key \&& ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key \&& ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key#开放端口EXPOSE 22#设置自启动命令CMD ["/usr/sbin/sshd","-D"]
创建镜像
在sshd_ubuntu目录下,使用docker build命令来创建镜像。这里用户需要注意在最后还有一个“.”,表示使用当前目录中的Dockerfile:
[root@docker sshd_centos]# docker build -t sshd:dockerfile .
- 查看生成的docker镜像
[root@docker sshd_centos]# docker images sshd:dockerfile
- 测试镜像,运行容器
[root@docker sshd_centos]# docker run -it -p 10010:22 sshd:dockerfile
