使用Dockerile部署带有ssh的Ubuntu
一、Dockerfile 展示
1 | FROM ubuntu:20.04 |
二、分步解析
1. 容器的选择
由于平时使用的大多是ubuntu 所以这次选择了选择了ubuntu20.04 版
1 | FROM ubuntu:20.04 |
2. 环境变量的设置
设置时区和文字环境,其实作用并不大,但是还是设置上吧
1 | ENV TZ Asia/Shanghai |
3. root用户的密码更改
因为ssh 时需要用登陆用户名和密码,所以将root密码改成自己想要的
1 | RUN echo 'root:root' |chpasswd |
 ” :” 前面的root 是用户名, ” : “  后面的root是密码
4. 换国内源、安装SSH
因为镜像在本地构建,所以使用国内源可以有一个比较好的网速来下载。
然后通过apt 安装vim 和 openssh-server 以便使用ssh 和一些简单的编辑。
当ssh使用root登陆时需要更改配置中的 ”PermitRootLogin”  为  ”Yes”  以便root用户使用ssh。
1 | RUN echo "deb http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse\n \ |
5. 创建ssh的目录
如果没有这个目录,ssh 是会崩掉的,所以乖乖加上。
1 | RUN mkdir /var/run/sshd |
6. 暴露端口
ssh默认的端口号是 22 所以在这里我们暴露镜像的端口号。
1 | EXPOSE 22 |
7. 在开机时启动ssh服务
虽然在系统中安装了openssh-server ,但是ssh服务仍需要在开机时启动。
1 | CMD ["/usr/sbin/sshd","-D"] |
二、构建镜像
1. 构建镜像
使用 docker build 命令创建一个 名为 ssh_docker  的镜像
1 | sudo docker build -t ssh_docker . |
三、启动镜像
1. 前台启动
有时候我们需要前台启动镜像以便之间能和镜像交互,但是这种方法很不推荐。
因为如果你使用了这种方法,构建镜像时的”CMD”命令就不能被执行,所以需要在参数中附带要执行的指令。
1 | sudo docker run -it -p 10122:22 ssh_docker /bin/bash |
然后需要手动开启ssh功能
1 | service ssh start |
或者
1 | /usr/sbin/sshd -D |
2. 后台启动
这种方法还是比较推荐的,因为这样可以减少交互,使用起来也比较无感。
1 | sudo docker run -itd -p 10122:22 ssh_docker |
这样会自动执行构建时CMD 的命令,所以ssh服务就成功启动了。
四、连接docker
在本机使用ssh 就可以连接docker了,注意端口和用户名
1 | ssh root@127.0.0.1 -p 10122 |
注意:多次开启镜像后连接ssh可能出现错误,这时清除该地址的记录就可以了
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.