Docker-SSH连接docker容器

安装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 centos6-jdk7 /bin/bash
[root@f8513ec39154 /]#

其中,-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@f8513ec39154 /]# exit

注意:上面f8513ec39154是容器的ID,退出后用于保存的唯一ID。

当结束后,我们使用 exit 来退出,现在我们的容器已经被我们改变了,使用 docker commit 命令来提交更新后的副本。

$ sudo docker commit -m 'install openssh' -a 'Docker Newbee' f8513ec39154  centos6-jdk7:ssh

其中,-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镜像之间是相互独立的

# 进入docker(exit退出后需要重新启动,修改后需要commit)
$ docker attach Name/ID
$ docker start Name/ID
$ docker commit ID new_image_name

# 进入docker(exit退出后不需要重新启动,修改后不需要commit)
$ docker exec -it Name/ID /bin/bash
# 修改镜像NAME
$ docker rename Name/ID 新名

推荐阅读更多精彩内容

  • 0. 前言 docker是什么?docker是用GO语言开发的应用容器引擎,基于容器化,沙箱机制的应用部署技术。可...
    sessionboy阅读 3,329评论 2 49
  • 西塞山前白鹭飞(六) 六 如花在家捯饬了一下午,为了和肖琴父母见面,她不得不注意形象,洗了个澡,去掉身上的胭脂香粉...
    六月孺子牛阅读 309评论 2 4
  • 今天要分享的书是《每天最重要的2小时》[美]乔西·戴维斯。把身体调整到最佳状态,最搞笑的完成每天关键的任务。 用三...
    翠霞_0256阅读 31评论 0 1
  • 为什么医院的检查报告上都是正常的,但总感觉身体很难受呢? 告诉大家一个残酷的事实: 肝脏坏到50%,医院检查...
    李俊侠阅读 49评论 0 0
  • 总觉得不记录一下今天所有的际遇,都对不住挂在我身上的雨水。 好好的大周末,跟往常一样想去运动场跑跑,七点钟就出门了...
    海水微凉浅喜深爱阅读 1,411评论 0 0