docker 支持ssh服务镜像

1.commit 命令创建

docker 提供了 docker commit 命令,支持用户提交自己对容器的修改并生成新的镜像。命令格式为

docker commit CONTAINER [REPOSITORY[:TAG:]].

1.1 准备

docker pull ubuntu

docker run -it ubuntu bash

1.2 配置软件源

更新软件源

apt-get update

更换163源

https://blog.csdn.net/wanchaopeng/article/details/105089291

1.2安装sshd

root@0fbf0d4a681a:/# sshd
bash: sshd: command not found   #没有sshd

root@0fbf0d4a681a:/# apt-get install openssh-server

1.3.安装和配置ssh服务

root@766259c6e132:/# mkdir -p /var/run/sshd
root@766259c6e132:/# /usr/sbin/sshd -D &  
[1] 20

要正常启动ssh服务,需要目录/var/run/sshd 存在,手动创建

查看

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      20/sshd         
tcp6       0      0 :::22                   :::*                    LISTEN      20/sshd 

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

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文件中

cd 
mkdir .ssh
vim .ssh/authorized_keys

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

root@766259c6e132:/# mkdir /server/scripts -p

root@766259c6e132:/server/scripts# vi run.sh
#!/bin/bash
/usr/sbin/sshd -D

#增加执行权限
chmod +x run.sh

exit #退出容器

1.4.保存镜像

将退出的容器用docker commit 命令保存为一个新的 sshd:ubuntu 镜像:

[root@ybsrv1 ~]# docker commit 766 sshd:latest
0d7d9c5b408ecdc973f2157463e1432c1949a19981b7cf29915524719868c895

使用docker images 查看本地生成的新镜像sshd:latest ,

[root@ybsrv1 ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
sshd                      ubuntu              95747dd979c3        2 weeks ago          244.1 MB

1.5.使用镜像

启动容器,并添加端口映射 10022 ---> 22 其中10022是宿主主机的端口,22是容器服务器的ssh服务监听端口

[root@ybsrv1 ~]# docker run -p 10022:22 -d sshd:latest /server/scripts/run.sh
8b015da5242480723671dc00aace4ac47141b3855778bb29443f8ea5e99039cc

启动成功后,可以在宿主主机上看到服务器运行的详细信息

[root@ybsrv1 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                   NAMES
0423f33bc51b        sshd:latest         "/server/scripts/run   2 seconds ago       Up 1 seconds        0.0.0.0:10022->22/tcp   elated_darwin       

在宿主机(192.168.2.9)或其他主机上,可以通过ssh访问10022 端口来登陆容器

2. 使用Dockerfile创建

2.1.创建工作目录

首先创建一个sshd_ubuntu工作目录:

mkdir sshd_ubuntu

cd sshd_ubuntu/

touch Dockerfile run.sh

[root@ybsrv1 /data/docker/sshd_ubuntu]# ll
total 0
-rw-r--r--. 1 root root 0 Apr 29 16:51 Dockerfile
-rw-r--r--. 1 root root 0 Apr 29 16:51 run.sh

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

脚本文件run.sh 的内容与上相同

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

在宿主主机上生成ssh秘钥对,并创建authorized_keys文件

# ssh-keygen -t rsa 

cat ~/.ssh/id_rsa.pub > authorized.keys

2.3. 编写Dockerfile 

#设置继承镜像
FROM ubuntu:14.04

#提供一些作者信息
MAINTAINER from www.csdn.com/wanchaopeng by wanchaopeng (chaopeng16@163.com)

#下面运行的命令,此处更改ubuntu为过年163源

RUN echo "deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse" >>/etc/apt/sources.list
RUN echo "deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse" >>/etc/apt/sources.list
 
RUN echo "deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse" >>/etc/apt/sources.list
RUN echo "deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse" >>/etc/apt/sources.list
 
RUN echo "deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse" >>/etc/apt/sources.list
RUN echo "deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse" >>/etc/apt/sources.list
 
RUN echo "deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse" >>/etc/apt/sources.list
RUN echo "deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse " >>/etc/apt/sources.list
RUN echo "deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse" >>/etc/apt/sources.list
RUN echo "deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse" >>/etc/apt/sources.list


RUN apt-get update
#安装ssh服务
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd
RUN mkdir -p /root/.ssh

#取消
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"]

2.4创建镜像

在sshd_ubuntu 目录下,使用docker build 命令来创建镜像。最后有一个 “.”  表示使用当前目录中的Dockerfile.

cd sshd_ubuntu

docker build -t sshd:dockerfile .

命令执行完毕,看到"Successfully build xxx" 表示创建成功 可以看到镜像ID 

在本地查看sshd:dockerfile 镜像已存在

2.5测试镜像,运行容器

使用刚才创建的sshd:dockerfile镜像来运行一个容器。直接启动镜像,映射容器的22端口到本地的10122端口

在宿主机新打开一个终端,链接到新建的容器

ssh 192.168.2.9 -p 10122

 

 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值