在写这个之前给大家推荐一个很好用的docker image 下载地方——daocloud(http://get.daocloud.io/)
对于docker容器的操作,我们可以通过
docker exec -it <容器名 或 容器id> /bin/bash
或者
docker attach <容器名 或 容器id>
进入容器内部操作,其实有很多的时候我们可以通过 ssh 连接从而来操作容器,今天就来跟大家分享一下如何用docker commit指令来制作一个ssh image
以下的操作都是用 root 账号进行操作的,宿主机是 Ubuntu16.04-server版的。
1.我们进入(我个人喜欢在 /home 目录中进行操作)/home 目录
cd /home
2.先从daocloud中pull一个基础镜像下来:
docker pull docker pull daocloud.io/library/ubuntu:14.04
3.用基础镜像创建一个容器:
docker run -it --name ssh-base daocloud.io/library/ubuntu:14.04 /bin/bash
不出意外话,我们应该在容器中了。
4.我们先更新一下这个容器的安装包:
apt-get update -y
5.我们安装ssh服务和ssh客户端(主要用于测试)
apt-get install -y openssh-server openssh-client libmysqlclient (安装三个软件)
6.我们给容器的 root 用户设置一个密码:
passwd root (按照提示输入密码即可)
在这里一个要注意:容器的 root 用户 和 宿主机的 root 用户不是同一个用户,因为 在 docker容器中用一个 用户命名空间 的概念从而让容器与容器,容器与宿主机之间
进行隔离。
7.对于Ubuntu而言,root用户是不能通过 ssh 连接的,但是可以修改 ssh 的配置文件
vi /etc/ssh/sshd_config
把文件中的 PermitRootLogin 这一行注释掉,改为 PermitRootLogin yes ,保存退出
8.重新启动 ssh 服务:
先创建一个目录
mkdir -p /var/run/sshd
/etc/init.d/ssh restart
9.这个时候我们在容器中测试一个可不可以 ssh 登录了:
ssh localhost
不出意外的话,我们可以成功登录了, 输入 exit 我们就可以退出登录
10.我们创建一个 /runssh.sh 文件:
vi /runssh.sh
在该文件中我们输入以下内容:
/usr/sbin/sshd -D
然后我们保存退出
给该文件赋予一定的权限: chmod 777 /runssh.sh
11.这个时候,我们就可以退出容器了:
exit
12.我们就用刚才的容器来创建镜像了:
docker commit ssh-base ssh:01
注意:ssh-base:是刚才创建的容器名;ssh:01 是我们要创建的镜像名
13.我们可以启动一个 ssh 容器了:
docker run -it -d --name ssh01 -P ssh:01 /runssh.sh
14.我们可以通过ssh连接该容器了:
ssh root@localhost -p <端口号>
15.如果我们要进入改容器内部应该用下面的指令:
docker exec -it ssh01 /bin/bash