Docker实战(七)之为镜像添加SSH服务
1.基于commit命令创建
Docker提供了docker commit命令,支持用户提交自己对制定容器的修改,并生成新的镜像。命令格式为docker commit CONTAINER [REPOSITORY[:TAG]]。
(1)创建一个镜像
docker run -it ubuntu:14.04 /bin/bash
更新apt缓存,并安装openssh-server
apt-get update
apt-get install openssh-server -y
(2)安装配置SSH服务
apt-get install openssh-server -y
如果需要正常启动SSH服务,则目录/var/run/sshd必须存在。手动创建它,并启动SSH服务:
mkdir -p /var/run/sshd
/usr/bin/sshd -D &
netstat -tunlp
(3)保存镜像
docker commit 1b902596b8b9 sshd:ubuntu
(4)使用镜像
启动容器,并添加端口映射10022-->22。其中10022是宿主主机的端口,22是容器的SSH服务监听的端口:
docker run -p 10022:22 -d sshd:ubuntu /run.sh
启动成功后,可以在宿主主机上看到容器运行的详细信息
在宿主主机或其他主机上,可以通过SSH访问10022端口来登录容器
ssh IP -p 10022
2.使用Dockerfile创建
(1)创建工作目录
mkdir sshd_ubuntu
cd ssh_ubuntu
在该目录中创建Dockerfile和run.sh文件
(2)编写run.sh脚本和authorized_keys文件
run.sh脚本内容如下:
#!/bin/bash
/usr/sbin/sshd -D
在宿主主机上生成SSH密钥,并创建authorized_keys文件:
ssh-keygen -t rsa
cat authorized_keys.pub > authorized_keys
(3)编写Dockerfile文件
#设置继承镜像
FROM ubuntu:14.04
#提供一些作者信息
MAINTAINER docker_user(user@docer.com)
#下面开始运行更新命令
RUN apt-get update
#安装ssh服务
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd
RUN mkdir -p /root/.ssh
#取消pam限制
RUN sed -ri 's/session required pam_loginuid.sh/#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"]
(4)创建镜像
执行该命令即可创建镜像
docker build -t sshd:dockerfile .
记得必须要在Dockerfile文件存在的目录执行该命令否则会报找不到目录异常
docker images
(5)测试镜像,运行容器
docker run -d -p 10122:22 sshd:dockerfile
在宿主主机新打开一个终端,连接到新建容器:
ssh 192.168.126.130 -p 10122
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述