1、基于commit命令创建

2、基于Dockerfile创建


1、commit命令创建:

            commit命令,支持用户提交自己对容器的修改,从而生成一个新的镜像。


[root@zxq ~]# docker run -it centos /bin/bash  //    首先创建一个容器


[root@f3964791652a /]# yum install -y openssh-server net-tools

在容器上安装ssh服务,后面的一个包支持常用的网络命令,例如:netstat


[root@f3964791652a /]# echo "123123" | passwd --stdin root  // 设置root密码


生成三个rsa秘钥文件,到/etc/ssh/目录下:

[root@f3964791652a /]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

[root@f3964791652a /]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key
[root@f3964791652a /]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key


如果不生成这三个加密直接运行ssh会报错,提示这三个文件不存在:

Docker实战:基于centos7镜像创建ssh容器_sshDocker实战:基于centos7镜像创建ssh容器_容器_02



/usr/sbin/sshd -D    //后台运行ssh服务

Docker实战:基于centos7镜像创建ssh容器_ssh_03  


编写ssh后台运行脚本:

Docker实战:基于centos7镜像创建ssh容器_ssh_04


[root@f3964791652a /]# exit    //退出



使用 commit 保存上一个带有ssh功能的容器,并重命名

[root@zxq ~]# docker commit f39647 sshd:centos
sha256:edc12b3b70bdaeffd440b4a48c126c275da9576eaeead435ccab010c7795fb37
[root@zxq ~]# docker images

Docker实战:基于centos7镜像创建ssh容器_docker_05


使用端口映射在后台运行这个带有ssh功能的新容器:

[root@zxq ~]# docker run -d -p 10022:22 sshd:centos /run.sh  或者 docker run -d -p 10022:22 sshd:centos /usr/sbin/sshd -D

[root@zxq ~]# ssh root@192.168.1.17 -p 10022
Docker实战:基于centos7镜像创建ssh容器_容器_06

Docker实战:基于centos7镜像创建ssh容器_docker_07

docker容器一般只运行一个服务,现阶段如果要远程维护docker容器,ssh开销小,是个不错的选择。




Dockerfile创建:


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


[root@zxq sshd_centos]# vim run.sh
[root@zxq sshd_centos]# cat run.sh
#! /bin/bash
/usr/sbin/sshd -D

[root@zxq sshd_centos]# chmod +x run.sh


[root@zxq sshd_centos]# vim Dockerfile
[root@zxq sshd_centos]# cat Dockerfile
FROM centos:latest
MAINTAINER ljys@910
RUN yum install -y openssh-server
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key

RUN echo "123123" | passwd --stdin root
ADD run.sh /run.sh
EXPOSE 22
CMD ["/run.sh"]


[root@zxq sshd_centos]# docker build -t sshd:dockerfile . 

Docker实战:基于centos7镜像创建ssh容器_容器_08


使用ssh连接 sshd:dockerfile 容器:

    [root@zxq sshd_centos]# ssh root@192.168.1.17 -p 10022

Docker实战:基于centos7镜像创建ssh容器_docker_09


如果连接报错,使用一下解决方法:

Docker实战:基于centos7镜像创建ssh容器_docker_10


[root@zxq sshd_centos]# vim /root/.ssh/known_hosts
根据提示在一下文件中将指定的rsa报错验证删除,然后重新ssh连接!