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下载镜像构建容器
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
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中发布电影网站
docker run -d -p 8085:8080 --name tomcat88 -v /opt/html:/usr/local/tomcat/webapps tomcat:8.5
apt-get install mysql-server
mysql_secure_installation
3、部署nginx,nginx读取的nginx.conf文件来自宿主机
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网络
docker network create --driver bridge --subnet=20.0.0.0/24 myapp-net
部署MySQL
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 /optmysql -uroot -p <carbon.sql
#Enter password:
部署后端Java spring
修改jdbc为20.0.0.2:3306后。
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:
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 directorylocation / {root /usr/share/nginx/html/bm;index index.html index.htm;}# Proxy requests to the Java applicationlocation /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;}}
}
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