当前位置: 首页 > Linux

Docker(二)Docker-Compose,Network,DataVolumes

时间:2023-04-06 06:51:28 Linux

@[toc]前言Compose是一个定义和运行多容器Docker应用的工具。通过Compose,您可以使用YML文件来配置您的应用程序需要的所有服务。然后,使用单个命令,可以从YML文件配置创建和启动所有服务。一、镜像编排和容器编排的概念编排镜像是在docker中,通过docker-compose命令执行一个YAML文件,依次启动文件中定义的多个镜像,这就是镜像编排。也可以理解为批量操作镜像。容器编排在docker中。通过docker-compose命令执行一个YAML文件,依次启动文件中定义的多个容器。这就是容器编排。也可以理解为批量操作容器。2.Docker-Compose实现步骤安装docker-compose1.1,下载地址sudocurl-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权限sudochmod+x/usr/local/bin/docker-compose1.3,创建compose快捷方式sudoln-s/usr/local/bin/docker-compose/usr/bin/docker-compose1.4,测试是否安装成功docker-compose--versioncreatedocker-compose.ymltouchdocker-compose.ymlconfigurationdocker-compose.yml核心配置版本:'3'#指定docker-compose版本号services#配置容器[containerlist]nginx:#配置容器ID[唯一编号]image:#镜像名称ports:#配置容器镜像的端口号[array]--networks:#Configurecontainernetwork[array]--networks#Network指定配置nginx-work:#Configurenetworknameexternal:true#Networkcustomvolumes#DatamountextensionsExtendedconfigurationbatchgenerationmirroringconfigurationversion:'3'services:nginx:build:[Dockerfile所在文件夹路径]ports:-8001:80DemoWebApi:build:[Dockerfile所在文件夹路径]ports:-5001:80-5002:443批量生成容器配置netcore示例镜像和ndocker-compose.ymlfileversion:'3'services:nginx:image:nginxports:-8001:80DemoWebApi:image:DemoWebApiports:-5001:80-5002:443rundocker-compose.yml#执行里面的命令当前文件夹,默认加载docker-compose.yml文件[-d后台运行]#该命令可以批量构建镜像或者批量运行容器#使用该命令默认自动创建网络docker-composeup-ddocker-compose基本命令执行当前docker-compose.yml文件夹下的命令,批量删除容器docker-composedownrunbatches查看日志不在当前docker-compose.yml文件下,执行命令docker-compose-f[docker-compose.ymlpath][command]生成多个容器#使用前,去掉docker-compose中对外抛出的端口.yml文件,代码如下:version:'3'services:nginx:build:[Dockerfile文件路径]DemoWebApi:image:DemoWebApiports:-5001:80-5002:443#执行docker-compose命令docker-composescale-tConfigurecontainerID[uniquenumber]=Quantity#例如:docker-composescale-tnginx=3查看容器当前信息dockerinspect容器ID名称othercommandsbuild构建或重建容器服务包来自公司mpose文件生成一个Docker包配置验证和查看组合文件创建创建容器服务关闭停止和删除容器、网络、图像和卷事件从容器接收实时事件执行执行命令帮助运行容器帮助命令图像图像列表killkillDeadcontainerlogs查看容器日志pausePause容器服务端口输出端口号pscontainerlistpull下载容器服务镜像push上传容器服务镜像restart容器服务重启rmdeletestoppedcontainerrunrunone-timecommandscale设置服务容器数量start启动containerservicestop停止容器服务top显示正在运行的进程unpause暂停容器服务up创建并启动容器版本显示Docker-Compose版本信息使用docker-compose编排的优势提高镜像生成效率提高容器效率generation提高部署项目效率3.dockernetwork查看容器详情dockerinspect容器ID或容器名称查看网段的基本命令dockernetworkls查看网段dockernetworkk检查网络ID创建新网段dockernetworkcreate-dbridgenetworknamedocker-compose.ymlconfigurenetwork创建新项目微服务网络dockernetworkcreate-dbridgeDemoWebApi-Servicedocker-compose.yml文件版本:'3'服务:nginx:image:nginxports:-8001:80networks:-DemoWebApi-Service#网络名称DemoWebApi:image:DemoWebApiports:-5001:80-5002:443networks:-DemoWebApi-Service#Networknamenetworks:DemoWebApi-Service:external:true#使用docker-compose将镜像作为容器批量运行。默认情况下,将创建一个新网络。如果设置为true,则默认不需要创建新网络。容器之间如何使用自定义网络进行通信如图所示:当浏览器向主机[目标]HostLinux]发起请求,然后将请求发送到虚拟主机的网关[Geteway],然后gateway负载均衡请求到IpAddress,如图:4.DockerVolumeDataMountdatamount数据mount的概念是宿主机mount到容器中的文件datamountconfigurationversion:'3'services:nginx:image:nginxports:-8001:80networks:-DemoWebApi-Servicevolumes:-/project/nginx.conf:/etc/nginx/nginx.conf#数据挂在PathDemoWebApi:image:DemoWebApiports:-5001:80-5002:443networks:-DemoWebApi-Servicenetworks:DemoWebApi-Service:external:true实例项目的部署条件【已有demo项目的镜像和nginx镜像】创建一个新网络并创建一个docker-compose.yml文件创建一个新的nginx配置文件创建一个新网络的步骤dockernetworkcreate-dbridgeDemoWebApi-Service创建一个新的docker-compose.yml文件版本:'3'服务:Demonginx:图片:nginx端口:-8001:80网络:-DemoWebApi-服务卷:-/project/nginx.conf:/etc/nginx/nginx.conf演示:图片:演示端口:-5001:80-5002:443网络:-DemoWebApi-Servicenetworks:DemoWebApi-Service:external:true新建nginx配置文件核心配置.......location/{proxy_passhttp://demo:80;}......详细配置#usernobody;worker_processes1;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidlogs/nginx.pid;事件{worker_connections1024;}http{包括mime.types;default_type应用程序/八位字节流;#log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'#'$status$body_bytes_sent"$http_referer"'#'"$http_user_agent""$http_x_forwarded_for"';#access_log日志/access.logmain;发送文件;#tcp_nopush上;#keepalive_timeout0;keepalive_timeout65;#gzip上;服务器{听80;服务器名称本地主机;#charsetkoi8-r;#访问日志日志/host.access.log主;位置/{proxy_passhttp://demo:80;}#error_page404/404.html;#将服务器错误页面重定向到静态页面/50x.html#error_page500502503504/50x.html;location=/50x.html{根html;}#将PHP脚本代理到侦听127.0.0.1:80的Apache##location~\.php${#proxy_passhttp://127.0.0.1;#}#将PHP脚本传递给侦听127.0.0.1:9000的FastCGI服务器##location~\.php${#roothtml;#fastcgi_pass127.0.0.1:9000;#fastcgi_indexindex.php;#fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;#包含fastcgi_params;#}#拒绝访问.htaccess文件,如果Apache的文档根#与nginx的一致##location~/\.ht{#全部拒绝;#}}#另一个混合使用基于IP、名称和端口的配置的虚拟主机##server{#listen8000;#听某个名字:8080;#server_namesomename别名another.alias;#位置/{#根html;#索引index.htmlindex.htm;#}#}#HTTPS服务器##server{#listen443ssl;#server_name本地主机;#ssl_certificatecert.pem;#ssl_certificate_key证书.key;#ssl_session_cache共享:SSL:1m;#ssl_session_timeout5m;#ssl_ciphersHIGH:!aNULL:!MD5;#ssl_prefer_server_ciphers开启;#位置/{#根html;#索引index.htmlindex.htm;#}#}}运行结果如下#在docker-compose.yml文件当前目录下执行docker-composeup-d,运行结果如图: