docker-为容器添加ssh服务

之前的attach、exec命令无法解决远程连接管理容器的需求,所以考虑为其添加ssh服务。

添加ssh服务有两种方法:基于docker commit命令和Dockerfile创建。

方法1:docker commit

commit支持用户提交自己对定制容器的修改,并生成新的镜像。格式为:docker commit CONTATINER [REPOSITORY[:TAG]]

前期工作

创建容器
docker run -it ubuntu bash
更新apt缓存和安装openssh-server
apt-get update -y ;apt-get install -y openssh-server
启动ssh服务
如果要正常启动ssh服务,/var/run/sshd必须存在,手动创建并启动ssh服务:

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

查看端口

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

修改ssh服务的安全登录配置,取消pam登录限制
sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd

把宿主主机的ssh公钥传给容器
使用复制法,略

创建自启动ssh服务的脚本,添加可执行权限

vi /run.sh
    #!/bin/bash
    /usr/sbin/sshd -D
chmod +x /run.sh

最后,退出容器

保存镜像

使用docker commit命令生成一个新的镜像:
docker commit [id] [name:tag]
使用docker images查看拥有的镜像,发现已经创建好了。

使用镜像

使用镜像的时候可以考虑端口映射

docker run -p 65533:22 -d ubuntu-ssh /run.sh

然后在网络可达的任意主机使用以下命令进行容器的ssh登录:

ssh [docker-server] -p 65533

方法2 :使用Dockerfile创建

Dockerfile类似于自动化运行的脚本,其内容就是格式化的docker commit,适用于快速批量部署。

创建工作目录

创建一个文件夹,包含Dockerfile和之前所用的run.sh文件

mkdir sshd_ubuntu
cd sshd_ubuntu/
touch Dockerfile run.sh

run.sh内容和上面的一样。

把宿主机的id_rsa.pub写入authorized_keys文件

ssh-keygen
...
cat /root/.ssh/id_rsa.pub > authorized_keys

编写Dockerfiles

把commit涉及到的命令格式化写入

#继承镜像
FROM ubuntu

#提供作者信息
MAINTAINER jason 

#更新apt
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"]

创建镜像

在sshd_ubuntu目录下,使用docker build命令创建镜像:

cd sshd_ubuntu
docker build -t ubuntu:dockerfile .

在创建过程中,docker会自动删除一些中间层,看到

Successfully built 6c2729dabfd0
Successfully tagged ubuntu:dockerfile

时证明镜像创建完毕,可以用docker images查看

生成容器

# docker run -d -p 65500:22 ubuntu:dockerfile
#docker ps 
#ssh [docker server] -p 65500

如此,就进入了容器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值