Docker 网络模式
- 选择网络模式
- Host Mode (主机模式)
- 特点: 容器与宿主机共享网络命名空间
 - 操作: 
docker run --net=host ... 
 - Container Mode (容器模式)
- 特点: 容器与指定容器共享网络命名空间
 - 操作: 
docker run --net=container:<container-id-or-name> ... 
 - None Mode (无网络模式)
- 特点: 容器拥有独立的网络命名空间但没有任何网络设置
 - 操作: 
docker run --net=none ... 
 - Bridge Mode (桥接模式)
- 特点: 容器拥有独立的网络命名空间,具有独立的 IP 地址、端口和路由,通过 veth pair 连接到 
docker0网桥 - 操作: 
docker run --net=bridge ... 
 - 特点: 容器拥有独立的网络命名空间,具有独立的 IP 地址、端口和路由,通过 veth pair 连接到 
 
 - Host Mode (主机模式)
 - 执行网络操作
- 查看现有网络
- 操作: 
docker network ls - 操作: 
docker network inspect <network-id-or-name> 
 - 操作: 
 - 连接容器到网络
- 操作: 
docker network connect <network> <container> 
 - 操作: 
 - 断开容器与网络的连接
- 操作: 
docker network disconnect <network> <container> 
 - 操作: 
 - 删除网络
- 操作: 
docker network rm <network> 
 - 操作: 
 
 - 查看现有网络
 
Docker 网络模式的特性
- Host Mode (主机模式)
- 容器与宿主机共享网络命名空间。
 - 容器可以直接访问宿主机的网络设备、IP 地址及端口。
 - 不支持端口映射。
 
 - Container Mode (容器模式)
- 容器与另一个容器共享网络命名空间。
 - 共享的容器拥有相同的网络设备、IP 地址及端口。
 - 不支持端口映射。
 
 - None Mode (无网络模式)
- 容器拥有独立的网络命名空间。
 - 容器没有任何网络配置。
 - 可能用于不需要网络功能的服务。
 
 - Bridge Mode (桥接模式)
- 容器拥有独立的网络命名空间。
 - 每个容器都有独立的 IP 地址、端口和路由。
 - 使用 veth pair 连接到 
docker0网桥。 - 支持端口映射。
 - 可以通过 IP 地址或容器名称进行通信。
 
 
获取容器的进程号
- 命令: 
docker inspect -f '{``{.State.Pid}}' <container-id-or-name> 
1、部署portainer,添加阿里云镜像仓库,通过portainer下载镜像构建容器
            
            
              bash
              
              
            
          
          docker pull php
docker tag 3546b3772897 registry.cn-hangzhou.aliyuncs.com/shiina_space/shiina:php
docker push registry.cn-hangzhou.aliyuncs.com/shiina_space/shiina:php
        
            
            
              bash
              
              
            
          
          docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
        浏览器访问192.168.99.130:8088,添加一个Registries

搜索镜像php,pull 这个镜像

创建容器


2、部署tomcat,将宿主机下的/opt/html目录挂载到tomcat容器内的webapps目录,在tomcat中发布电影网站
            
            
              bash
              
              
            
          
          docker run -d -p 8085:8080 --name tomcat88 -v /opt/html:/usr/local/tomcat/webapps tomcat:8.5
        
            
            
              bash
              
              
            
          
          apt-get install mysql-server
mysql_secure_installation
        3、部署nginx,nginx读取的nginx.conf文件来自宿主机
            
            
              bash
              
              
            
          
          docker run -d -p 86:80 -v /opt/nginxconfd:/etc/nginx/conf.d --name n8 nginx  
        
4、创建一个独立的桥接网络,网段(20.0.0.0/24),用于部署前后端分离项目,需要nginx容器,mysql容器,java容器(基于centos容器以rpm方式部署jdk8.0)
创建docker网络
            
            
              bash
              
              
            
          
          docker network create --driver bridge --subnet=20.0.0.0/24 myapp-net
        部署MySQL
            
            
              bash
              
              
            
          
          docker run --name mysql --network myapp-net -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker cp ./carbon.sql mysql:/opt                                                              
#Successfully copied 4.1kB to mysql:/opt
docker exec -it mysql /bin/bash                                                                
 cd /opt
 mysql -uroot -p <carbon.sql 
#Enter password: 
        
部署后端Java spring
修改jdbc为20.0.0.2:3306后。
            
            
              bash
              
              
            
          
          docker run --name java-app --network myapp-net -d -v $(pwd):/opt -p 8090:8090 \
  centos \
  bash -c "rpm -ivh /opt/jdk-8u371-linux-x64.rpm && java -jar /opt/carbon.jar"
        
部署前端nginx
nginx.conf:
            
            
              bash
              
              
            
          
          user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    upstream backend {
        server java-app:8090;
    }
    server {
        listen       80;
        server_name  localhost;
        # Serve static files from /bm directory
        location / {
            root /usr/share/nginx/html/bm;
            index index.html index.htm;
        }
        # Proxy requests to the Java application
        location /bm {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}
        
            
            
              bash
              
              
            
          
          docker run --name nginx --network myapp-net -p 80:80  -v /opt/carbon/bm:/usr/share/nginx/html -d nginx 
docker cp /opt/carbon/nginx.conf nginx:/etc/nginx   
docker restart nginx
        访问192.168.99.130
