说明:为镜像添加SSH服务其实就是一个构建新镜像的过程,主要哟两种方式,一种是基于commit命令,用来保存当前容器状态的镜像,另一种是基于dockerfile,通过配置文件,由底层镜像搭建。这里主要通过为镜像添加SSH服务的过程来熟悉镜像搭建过程。
如果没有ssh服务,需要从宿主机attach或者exec方式进入容器,但这没有办法解决从远端管理容器的方法。SSH可以通过远端主机连接docker容器,而不用从宿主机登录到容器。SSH虽然方便,但有许多人认为背离了docker的初衷,docker本就为单个服务而生,而且没有从远端主机管理的必要。
虽然有点争议,但好在SSH只占用 少量的资源,而且安全性有保证,NOW,让我们搁置争议,来康康如何 添加SSH服务吧!
1.获取并运行一个ubuntu:18.04镜像
docker pull ubuntu:18.04
docker run -it ubuntu:18.04 /bin/bash
或者直接运行run这一条命令也行,如果没有镜像则先拉取镜像,然后运行容器
-t 表示在新容器内指定一个伪终端或终端 -i 表示允许我们对容器内的 (STDIN) 进行交互
-d 其它地方会出现这个表示在后台运行
2.刚运行的容器一般无法使用很多命令,需要安装一些服务,但很多命令用不了,需要更新一下镜像源才能使用。一般国外的源比较慢,要改成国内的源。
为ubuntu更换阿里源,并更新
cat > /etc/apt/sources.list <<EOF
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
EOF
更新
apt-get update
3.安装配置SSH服务
apt-get install -y openssh-server
创建/var/run/sshd目录并启动SSH服务
mkdir -p /var/run/sshd
/usr/run/sshd -D &
可以通过netstat -ntlp查看ssh是否启动监听,如果没有这个命令需要安装一下
apt-get install -y net-tools
取消pam登录限制,注释掉有pam_loginuid.so这一行
vi /etc/pam.d/sshd
4.创建自启动SSH服务的可执行文件/run.sh,并添加可执行权限
vim /run.sh
#!/bin/bash
#内容为
/usr/sbin/sshd -D
最后退出容器
exit
5.将退出的容器保存为新的镜像
docker ps -a
#命名为sshd并添加ubuntu标签
docker commit ID sshd:ubuntu
查看本地新生成的镜像sshd:ubuntu
docker images sshd:ubuntu
6.启动容器,并添加端口映射
将宿主机的10022端口映射给容器的22端口
docker run -p 10022:22 -d sshd:ubuntu /run.sh
查看端口映射
docker container port ID
a6是容器ID的前几位,不用写全也可以
解释:
-p(小写):指定映射端口
-d: 后台运行
/run.sh 运行脚本
查看容器运行情况
docker ps
7.宿主机root用户生成ssh密钥对,通过访问宿主机端口映射来访问容器
ssh-keygen -t rsa
然后将/root/.ssh/authorized_keys复制到需要登录容器的主机内
在宿主机或其它能访问宿主机的机器上访问容器
ssh 192.168.92.134 -p 10022
好了,现在可以从远端主机访问容器了
争议!啥争议?
真香。。。
后面会再介绍通过dockerfile方式为镜像添加SSH服务。
好了,没什么事情就退朝吧。