拉取Ubuntu镜像、配置SSH登录、数据持久化及Docker网络配置【来自于deepseek】

devtools/2025/2/9 2:45:52/

以下是整合后的完整流程,包括拉取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
    
  • 测试容器间通信

    • 启动第二个容器:

      docker run -d \--name my_ubuntu2 \--network my_network \--ip 172.18.0.11 \ubuntu-ssh
      
    • 从第一个容器ping第二个容器:

      docker exec my_ubuntu ping -c 4 172.18.0.11
      

10. 总结

  1. 拉取Ubuntu镜像并构建包含SSH服务的自定义镜像。
  2. 创建数据卷 ubuntu_data 实现数据持久化。
  3. 创建自定义Docker网络 my_network,并将容器加入该网络。
  4. 通过SSH登录容器,验证数据持久化和网络连通性。

注意事项

  • 安全性:生产环境中应禁用root登录,使用SSH密钥认证。
  • 端口冲突:若宿主机2222端口被占用,可替换为其他端口(如-p 3000:22)。
  • 子网冲突:确保自定义网络的子网范围与现有网络不冲突。
  • DNS解析:Docker默认提供容器名称的DNS解析,可以直接通过容器名称通信(如 ping my_ubuntu2)。

http://www.ppmy.cn/devtools/157238.html

相关文章

事件驱动架构(EDA)

事件驱动架构&#xff08;Event-Driven Architecture, EDA&#xff09;是一种软件架构模式&#xff0c;其中系统的行为由事件的产生和处理驱动。在这种架构中&#xff0c;系统的组件通过事件进行交互&#xff0c;而不是通过直接的调用或者请求响应方式。 关键概念 事件&#x…

快速了解 c++ 异常处理 基础知识

相关代码概览&#xff1a; #include<stdexcept>std::runtime_errorcatch (const std::runtime_error& e) e.what() 相信大家一定见过这些代码&#xff0c;那么这些代码具体什么意思呢&#xff1f;我们一起来看一下 知识精讲&#xff1a; 异常处理是C中非常重要…

【Spring】什么是Spring?

什么是Spring&#xff1f; Spring是一个开源的轻量级框架&#xff0c;是为了简化企业级开发而设计的。我们通常讲的Spring一般指的是Spring Framework。Spring的核心是控制反转(IoC-Inversion of Control)和面向切面编程(AOP-Aspect-Oriented Programming)。这些功能使得开发者…

嵌入式八股文面试题(一)C语言部分

1. 变量/函数的声明和定义的区别&#xff1f; &#xff08;1&#xff09;变量 定义不仅告知编译器变量的类型和名字&#xff0c;还会分配内存空间。 int x 10; // 定义并初始化x int x; //同样是定义 声明只是告诉编译器变量的名字和类型&#xff0c;但并不为它分配内存空间…

Nginx部署Umi React前端项目标准配置

文章目录 概要前端Umi项目配置文件请求后端Api打包 后端项目Nginx配置配置文件 错误信息 概要 使用UmiJs开发的前端项目打包部署在Nginx&#xff0c;主要是Umi中项目的配置和Nginx的配置 前端Umi项目 基于"umijs/max": "^4.3.24", "react": &…

RTMP 和 WebRTC

WebRTC(Web Real-Time Communication)和 RTMP(Real-Time Messaging Protocol)是两种完全不同的流媒体协议,设计目标、协议栈、交互流程和应用场景均有显著差异。以下是两者的详细对比,涵盖协议字段、交互流程及核心设计思想。 一、协议栈与设计目标对比 特性RTMPWebRTC传…

5分钟掌握React的Redux Toolkit + Redux

Redux Toolkit Redux 教程 1. 引言 本教程介绍如何使用 Redux Toolkit&#xff08;RTK&#xff09; 和 TypeScript 搭建 Redux 状态管理系统。 我们将创建一个 计数器&#xff08;Counter&#xff09; 和 待办事项&#xff08;Todo&#xff09; 模块&#xff0c;并学习 Redu…

C++六大默认成员函数

C六大默认成员函数 默认构造函数默认析构函数RAII技术RAII的核心思想优点示例应用场景 默认拷贝构造深拷贝和浅拷贝 默认拷贝赋值运算符移动构造函数&#xff08;C11起&#xff09;默认移动赋值运算符&#xff08;C11起&#xff09;取地址及const取地址操作符重载取地址操作符重…