《Docker技术入门与实践》笔记
为了解决远程管理容器的问题,需要SSH的支持。为镜像添加SSH功能,一般有两种方式:
- 基于docker commit命令创建镜像
- 基于Dockerfile创建镜像
1 基于docker commit命令创建镜像
docker commit命令支持用户提交对指定容器的修改,并生成新的镜像。格式:
$ docker commit CONTAINER [REPOSITORY[:TAG]]
因此,我们只需要使用需要添加SSH功能的镜像创建一个容器,在容器中添加SSH服务,并使用docker commit命令提交并生成新的支持SSH功能的镜像。
以在Ubuntu:14.04镜像中增加SSH功能为例,主要步骤为:
// 创建一个容器
$ docker run -it ubuntu:14.04 /bin/bash
// 更新apt缓存
# apt-get update
// 为容器安装和配置SSH功能
# apt-get install openssh-server -y
// 启动SSH之前,必须确保/var/run/sshd目录存在,手动创建
# mkdir -p /var/run/sshd
// 启动SSH服务
# /usr/sbin/sshd -D &
// 查看容器的22端口,已经处于LISTEN状态
# netstat -tunlp
// 注释/etc/pam.d/sshd文件中的session
// required pam_loginuid.so行,取消pam登陆限制
# sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
// 增加本地主机的公钥信息
# mkdir root/.ssh
# vi /root/.ssh/authorized_keys
// 创建自动启动SSH功能的可执行文件run.sh
# vi /run.sh
#!/bin/bash
/usr/sbin/sshd -D
// 添加可执行权限
# chmod +x run.sh
// 容器修改完成,退出容器
# exit
// 提交并生成一个新的镜像sshd:ubuntu
$ docker commit ffaed(容器ID) sshd:ubuntu
// 使用镜像sshd:ubuntu启动容器,并将本地主机的10022端口
// 映射到容器的SSH服务监听端口22,同时使该容器启动ssh服务:
$ docker run -p 10022:22 -d sshd:ubuntu /run.sh
// 查看本地主机的ip地址(192.168.118.1)
$ ipconfig
// 从本地主机,通过SSH访问10022端口登陆到容器中
$ ssh root@192.168.118.1 -p 10022
2 基于Dockerfile创建镜像
使用Dockerfile也可以在一个镜像的基础上创建一个包含SSH功能的镜像。
# 创建sshd_ubuntu工作目录
$ mkdir sshd_ubuntu
$ cd sshd_ubuntu
# windows下cmd创建Dockerfile和run.sh文件
$ type nul > Dockerfile
$ type nul > run.sh
# 将.ssh目录下的id_rsa.pub的内容复制到sshd_ubuntu目录下的authorized_keys文件中
$ type .ssh\id_rsa.pub > sshd_ubuntu\authorized_keys
# 在sshd_ubuntu目录下使用Dockerfile创建新镜像ssh:dockerfile。
$ cd sshd_ubuntu
$ docker build -t ssh:dockerfile .
Successfully built XXX
// 使用镜像sshd:ubuntu启动容器,并将本地主机的10122端口
// 映射到容器的SSH服务监听端口22,同时使该容器启动ssh服务:
$ docker run -p 10122:22 -d sshd:ubuntu /run.sh
// 查看本地主机的ip地址(192.168.118.1)
$ ipconfig
// 从本地主机,通过SSH访问10122端口登陆到容器中
$ ssh root@192.168.118.1 -p 10122
网友评论