一、基于commit命令创建

  1. 准备工作

首先,获取centos镜像,并创建一个容器:
[root@docker sshd_centos]# docker pull centos
[root@docker sshd_centos]# docker run -it centos:latest bash

  1. 安装和配置SSH服务

[root@7b44d4e2dc60 ~]# yum install passwd openssh-server -y

  1. 修改root密码

[root@7b44d4e2dc60 ~]# passwd

  1. 生成秘钥

[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

  1. 修改配置文件

[root@7b44d4e2dc60 ~]# vi /etc/ssh/sshd_config
#禁用 PAM
UsePAM no

  1. 编写服务启动脚本

[root@7b44d4e2dc60 ~]# vi /run.sh
[root@7b44d4e2dc60 ~]# chmod +x /run.sh

  • 其中 /run.sh的内容为:

!/bin/bash
/usr/sbin/sshd -D

  1. 退出容器,保存镜像

[root@9df7d2107aad /]# exit
[root@docker ~]# docker commit 9df7d2107aad sshd:centos

  1. 查看镜像

[root@docker ~]# docker images sshd

  1. 使用镜像,运行容器

[root@docker ~]# docker run -p 10086:22 -d sshd:centos /run.sh

  1. ssh链接docker容器

[root@docker ~]# ssh root@192.168.0.3 -p 10086

二、使用Dockerfile创建

  1. 创建工作目录及相关文件

[root@docker ~]# mkdir sshd_centos
[root@docker ~]# touch sshd_centos/Dockerfile run.sh

  1. 编写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

  1. 编写Dockerfile

    1. #设置继承镜像
    2. FROM centos:latest
    3. #提供一些作者的信息
    4. MAINTAINER docker_user (user@docker.com)
    5. #安装 ssh 服务
    6. RUN yum install openssh-server -y
    7. #修改root用户密码
    8. RUN /bin/echo "123.com" | passwd --stdin root
    9. #修改配置信息
    10. RUN /bin/sed -i 's/.*session.*required.*pam_loginuid.so.*/session optional pam_loginuid.so/g' /etc/pam.d/sshd \
    11. && /bin/sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config \
    12. && /bin/sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config
    13. #生成密钥
    14. RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key \
    15. && ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key \
    16. && ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key
    17. #开放端口
    18. EXPOSE 22
    19. #设置自启动命令
    20. CMD ["/usr/sbin/sshd","-D"]
  2. 创建镜像

在sshd_ubuntu目录下,使用docker build命令来创建镜像。这里用户需要注意在最后还有一个“.”,表示使用当前目录中的Dockerfile:
[root@docker sshd_centos]# docker build -t sshd:dockerfile .

  1. 查看生成的docker镜像

[root@docker sshd_centos]# docker images sshd:dockerfile

  1. 测试镜像,运行容器

[root@docker sshd_centos]# docker run -it -p 10010:22 sshd:dockerfile