以下是整合后的完整流程,包括拉取Ubuntu镜像、配置SSH登录、数据持久化以及配置Docker网络:
1. 拉取Ubuntu镜像
docker pull ubuntu:22.04
2. 创建数据卷(持久化存储)
docker volume create ubuntu_data
3. 创建自定义Dockerfile
mkdir ubuntu-ssh && cd ubuntu-ssh
cat <<EOF > Dockerfile
FROM ubuntu:22.04# 安装SSH服务并配置
RUN apt update && apt install -y openssh-server && \mkdir /var/run/sshd && \echo 'root:password' | chpasswd && \sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config# 持久化数据挂载点(可选)
VOLUME /data# 暴露SSH端口
EXPOSE 22# 启动SSH服务
CMD ["/usr/sbin/sshd", "-D"]
EOF
4. 构建自定义镜像
docker build -t ubuntu-ssh .
5. 创建自定义Docker网络
docker network create --subnet=172.18.0.0/16 my_network
6. 启动容器并加入自定义网络
docker run -d \-p 2222:22 \-v ubuntu_data:/data \--name my_ubuntu \--network my_network \--ip 172.18.0.10 \ubuntu-ssh
7. 通过SSH登录容器
ssh root@localhost -p 2222
# 输入密码: password
8. 验证数据持久化
-
在容器内创建测试文件:
docker exec my_ubuntu sh -c "echo 'Test Data' > /data/test.txt"
-
删除容器并重新启动:
docker rm -f my_ubuntu docker run -d -p 2222:22 -v ubuntu_data:/data --name my_ubuntu --network my_network --ip 172.18.0.10 ubuntu-ssh
-
检查数据是否存在:
docker exec my_ubuntu cat /data/test.txt # 应输出: Test Data
9. 验证网络配置
-
查看容器IP地址:
docker inspect my_ubuntu | grep IPAddress
-
测试容器间通信:
10. 总结
- 拉取Ubuntu镜像并构建包含SSH服务的自定义镜像。
- 创建数据卷
ubuntu_data
实现数据持久化。 - 创建自定义Docker网络
my_network
,并将容器加入该网络。 - 通过SSH登录容器,验证数据持久化和网络连通性。
注意事项
- 安全性:生产环境中应禁用root登录,使用SSH密钥认证。
- 端口冲突:若宿主机2222端口被占用,可替换为其他端口(如
-p 3000:22
)。 - 子网冲突:确保自定义网络的子网范围与现有网络不冲突。
- DNS解析:Docker默认提供容器名称的DNS解析,可以直接通过容器名称通信(如
ping my_ubuntu2
)。