??作者简介:云计算领域优质创作者新星计划第三季python赛道TOP1??阿里云ACE认证高级工程师 ??个人主页:小鹏linux ??个人社区:小鹏linux欢迎加入个人社区!
1.基于commit命令创建
1.1 准备工作
1.2安装和配置SSH服务
1.3 保存镜像
1.4 使用镜像
???结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结结结结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结结结结结结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结结结结结结结结结结结结结结结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结尾结结
1.基于commit命令创建
Docker提供了docker commit命令支持用户提交自己修改制定容器并生成新的镜像。命令格式是docker commit CONTAINER[REPOSITORY[: TAG]]。
|
这里将介绍如何使用docker commit命令。我以ubuntu:14.04镜像添加SSH以服务操作流程为例。
|
1.1 准备工作
首先,使用ubuntu:14.创建一个容器的04镜像:
|
$ docker run -it ubuntu:14.04 /bin/bash
更新apt并安装缓存openssh-server:
|
root@fc1936ea8ceb:/#apt-get update; apt-get install openssh-server -y
1.2安装和配置SSH服务
选择主流的openssh-server作为服务:
|
root@fc1936ea8ceb:/# apt-get install openssh-server –y
若需正常启动SSH服务,目录//var/run/sshd必须存在。手动创建并启动它SSH服务:
|
root@fc1936ea8ceb:/# mkdir -p /var/run/sshd root@fc1936ea8ceb:/# /usr/sbin/sshd -D & [1] 3254
此时,检查容器22端口(SSH默认服务监控端口),可见此端口已处于监控状态:
|
root@fc1936ea8ceb:/# netstat -tunlp Active Internet connections (only servers) 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 - tcp6 0 0 :::22 :::* LISTEN -
修改SSH安全登录配置取消服务pam登录限制:
|
root@fc1936ea8ceb:/# sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
在root创建用户目录.ssh复制需要登录的公钥信息(通常是本地主机用户目录下的).ssh/id_rsa.pub文件,可由ssh-keygen-t rsa命令生成)到authorized_keys文件中:
|
root@fc1936ea8ceb:/# mkdir root/.ssh
root@fc1936ea8ceb:/# vi /root/.ssh/authorized_keys
创建自动启动SSH服务的可执行文件run.sh,并添加可执行权限:
|
root@fc1936ea8ceb:/# vi /run.sh
root@fc1936ea8ceb:/# chmod +x run.sh
其中,run.sh脚本内容如下:
|
#!/bin/bash
/usr/sbin/sshd -D
最后,退出容器:
|
root@fc1936ea8ceb:/# exit
exit
1.3 保存镜像
将所退出的容器用docker commit命令保存为一个新的sshd:ubuntu镜像:
|
$ docker commit fc1 sshd:ubuntu
7aef2cd95fd0c712f022bcff6a4ddefccf20fd693da2b24b04ee1cd3ed3eb6fc
使用docker images查看本地生成的新镜像sshd:ubuntu,目前拥有的镜像.
如下:
|
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
sshd ubuntu 7aef2cd95fd0 10 seconds ago 255.2 MB
busybox latest e72ac664f4f0 3 weeks ago 2.433 MB
ubuntu latest ba5877dc9bec 3 months ago 192.7 MB
1.4 使用镜像
启动容器,并添加端口映射10022-->22。其中10022是宿主主机的端口,22是容器的SSH服务监听端口:
|
$ docker run -p 10022:22 -d sshd:ubuntu /run.sh
3ad7182aa47f9ce670d933f943fdec946ab69742393ab2116bace72db82b4895
启动成功后,可以在宿主主机上看到容器运行的详细信息:
|
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3ad7182aa47f sshd:ubuntu "/run.sh" 2 seconds ago Up 2 seconds 0.0.0.0:10022->22/tcp focused_ptolemy
在宿主主机(192.168.1.200)或其他主机上,可以通过SSH访问10022端口来登录容器:
|
$ ssh 192.168.1.200 -p 10022
root@3ad7182aa47f:~#