Docker为容器挂载一个网段与容器挂载host

Docker为容器挂载一个网段与容器挂载host

docker-compose logs -f # 实时打印docker-compose logs -f   实时打印日志
ocker-compose up -d  
docker network ls  
docker network create --driver bridge myftp  # 创建网络模式为bridge的网桥myftp
docker inspect 8c2b31f5afe0

在这里插入图片描述

1、挂载自定义的外部网桥myftp

version: "2"
services:
  nginx: # 服务名称,用户自定义
    image: nginx:latest  # 镜像版本
    ports:
      - 8080:8080  # 暴露端口
    volumes: # 挂载z
      - /root/nginx/html:/usr/share/nginx/html
      - /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
    privileged: true # 这个必须要,解决nginx的文件调用的权限问题

  vsftpd:
    image: vsftpd:myftp
      # 指定构建目录,可以使用相对路径
    build: ./vsftpd
    ports:
      - 2020:20
      - 2121:21
      - 21100-21110:21100-21110
    volumes:
      - /home/vsftpd/ftp/:/home/vsftpd/zhangsan/
    restart: always
    networks:
      - myftp

  application:
    image: application:latest
    build: . # 表示以当前目录下的Dockerfile开始构建镜像
    ports:
      - 8090:8090
      - 31100-31110:31100-31110
    volumes:
      - /root/work_projects/upLoadAndDown/logs:/logs
    depends_on:
      - vsftpd
      - nginx
# 在docker-compose中声明外部网桥myftp,vsftp才能够用
networks:
  myftp:
    external: true

2、挂载网络到host上,以host网络模式,容器与宿主机同IP

version: "2"
services:
  nginx: # 服务名称,用户自定义
    image: nginx:latest  # 镜像版本
    ports:
      - 8080:8080  # 暴露端口
    volumes: # 挂载z
      - /root/nginx/html:/usr/share/nginx/html
      - /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
    privileged: true # 这个必须要,解决nginx的文件调用的权限问题

  vsftpd:
    #由于指定网络模式为host,与宿主机同IP和端口号
    network_mode: "host"
    image: vsftpd:myftp
      # 指定构建目录,可以使用相对路径
    build: ./vsftpd
    volumes:
      - /home/vsftpd/ftp/:/home/vsftpd/zhangsan/
    restart: always
    networks:
      hostnet: {}

  application:
    image: application:latest
    build: . # 表示以当前目录下的Dockerfile开始构建镜像
    ports:
      - 8090:8090
      - 5006:5006
      - 31100-31110:31100-31110
    volumes:
      - /root/work_projects/localVsftp:/localVsftp
      - /root/work_projects/upLoadAndDown/logs:/logs
      - /root/work_projects/upLoadAndDown/config:/config
    depends_on: 
      - vsftpd
      - nginx

networks:
  hostnet:
    name: host
    external: true

Linux上抓包命令的使用:https://zhuanlan.zhihu.com/p/74812069

### Docker 容器内外通信数据交互 #### 网络配置 Docker 提供多种网络驱动来实现容器之间的通信以及容器外部主机的通信。其中 `bridge` 是默认的网络模式,允许通过创建自定义桥接网络实现更灵活的连接方式[^1]。 另一种常见的网络模式是 `host` 模式,在这种模式下,容器会共享宿主机的网络栈,从而使得外部可以直接访问容器内的服务而无需额外端口映射。然而需要注意的是,这种方式虽然提高了性能并简化了配置过程,但也降低了安全性,因为容器之间缺乏必要的隔离机制[^2]。 对于更加复杂的场景需求,则可以采用像 MACVLAN 这样的高级网络解决方案。MACVLAN 能够让多个设备在同一物理接口上拥有独立 IP 地址,并且这些地址看起来就像是直接连在网络中的真实机器一样工作。例如在一个实验环境中可以通过如下命令设置两个不同节点上的 BusyBox 实例互相通讯[^4]: ```bash [root@docker-node1 ~]# docker run -it --name busybox --network macvlan1 --ip 1.1.1.100 --rm busybox / # ping 1.1.1.200 ``` #### 文件共享 为了便于管理和维护应用所需的数据文件或者持久化存储某些重要资料,通常我们会利用 Docker 的数据卷功能来进行操作。一种方法就是使用由 Docker 自己管理的数据卷 (managed data volumes),它可以帮助我们轻松处理诸如日志记录、数据库保存等问题而不必担心底层细节复杂度增加带来的困扰[^3]。 当尝试向只读挂载路径写入新内容时可能会遇到权限错误提示:“Read-only filesystem”。这表明当前目录已被设定为不可修改状态,因此任何试图改变该位置的行为都将失败。 另外值得注意的一点是在实际部署过程中如果涉及到敏感信息传输的话还需要考虑如何安全地传递认证凭证给远程仓库完成镜像推送拉取动作等任务。比如下面这个例子展示了怎样正确输入密码后成功登录到指定私有库中去[^5]: ```bash [root@hdzs-zhuji test]# docker login -u hdzs Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded [root@hdzs-zhuji test]# ``` ### 总结 综上所述,无论是简单的内部互访还是跨越多台服务器的大规模集群环境下的跨网段交流亦或是长期稳定运行的应用程序都需要合理规划其对应的网络架构;此同时针对不同的业务特性选择恰当类型的存储介质也是至关重要的环节之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值