Docker中创建支持SSH服务的镜像

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/carson0408/article/details/88879535

        一般的,docker的很多镜像是不带SSH服务的,所以如果需要远程管理的话,就需要将镜像创建成一个带有SSH服务的镜像。常见的创建镜像的方法有两种:通过commit命令创建和利用Dockerfile文件创建。以下通过创建一个带有SSH服务的ubuntu:18.04来讲述这两种方法。

1.基于commit命令创建(windows系统下实现)

1.使用ubuntu,即进入ubuntu使用状态:

docker run -it ubuntu:18.04 /bin/bash

2.由于ubuntu镜像是一个简化的镜像,好多命令需要重新安装,首先执行:

apt-get update

3.安装后面编辑文件需要使用的vim编辑器(ubuntu下的vi并没有那么好用),还有后面查询端口需要用的net-tools

apt-get install vim
apt-get install net-tools

4.接着进入正题,安装SSH服务:

apt-get install openssh-server

5.创建/var/run/sshd目录,手动创建并启动服务。

mkdir -p /var/run/sshd
/usr/sbin/sshd -D &

返回结果:

通过以下指令查看端口22信息:

netstat -tunlp

6.修改SSH服务的安全登录配置,取消pam登录限制

sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd

7.在root用户目录下 创建.ssh目录,并复制需要登录的公钥信息。

#创建.ssh目录
mkdir root/.ssh
#生成公钥信息
cd root/.ssh
ssh-keygen -t rsa

#回到根目录,并创建authorized_keys文件,并将公钥信息复制过来,将id_rsa.pub内容复制过来
cd ~
vim /root/.ssh/authorized_keys

8.创建自动启动SSH服务的可执行文件run.sh,并添加可执行权限

创建文件run.sh:

vim /run.sh

 run.sh内容:

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

添加可执行权限:

chmod +x /run.sh

9.exit退出,并且输入docker ps -l  ,记录容器ID前三位23e

10.commit命令创建镜像:

#命令:docker commit 容器id [仓库名:标签名]
docker commit 23e sshd:ubuntu

11.使用镜像

启动容器,并添加端口的映射10022:22前者是宿主机端口,后者是容器的SSH服务的监听端口

docker run -p 10022:22 -d sshd:ubuntu /run.sh

2.使用Dockerfile创建镜像(Ubuntu系统下实现)

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

创建工作目录sshd_work

mkdir sshd_work

创建文件Dockerfile和run.sh

cd sshd_work
touch Dockerfile run.sh

2.编写run.sh脚本和authorized_keys文件

run.sh:

生成密钥并将公钥id_rsa.pub的内容复制到authorized_keys中

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >authorized_keys

检查结果:

vim authorized_keys

内容如下,说明密钥复制成功。

3.编写Dockerfile文件

vim Dockerfile

Dockerfile内容如下:

#基础镜像
FROM ubuntu:18.04
#维护者信息
MAINTAINER carson [email protected]
#更新为国内源
RUN apt-get update
#安装ssh服务
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd
RUN mkdir -p /root/.ssh
#取消pam限制
RUN sed -ri 's/session   required   pam_loginuid.so/#session   required pam_loginuid.so/g' /etc/pam.d/sshd
#复制配置文件到相应位置,并赋予脚本执行权限
ADD authorized_keys /root/.ssh/authorized_keys
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#开放端口
EXPOSE 22
#设置自启动命令
CMD ["/run.sh"]

4.创建镜像

sudo docker build -t sshd:dockerfile .

通过以上命令创建镜像,查看镜像,可以看出镜像创建成功

5.测试

首先启动容器:

sudo docker run -d -p 10422:22 sshd:dockerfile

宿主机另开一个终端访问:ssh -p 10422:22 root@宿主机ip(此处是172.17.0.1)

猜你喜欢

转载自blog.csdn.net/carson0408/article/details/88879535