Docker(二)Docker-Compose、网络、数据卷

@[toc]
前言

  • Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
    一、镜像编排与容器编排
  • 概念
    • 镜像编排
      在docker中,通过使用docker-compose指令执行一个YAML文件,将文件中所定义的多个镜像依次启动,这就是镜像编排。
      也可以理解为批量操作镜像。
    • 容器编排
      在docker中,通过使用docker-compose指令执行一个YAML文件,将文件中所定义的多个容器依次启动,这就是容器编排。
      也可以理解为批量操作容器。
    二、Docker-Compose
  • 实现步骤
    • 安装docker-compose
      1.1、下载地址 sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-(uname -s)-(uname -m)" -o /usr/local/bin/docker-compose1.2、增加Compose权限 sudo chmod +x /usr/local/bin/docker-compose1.3、创建compose快捷方式 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose1.4、测试安装是否成功 docker-compose --version

    • 创建docker-compose.yml
      touch docker-compose.yml

    • 【Docker(二)Docker-Compose、网络、数据卷】配置docker-compose.yml
      • 核心配置
        version: '3'#指定docker-compose版本号 services #配置容器[容器列表] nginx: #配置容器标识[唯一的编号] image: #镜像名称 ports: #配置容器映的端口号[数组] - - networks: #配置容器网络[数组] - - networks #网络指定配置 nginx-work: #配置网络名称 external: true #网络自定义 volumes #数据挂载 extensions 扩展配置

      • 批量生成镜像配置
        version: '3' services: nginx: build: [Dockerfile所在的文件夹路径] ports: - 8001:80 DemoWebApi: build: [Dockerfile所在的文件夹路径] ports: - 5001:80 - 5002:443

      • 批量生成容器配置
        netcore例子镜像和nginx镜像编写的docker-compose.yml文件
        version: '3' services: nginx: image: nginx ports: - 8001:80 DemoWebApi: image: DemoWebApi ports: - 5001:80 - 5002:443

    • 运行docker-compose.yml
      #在当前文件夹下执行命令,默认加载docker-compose.yml 文件[-d 后台运行] #该命令可以批量构建镜像也可以批量运行容器 #使用该命令默认自动创建网络 docker-compose up -d

  • docker-compose基础命令
    • 在当前docker-compose.yml文件夹下执行命令
      • 批量删除容器
        docker-compose down

      • 运行批量看日志
        docker-compose--verbose up

      • 查看容器运行后的日志
        docker-composelogs

    • 不在当前docker-compose.yml文件下,执行命令
      docker-compose-f[docker-compose.yml路径] [命令]

    • 生成多个容器
      #使用前要将 docker-compose.yml 文件中的对外抛出的端口去掉,代码如下: version: '3' services: nginx: build: [Dockerfile 文件路径] DemoWebApi: image: DemoWebApi ports: - 5001:80 - 5002:443 #执行docker-compose命令 docker-compose scale -t配置容器标识[唯一的编号] = 数量 #例如: docker-compose scale -tnginx = 3

    • 查看容器的当前信息
      docker inspect 容器的ID名称

    • 其他命令
      build构建或重新构建容器服务 bundle从compose文件生成一个Docker包 config验证并查看compose文件 create创建容器服务 down停止并删除容器、网络、映像和卷 events从容器接收实时事件 exec在正在运行的容器中执行命令 help帮助命令 images镜像列表 kill杀死容器 logs查看容器的日志 pause暂停容器服务 port输出端口号 ps容器列表 pull下载容器服务镜像 push上传容器服务镜像 restart容器服务重新开始 rm删除停止的容器 run运行一次性命令 scale设置服务的容器数量 start开始容器服务 stop停止容器服务 top显示正在运行的进程 unpause暂停容器服务 up创建并启动容器 version显示Docker-Compose版本信息

  • 使用docker-compose编排的优点
    • 优点
      • 提升镜像生成效率
      • 提升容器生成效率
      • 提升部署项目的效率
        三、Docker network
  • 查看容器详细信息
    docker inspect 容器的ID或容器的名称

  • 基础命令
    • 查看网段
      docker network ls

    • 查看网段
      docker network inspect 网络ID

    • 新建网段
      docker network create -d bridge 网络名称

  • docker-compose.yml配置网络
    • 新建一个项目微服务网络
      docker network create -d bridge DemoWebApi-Service

    • docker-compose.yml文件
      version: '3' services: nginx: image: nginx ports: - 8001:80 networks: - DemoWebApi-Service#网络名称 DemoWebApi: image: DemoWebApi ports: - 5001:80 - 5002:443 networks: - DemoWebApi-Service #网络名称 networks: DemoWebApi-Service: external: true #使用docker-compose批量运行镜像为容器,默认会新建网络,设置为true是不用默认新建网络,使用自定义网络

  • 容器之间是如何通信的
    如图:
    Docker(二)Docker-Compose、网络、数据卷
    文章图片

    当浏览器发起请求到主机[宿主机Linux],再将请求给虚拟主机的网关[Geteway],然后网关再将请求负载均衡转到IpAddress上,如图:
    Docker(二)Docker-Compose、网络、数据卷
    文章图片

四、Docker Volume 数据挂载
  • 数据挂载的概念
    数据挂载就是主机的文件挂载到容器中。
  • 数据挂载配置
    version: '3' services: nginx: image: nginx ports: - 8001:80 networks: - DemoWebApi-Service volumes: - /project/nginx.conf:/etc/nginx/nginx.conf#数据挂在路径 DemoWebApi: image: DemoWebApi ports: - 5001:80 - 5002:443 networks: - DemoWebApi-Service networks: DemoWebApi-Service: external: true

  • 实例项目部署
    • 条件 【已经有demo项目的镜像和nginx镜像】
      • 新建网络
      • 新建docker-compose.yml文件
      • 新建nginx配置文件
    • 步骤
      • 新建网络
        docker network create -d bridge DemoWebApi-Service

      • 新建docker-compose.yml文件
        version: '3' services: Demonginx: image: nginx ports: - 8001:80 networks: - DemoWebApi-Service volumes: - /project/nginx.conf:/etc/nginx/nginx.conf demo: image: demo ports: - 5001:80 - 5002:443 networks: - DemoWebApi-Service networks: DemoWebApi-Service: external: true

      • 新建nginx配置文件
        • 核心配置
          ........ location / { proxy_pass http://demo:80; } ......

        • 详细配置
          #usernobody; worker_processes1; #error_loglogs/error.log; #error_loglogs/error.lognotice; #error_loglogs/error.loginfo; #pidlogs/nginx.pid; events { worker_connections1024; }http { includemime.types; default_typeapplication/octet-stream; #log_formatmain'$remote_addr - $remote_user [$time_local] "$request" ' #'$status $body_bytes_sent "$http_referer" ' #'"$http_user_agent" "$http_x_forwarded_for"'; #access_loglogs/access.logmain; sendfileon; #tcp_nopushon; #keepalive_timeout0; keepalive_timeout65; #gzipon; server { listen80; server_namelocalhost; #charset koi8-r; #access_loglogs/host.access.logmain; location / { proxy_pass http://demo:80; }#error_page404/404.html; # redirect server error pages to the static page /50x.html # error_page500 502 503 504/50x.html; location = /50x.html { roothtml; }# proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { #proxy_passhttp://127.0.0.1; #}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { #roothtml; #fastcgi_pass127.0.0.1:9000; #fastcgi_indexindex.php; #fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name; #includefastcgi_params; #}# deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { #denyall; #} }# another virtual host using mix of IP-, name-, and port-based configuration # #server { #listen8000; #listensomename:8080; #server_namesomenamealiasanother.alias; #location / { #roothtml; #indexindex.html index.htm; #} #}# HTTPS server # #server { #listen443 ssl; #server_namelocalhost; #ssl_certificatecert.pem; #ssl_certificate_keycert.key; #ssl_session_cacheshared:SSL:1m; #ssl_session_timeout5m; #ssl_ciphersHIGH:!aNULL:!MD5; #ssl_prefer_server_cipherson; #location / { #roothtml; #indexindex.html index.htm; #} #}}

      • 运行结果如下
        #在docker-compose.yml文件当前目录下执行 docker-compose up -d

        运行结果如图:
        Docker(二)Docker-Compose、网络、数据卷
        文章图片

        Docker(二)Docker-Compose、网络、数据卷
        文章图片

        Docker(二)Docker-Compose、网络、数据卷
        文章图片

    推荐阅读