对于想了解Docker添加容器SSH服务的读者,本文将提供新的信息,我们将详细介绍docker容器ssh连接,并且为您提供关于167dockerdocker构建nginx容器系列问题dockerreg
对于想了解Docker 添加容器 SSH 服务的读者,本文将提供新的信息,我们将详细介绍docker容器ssh连接,并且为您提供关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、docker centos7容器 安装ssh服务、Docker SSH连接docker容器的示例代码、Docker 为镜像添加 SSH 服务的有价值信息。
本文目录一览:- Docker 添加容器 SSH 服务(docker容器ssh连接)
- 167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo
- docker centos7容器 安装ssh服务
- Docker SSH连接docker容器的示例代码
- Docker 为镜像添加 SSH 服务
Docker 添加容器 SSH 服务(docker容器ssh连接)
很多时候我们需要登陆到容器内部操作,此时我们就需要开启容器的 SSH 支持了,下面的小例子将具体介绍三种分配 IP 地址的方法,分别是 pipworl 分配,commit 分配,Docker 分配等.
基于 commit 命令创建
Docker 提供了 commit 命令,支持用户提交自己对定制容器的修改,并生成新的镜像。这里将介绍如何用 docker commit 命令,添加 SSH 服务的操作流程,首先默认情况下 ssh 服务在镜像里是没有被安装的,我们需要手动配置一下,后期生成镜像启动就方便啦.
1. 首先我们先来使用 Centos 镜像,放入后台并进入容器内部.
[root@localhost ~]# docker pull centos:latest
[root@localhost ~]# docker run -itd --name my_ssh --net=host centos:latest
[root@localhost ~]# docker exec -it my_ssh /bin/bash
[root@c59a63bbb /]# yum install -y passwd openssh openssh-server
2. 如果需要正常启动 SSH 服务,则目录 /var/run/sshd
必须存在,手动创建它,并启动 SSH 服务.
[root@c59a63bbb /]# mkdir -p /var/run/sshd
[root@c59a63bbb /]# /usr/sbin/sshd -D &
上面的启动命令会报错,这个错误解决方案是,执行下面命令,创建这些文件.
[root@c59a63bbb /]# ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''''
[root@c59a63bbb /]# ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''''
[root@c59a63bbb /]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''''
3. 然后,修改 /etc/ssh/sshd_config
配置信息 UsePAM yes
改为 UsePAM no
,UsePrivilegeSeparation sandbox
改为 UsePrivilegeSeparation no
, 可以用 vim 修改,也可以用下面命令.
[root@c59a63bbb /]# sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config
[root@c59a63bbb /]# sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config 不通过pam验证
[root@c59a63bbb /]# sed -ri ''s/session required pam_loginuid.so/#session
required pam_loginuid.so/g'' /etc/pam.d/sshd
4. 修改完后,重新启动 sshd 服务,并修改一个 root 密码.
[root@c59a63bbb /]# /usr/sbin/sshd -D
[root@c59a63bbb /]# echo "root" | passwd --stdin root
[root@c59a63bbb /]# echo "/usr/sbin/sshd -D &" >> /etc/profile
5. 创建一个自启动脚本文件,写入一下内容.
[root@c59a63bbb /]# vi /run.sh
#!/bin/bash
/usr/sbin/sshd -D
[root@c59a63bbb /]# chmod +x run.sh
[root@c59a63bbb /]# exit
6. 保存镜像,将所退出的容器用 commit 命令保存为一个新的 my_ssh:centos
镜像.
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
e1fc02dfd24f centos:latest "/bin/bash" 4 minutes ago Up 4 minutes
[root@localhost ~]# docker commit e1fc my_ssh:centos
sha256:48997373aee923ee9b6af833de4aa9842dd090c7fee1f2569aa187e66b96231c
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myssh centos 48997373aee9 25 seconds ago 280MB
centos latest 1e1148e4cc2c 10 days ago 202MB
hello-world latest 4ab4c602aa5e 3 months ago 1.84kB
7. 启动容器,并添加端口映射 10000-->22. 其中 10000 是宿主主机的端口,22 是容器的 SSH 服务监听端口.
[root@localhost ~]# docker run -itd -p 10000:22 my_ssh:centos
[root@localhost ~]# docker run -p 10000:22 -itd my_ssh:centos /run.sh
b0b073cf4bf933b291f0e0139220d09325e7dead7a1a77cacc243516c09ee931
8. 在宿主主机或其他主机上上,可以通过 SSH 访问 10022 端口来登录容器.
[root@localhost ~]# ssh root@192.168.1.5 -P 10000
使用 Dockerfile 创建
上面的方式比较复杂,接下来我们来看一个简单的,使用 dockerfile 的方式来创建一个 Ubuntu 镜像.
1. 首先,拉取一个基本镜像,并创建一个 sshd_ubuntu
工作目录.
[root@localhost ~]# docker pull ubuntu:latest
[root@localhost ~]# mkdir ssh_ubuntu
[root@localhost ~]# cd ssh_ubuntu/
[root@localhost ssh_ubuntu]# touch Dockerfile
[root@localhost ssh_ubuntu]# touch run.sh
2. 编写 run.sh 以及,在宿主主机上生成 SSH 密钥对,并创建 authorized_keys
文件.
[root@localhost ssh_ubuntu]# vim run.sh
#!/bin/bash
/usr/sbin/sshd -D
[root@localhost ssh_ubuntu]# ssh-keygen -t rsa
[root@localhost ssh_ubuntu]# cat ~/.ssh/id_rsa.pub >authorized_keys
[root@localhost ssh_ubuntu]# cp -a authorized_keys /root/.ssh/
3. 下面是 Dockerfile 的内容,这和 commit 命令创建镜像过程,所进行的操作基本一致.
#设置继承镜像
FROM ubuntu:latest
#提供一些作者的信息
MAINTAINER docker_user (user@docker.com)
#下面开始运行更新命令
#RUN apt-get update
#安装ssh服务
RUN apt-get install -y passwd openssh 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
#设置初始密码
RUN echo "root"|passwd --stdin root
#设置自启动命令
CMD ["/run.sh"]
4. 创建镜像,在 sshd_ubuntu 目录下,使用 build 命令来创建镜像。这里需要注意最后还有一个 ".", 表示使用当前目录中的 Dockerfile
[root@localhost ~]# cd sshd_ubuntu
[root@localhost ssh_ubuntu]# docker build -t sshd:Dockerfile .
5. 测试镜像,运行容器,并通过 ssh 连接一下.
[root@localhost ~]# docker run -d -p 10122:22 sshd:Dockerfile
890c04ff8d769b604386ba4475253ae8c21fc92d60083759afa77573bf4e8af1
[root@localhost ~]# ssh 192.168.1.200 -p 10122
在 Docker 社区中,对于是否需要为 Docker 容器启用 SSH 服务一直有争论,反对方的观点是:Docker 的理念是一个容器只运行一个服务。因此,如果每个容器都运行一个额外的 SSH 服务,就违背了这个理念。另外认为根本没有从远程主机进入容器进行维护的必要.
使用 pipwork 分配
1. 安装 Git 工具,并克隆 pipwork, 放入可执行目录,并给予相应的权限.
[root@localhost ~]# yum install -y git
[root@localhost ~]# git clone https://github.com/jpetazzo/pipework
[root@localhost ~]# cd pipework/
[root@localhost pipework]# cp -a pipework /usr/local/bin/
[root@localhost pipework]# chmod +x /usr/local/bin/pipework
2. 将本机配置成网桥,使之能够互相通信.
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
DEVICE=eno16777728
TYPE=Ethernet
BOOTPROTO=static
BRIDGE=br0
NM_CONTROLLED=yes
ONBOOT=yes
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
DEVICE=br0
BOOTPROTO=static
IPADDR=192.168.1.13
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=114.114.114.114
ONBOOT=yes
[root@localhost ~]# reboot
3. 下载一个 Centos 镜像,并运行且指定 --net="none"
, 后期使用 pipwork 分配 IP 地址.
[root@localhost ~]# docker pull centos:latest
[root@localhost ~]# docker run -d --name my_ssh --restart=always --net="none" centos:latest
cf8354804431a7830a6a46999ac20240ad6402d505d3130789fdc4bbb227e4e3
4. 通过命令分配 IP 地址,与子网掩码.
[root@localhost ~]# pipework br0 镜像名称 192.168.1.100/24
[root@localhost ~]# docker inspect my_ssh |grep "IPAddress"
"SecondaryIPAddresses": null,
"IPAddress": "192.168.1.100/24",
"IPAddress": "192.168.1.100/24",
docker 给容器分配 IP 并可以连接 SSH (新版)
1. 首先创建子网
docker network create --subnet=172.1.0.0/16 mynetwork
docker network ls
2. 为容器分配 ip
docker run -itd --name lyshark --net mynetwork --ip 172.1.0.2 centos:latest /bin/bash
docker exec -it lyshark /bin/bash
3. 安装各种软件
yum -y install net-tools passwd openssh-server openssh-clients
passwd root
4. 执行 ssh 生成
ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''''
ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''''
ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''''
5. 接着修改 sshd_config 文件配置信息
vi /etc/ssh/sshd_config
开启 Port 22 注释
将 PermitRootLogin 的 no 改为 yes
启动 ssh 服务 /usr/sbin/sshd -D &
6. 退出这个镜像,然后打包成新的。
docker commit lyshark mycentos 制作新的镜像
5. 直接创建新的容器即可。
docker rm $(docker ps -a -q)
docker run -itd --name centos1 --net mynetwork --ip 172.1.0.2 mycentos /usr/sbin/init
docker exec -it lyshark /bin/bash
6. 外网链接配置,将外网的 5423 端口映射到内网主机的 172.1.0.2:22 口上,即可外部连接该容器
[root@localhost ~]# firewall-cmd --add-forward-port=port=5423:proto=tcp:toaddr=172.1.0.2:toport=22
success
[root@localhost ~]# firewall-cmd --add-port=5423/tcp
success
167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo
background : 最近为小伙伴们筹划docker系列的技术分享,研究了一会docker相关技术, 在此记录一下构建nginx容器时候的坑
1.nginx服务器根目录问题
docker 官方镜像提供的nginx基于debian/jessie平台,其文件结构和ubuntu中的nginx中并不相同
eg:
run一个niginx容器
<span>//80端口被占用,so...</span> $ sudo docker run <span>-it</span><span>-p</span><span>800</span>:<span>800</span> nginx $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES <span>1801</span>a32aab54 nginx <span>"nginx -g ''daemon off"</span><span>2</span> minutes ago Up <span>2</span> minutes <span>80</span>/tcp, <span>443</span>/tcp, <span>0.0</span><span>.0</span><span>.0</span>:<span>800</span><span>-></span><span>800</span>/tcp berserk_kare
进入容器内部
<span>$ </span>sudo docker exec -it <span>1801</span>a32aab54 /bin/bash root<span>@1801a32aab54</span><span>:/</span><span># </span>
查看nginx目录
<span># cd /etc/nginx/</span> conf<span>.d</span>/ koi-utf mime<span>.types</span> nginx<span>.conf</span> uwsgi_params fastcgi_params koi-win modules/ scgi_params win-utf
可以看到不仅没有熟悉的 /sites-available,也没有 /sites-enabled
继续查看nginx配置
<span># cat /conf.d/default.conf</span><span>server</span> { listen <span>80</span>; server_name localhost; <span>#charset koi8-r;</span><span>#access_log /var/log/nginx/log/host.access.log main;</span> location / { root /usr/share/nginx/html; <span>index</span><span>index</span>.html <span>index</span>.htm; } <span>#error_page 404 /404.html;</span><span># redirect server error pages to the static page /50x.html</span><span>#</span> error_page <span>500</span><span>502</span><span>503</span><span>504</span> /<span>50</span>x.html; location = /<span>50</span>x.html { root /usr/share/nginx/html; } <span>#...省略php-fpm配置,好长..</span> }
根目录配置: root /usr/share/nginx/html;
测试
<span># cd /usr/share/nginx/html</span><span># touch index.html</span><span># echo "test nginx in docker" >index.html</span>
php-fpm配置相关
'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });以上就介绍了167 docker docker构建nginx容器系列问题,包括了docker,nginx方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
docker centos7容器 安装ssh服务
docker安装好后,自己动手做个自己的docker镜像,首先需要从服务器pull下一个基础的镜像,这里用centos7
(最好是root用户下,我虚拟机中的docker普通用户运行docker提示服务没有运行,奇怪)
一、下载官方原始镜像
docker pull centos:7
稍等一会下载完成,使用
docker images
查看本地的镜像列表,如图,centos那个就是刚才下载的
docker run -i -t centos:7 /bin/bash
接着终端就是容器中的centos的了,默认是root用户登录,接下来的操作都在容器中了
二、容器中安装passwd,openssl,openssh-server
yum install passwd openssl openssh-server -y
安装完成后
启动sshd:
# /usr/sbin/sshd -D
这时报以下错误:
[root@ b3426410ff43 /]# /usr/sbin/sshd
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
执行以下命令解决:
[root@b3426410ff43 /]# ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
[root@b3426410ff43 /]# ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
[root@b3426410ff43 /]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''
然后,修改 /etc/ssh/sshd_config 配置信息:
UsePAM yes 改为 UsePAM no
UsePrivilegeSeparation sandBox 改为 UsePrivilegeSeparation no
可以用vi改,也可以用下面命令
[root@b3426410ff43 /]# sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config
[root@b3426410ff43 /]# sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config
修改完后,重新启动sshd
[root@b3426410ff43 /]# /usr/sbin/sshd -D
然后修改root密码
passwd root
或者直接一句修改
echo "123456" | passwd --stdin root
接着需要把修改后的镜像保存了,首先输入exit退出容器,再使用下面命令查看刚运行过的,
docker commit将修改后镜像保存到本地,参数是ID,名字
#docker ps -all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b3426410ff43 centos:7 "/bin/bash" 4 minutes ago Exited (0) 4 seconds ago centos7ssh
#docker commit b5926410fe60 myimage/centos7-ssh
下次可以输入刚保存的名字启动修改过安装了ssh服务的镜像了。
分享一个centos7安装ssh服务后的docker-compose.yml
version: '3.7'
services:
centos_ssh:
image: centos:7
container_name: centos_ssh
ports:
- "1022:22"
expose:
- "1022"
command:
- bash
- -c
- |
yum -y install passwd openssl openssh-server
echo "123456" | passwd --stdin root
ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''
sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config
sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config
/usr/sbin/sshd -D
tail -f /dev/null
密码及映射的端口可自行修改
Docker SSH连接docker容器的示例代码
简介
什么是Docker
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。
在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
下面的图片比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
为什么要用Docker
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。 其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
具体说来,Docker 在如下几个方面具有较大的优势。
更快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
更高效的虚拟化
Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
对比传统虚拟机总结
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟即 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
安装Docker
本来打算在CentOS6上安装Docker,最终由于CentOS6上自带的kernel版本太低导致Docker启动失败而放弃(kernel升级太繁琐)。
下面使用CentOS7安装Docker,本人采用虚拟机的方式来安装,安装好的虚拟机必须保证能访问外网。
CentOS7 系统 CentOS-Extras 库中已带 Docker,可以直接安装:
$ sudo yum install docker
安装之后启动 Docker 服务,并让它随系统启动自动加载:
$ sudo service docker start $ sudo chkconfig docker on
获取镜像
可以使用 docker pull 命令来从仓库获取所需要的镜像。
下面的例子将从 Docker Hub 仓库下载一个Centos6并且安装了jdk7的镜像:
$ docker pull tcbenkhard/centos6-jdk7
列出本地镜像
使用 docker images 显示本地已有的镜像。
$ docker images
启动容器
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。
因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。
下面的命令则启动一个 bash 终端,允许用户进行交互。
$ docker run -t -i docker.io/tcbenkhard/centos6-jdk7 /bin/bash [root@ffe81683c404 /]#
其中,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i 则让容器的标准输入保持打开。
当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
(1)检查本地是否存在指定的镜像,不存在就从公有仓库下载
(2)利用镜像创建并启动一个容器
(3)分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
(4)从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
(5)从地址池配置一个 ip 地址给容器
(6)执行用户指定的应用程序
(7)执行完毕后容器被终止
可以使用下面命令来查看CentOS版本信息:
$ cat /etc/redhat-release
修改root密码
使用passwd密码来修改密码(如提示没有这个命令行使用yum install passwd安装):
$ passwd xxx密码 xxx确认密码
安装Openssh
使用下面命令安装ssh server/ssh client:
$ sudo yum -y install openssh-server $ sudo yum -y install openssh-clients
修改SSH配置文件以下选项,去掉#注释,将四个选项启用:
$ vi /etc/ssh/sshd_config RSAAuthentication yes #启用 RSA 认证 PubkeyAuthentication yes #启用公钥私钥配对认证方式 AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径(和上面生成的文件同) PermitRootLogin yes #root能使用ssh登录
重启ssh服务,并设置开机启动:
$ service sshd restart $ chkconfig sshd on
退出容器并保存更改
使用exit命令或者ctrl+C来退出当前运行的容器:
[root@ffe81683c404 /]# exit
注意:上面ffe81683c404
是容器的ID,退出后用于保存的唯一ID。
当结束后,我们使用 exit 来退出,现在我们的容器已经被我们改变了,使用 docker commit 命令来提交更新后的副本。
$ sudo docker commit -m 'install openssh' -a 'Docker Newbee' ffe81683c404 centos6-jdk7:ssh 4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c
其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。
提交后docker中就会多出一个centos6-jdk7:ssh的一个镜像。
启动新的容器并打通22端口
将新的镜像启动,并将docker服务器的50001端口映射到容器的22端口上:
$ docker run -d -p 50001:22 centos6-jdk7:ssh /usr/sbin/sshd -D
ssh连接容器:
至此SSH连接docker容器成功完成。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
Docker 为镜像添加 SSH 服务
本教程基于 commit 命令创建
1 准备工作
使用 ubuntu:14.04 镜像创建一个容器
docker run -it ubuntu:14.04 /bin/bash
2 安装和配置 SSH 服务
在容器中更新 apt 缓存,安装 openssh-server
apt-get update;
apt-get install openssh-server -y;
创建目录 /var/run/sshd 并启动 SHH 服务
mkdir -p /var/run/sshd
/usr/sbin/sshd -D
contrl+c
输入 netstat -tunlp 命令查看端口 22 是否已经处于监听状态
修改 SSH 服务的安全登录配置,取消 pam 登录限制:
sed -r ''s/session required pam_loginuid.so/#session required pam_loginuid.so/g'' /etc/pam.d/sshd
在 root 用户目录下创建.ssh 目录,并复制需要登录的公钥信息(一般为本地主机用户目录下的.ssh/id_rsa.pub 文件)到 authorized_keys 文件中
mkdir root/.ssh
vi /root/.ssh/authorized_keys
创建自动启动 SSH 服务的可执行文件 run.sh , 并添加可执行权限
其中 run.sh 文件内容如下
#! /bin/bash
/usr/sbin/sshd -D
vi /run.sh
chmod +x run.sh
输入 exit 两次 退出容器
3 保存镜像
将退出的容器用 docker commit 命令保存为一个新的 ssh:ubuntu 镜像
其中 2bf 是退出的容器 ID 的前三位
docker commit 2bf sshd:ubuntu
使用 docker images 查看本地生成的新镜像 sshd:ubuntu
4 使用镜像
启动容器 并添加端口映射 10022 -->22,其中 10022 是宿主主机的端口,22 是容器的 SSH 服务监听端口
docker run -p 10022:22 -d sshd:ubuntu /run.sh
启动成功后,可以在宿主主机上可到容器运行的详细信息
确保宿主主机对外端口 10022 对外防火墙已经打开
在宿主主机(47.98.218.29 )或其他主机上可以通过 SSH 访问 10022 端口
ssh 47.98.218.29 -p 10022
今天关于Docker 添加容器 SSH 服务和docker容器ssh连接的分享就到这里,希望大家有所收获,若想了解更多关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、docker centos7容器 安装ssh服务、Docker SSH连接docker容器的示例代码、Docker 为镜像添加 SSH 服务等相关知识,可以在本站进行查询。
本文标签: