基于 Dockfile 给镜像增加 SSH 服务
使用 Dockfile
给镜像上增加 ssh
服务。
布置环境
阿里云轻量应用服务器 镜像信息:Ubuntu 16.04
拉取 ubuntu:latest
镜像
docker pull ubuntu:latest
完成后,查看镜像是否成功下载
~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 3556258649b2 3 weeks ago 64.2MB
创建工作目录
新建 sshd-ubuntu 文件夹
mkdir sshd_ubuntu
在其中新建 Dockerfile
和 run.sh
文件
cd sshd_ubuntu
touch Dockerfile run.sh
编写 run.sh 和 authorized_keys 文件
- run.sh 此处书写 容器运行时 执行的命令
#!/bin/bash /usr/sbin/sshd -D
- authorized_keys 此处书写宿主机中生成的
ssh
公钥ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub > authorized_keys
编写 Dockerfile
#设置继承镜像
FROM ubuntu:latest
#作者信息
MAINTAINER docker_user (user@docker.com)
#先更新缓存,安装ssh服务
RUN apt-get update \
&& apt-get install -y openssh-server \
&& mkdir -p /var/run/sshd \
&& mkdir -p /root/.ssh
#取消pam限制
RUN sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
#复制配置文件到相应位置,并赋予脚本可执行权限
ADD authorized_keys /root/.ssh/authorized_keys
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#开放端口
EXPOSE 22
#设置自启动命令
CMD ["/run.sh"]
-
RUN 运行指定命令。格式为 RUN commend 或 RUN ["executable", ”paraml”, ”param2"]
前者是在 shell 终端执行,即 /bin/sh -c ; 后者指令会被解析为 json,所以必须为双引号使用 exec 执行,不启动 shell 环境。
每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像层 ,所以,RUN命令能合并则合并,尽量减少镜像层。 -
CMD 用来指定启动容器时默认执行的命令 。 CMD ["executable ",”paraml ” , "param2 "]
每个
Dockerfile
中只能有一条CMD命令,多条的话,只有最后一条执行。
如果用户启动容器时候手动指定了运行的命令(作为 run 命令的参数),则会覆盖掉
CMD 指定的命令 。 -
ADD 添加内容到镜像 。格式 ADD ,该命令将复制指定的< src>路径下内容到容器中的< dest>路径下 。
其中可以是 Dockerfile所在目录的一个相对路径(文件或目录);也可以是一个URL ;还可以是一个 tar 文件(自动解压为目录) 可以是镜像内绝对路径,或者相对于工作目录( WORKDIR)的相对路径 。 *路径支持正则格式,例如: ADD .c /code/**
-
COPY 复制内容到镜像 。格式 COPY
COPY 与 ADD 指令功能类似,当使用本地目录为源目录时,推荐使用 COPY。
创建镜像
在 sshd_ubuntu 目录下,使用 docker build创建镜像。
docker build -t sshd:dockerfile .
注意上面命令末尾的 . 号指的是当前目录
查看镜像是否安装创建成功
~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sshd dockerfile e35f180c1e98 5 hours ago 207MB
ubuntu latest 3556258649b2 3 weeks ago 64.2MB
测试镜像,运行容器
- 使用刚才创建的 sshd:dockerfile 镜像来运行一个容器。
直接启动镜像,映射容器的 22 端口到本地的 10086 端口:docker run -d -p 10086:22 --name sshd-test sshd:dockerfile
2.查看容器是否成功启动
~ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c2c2e2688046 sshd:dockerfile "/run.sh" 5 hours ago Up 5 hours 0.0.0.0:10086->22/tcp sshd-test
3.查看
docker
运行的IP地址~ ifconfig docker|grep inet inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0
地址为 172.17.0.1
4.通过 ssh 连接容器
~ ssh 172.17.0.1 -p 10086
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.4.0-93-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
Last login: Thu Aug 15 11:38:03 2019 from 172.17.0.1
-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
root@c2c2e2688046:~#
连接成功!
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: