@[toc]
前言
- Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
一、镜像编排与容器编排 - 概念
- 镜像编排
在docker中,通过使用docker-compose指令执行一个YAML文件,将文件中所定义的多个镜像依次启动,这就是镜像编排。
也可以理解为批量操作镜像。 - 容器编排
在docker中,通过使用docker-compose指令执行一个YAML文件,将文件中所定义的多个容器依次启动,这就是容器编排。
也可以理解为批量操作容器。
- 镜像编排
- 实现步骤
- 安装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基础命令
- 在当前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.yml文件夹下执行命令
- 使用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是不用默认新建网络,使用自定义网络
- 新建一个项目微服务网络
- 容器之间是如何通信的
如图:
文章图片
当浏览器发起请求到主机[宿主机Linux],再将请求给虚拟主机的网关[Geteway],然后网关再将请求负载均衡转到IpAddress上,如图:
文章图片
- 数据挂载的概念
数据挂载就是主机的文件挂载到容器中。 - 数据挂载配置
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
运行结果如图:
文章图片
文章图片
文章图片
- 新建网络
- 条件 【已经有demo项目的镜像和nginx镜像】