【docker】docker数据卷与网络部署服务

Docker 网络模式

  1. 选择网络模式
    • 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 ...
  2. 执行网络操作
    • 查看现有网络
      • 操作: 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

相关推荐
鳄鱼皮坡11 分钟前
仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器
运维·服务器
菜包eo13 分钟前
二维码驱动的独立站视频集成方案
网络·python·音视频
即将头秃的程序媛23 分钟前
centos 7.9安装tomcat,并实现开机自启
linux·运维·centos
yzx99101331 分钟前
关于网络协议
网络·人工智能·python·网络协议
fangeqin32 分钟前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
zsq1 小时前
【网络与系统安全】域类实施模型DTE
网络·安全·系统安全
小Mie不吃饭1 小时前
FastAPI 小白教程:从入门级到实战(源码教程)
运维·服务器
fo安方2 小时前
运维的利器–监控–zabbix–第三步:配置zabbix–中间件–Tomcat–步骤+验证
运维·中间件·zabbix
爱奥尼欧2 小时前
【Linux 系统】基础IO——Linux中对文件的理解
linux·服务器·microsoft
超喜欢下雨天2 小时前
服务器安装 ros2时遇到底层库依赖冲突的问题
linux·运维·服务器·ros2