Docker 17参考手册
引擎 | Engine
SSHd (Engine)
建一个eg_sshd图像
下面Dockerfile在容器中设置一个SSHd服务,您可以使用该服务来连接并检查其他容器的卷,或者快速访问测试容器。
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
使用以下命令构建图像
$ docker build -t eg_sshd .
运行一个test_sshd容器
然后运行它。然后,您可以使用它docker port来找出容器的端口22映射到的主机端口:
$ docker run -d -P --name test_sshd eg_sshd
$ docker port test_sshd 22
0.0.0.0:49154
现在你可以root在容器的IP地址(你可以找到它docker inspect)或者49154Docker守护进程的主机IP地址的端口上(ip address或者ifconfig可以告诉你)或者localhost在Docker守护进程主机上ssh:
$ ssh root@192.168.1.2 -p 49154
# The password is ``screencast``.
root@f38c87f2a42d:/#
环境变量
使用sshd守护进程来生成shell会使得通过普通的Docker机制将环境变量传递到用户的shell变得很复杂,因为sshd它会在启动shell之前清理环境。
如果你的在设定值Dockerfile使用ENV,你需要将它们推到像一个shell初始化文件/etc/profile中的例子Dockerfile以上。
如果您需要传递docker run -e ENV=value值,则需要在开始之前编写一个简短的脚本来完成相同的操作sshd -D,然后CMD用该脚本替换。
清理
最后,通过停止并取出容器,然后移除图像,在测试后清理。
$ docker stop test_sshd
$ docker rm test_sshd
$ docker rmi eg_sshd
docker,示例,软件包安装,网络
引擎 | Engine相关
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
| 主页 | https://docker.com/ |
| 源码 | https://github.com/docker/docker |
| 版本 | 17 |
| 发布版本 | 17.06 |
加载中,请稍侯......