docker-compose(Docker服务编排)
docker 服务编排
docker 服务编排也叫docker compose,它的出现是应来解决使用docker部署大型应用的业务场景的问题。通常在生产环境中,使用docker部署一个应用需要使用多个容器,例如部署前端、后端、依赖服务、数据库等。如果每个容器都需要手工使用shell来启动则效率过于低下,所以在这样的场景中,我们可以采用docker compose来进行docker容器的编排工作。
docker-compose.yml文件的编写
在docker-compose.yml文件中可以编写相关的配置属性,用来管理compose的构建过程,主要的属性包括:
1)version 代表compose文件格式版本,按照官网的实例,建议目前采用‘3.9’版本
2)services 该属性是compose文件中的核心属性,在该属性之下,可以配置compose启动的各种服务。主要是需要compose启动的各种容器信息。也是compose文件中主要的开发内容。
常用属性:
属性名称 说明
image 当前服务使用什么镜像文件
ports 当前容器需要映射的端口信息 - ”8080:80“
enviroments 当前镜像需要传递的参数
volumes 当前镜像的挂在点
tty:true 代表使用-it模式启动服务
build 指定dockerfile所在的路径,当使用docker compose编排一个容器,而且该容器需要构建的时候需要使用该参数
container_name 指定编排容器的名称
restart:always 在docker服务重启后,该容器是否自动重启
depends_on: 服务名 设定服务依赖关系,通过该配置可以决定服务的启动顺序
env_file 指定配置文件
context 指定上下文
dockerfile 指定需要使用的dockerfile文件
docker-compose命令
docker-compose up命令来启动一个容器编排,接下来,我们详细了解一下,在docker-compose中常用的命令以及参数使用
docker-compose命令
常用参数:
-f 默认docker-compose会在当前文件夹下询招Dockercompose.yml文件,如果需要自定义文件名,可以使用-f 文件名 形式来指定
-p 指定项目名称 指定项目后,通过compoose创建的所有容器都会自动添加项目名称前缀
-v 查看当前docker-compose的版本信息
docker-compose 环境变量
docker compose 默认的环境变量为.env,在其中我们可以使用对应的键值对模式给compose传递值 --env-file 参数可以动态制动compose需要使用的配置文件位置
docker-compose up 启动一个容器编排
常用参数: `
参数名称 说明
-d 后台运行
–force-recreate 强制更新已经存在的容器
–remove-orphans 删除在compose文件中没有定义的容器,通常使用在修改了compose文件的场景下使用服务名 单独启动compose中的某一个服务,如果服务存在依赖,则被依赖的服务也会被启动
docker-compose down 删除对应的容器,网络服务
docker-compose stop 停止compose对应的所有服务
docker-compose start 启动所有的服务容器
docker-compose ps 查看与当前compse相关的服务容器
-q 只列出id值,其他值不显示
docker-compose logs 读取日志信息
docker-compose pull 拉取服务对应的镜像
docker-compose build 构建compose中的所有镜像、
docker-compose images 查看所有的镜像信息
docker-compose config 查看配置文件信息
docker-compose restart 重启服务
docker-compose exec 服务名 进行指定服务的容器
docker-compose rm 删除所有已经停止的服务容器
以上命令涉及到某个服务的时候均可以通过:命令:服务名对相应的服务进行操作 看左面
docker-compose常用命令 |
获得一个命令的帮助 docker-compose 命令 --help 构建并启动所有容器,如果镜像存在就重新构建 docker-compose up -d --build 启动所有服务 docker-compose up -d 构建启动nignx容器 docker-compose up -d nginx -f 指定使用的Compose配置文件启动,默认为docker-compose.yml,可以多次指定。 docker-compose -f docker-compose.yml up -d 运行一个服务,并在服务上执行一个命令 docker-compose run 容器id或容器名 ip addr 登录到nginx容器中 docker-compose exec nginx bash 此命令将会停止 up 命令所启动的容器,并移除网络 docker-compose down 列出项目中运行的所有容器 docker-compose ps 列出项目中运行及未运行的所有容器 docker-compose ps -a 列出所有运行的服务容器 docker-compose ls 列出所有服务容器(包括未运行的容器) docker-compose ls -a 重新启动nginx容器 docker-compose restart nginx 构建镜像 docker-compose build nginx 不带缓存的构建 docker-compose build --no-cache nginx 查看各个服务容器内运行的进程 docker-compose top 查看nginx的实时日志 docker-compose logs -f nginx 列出 Compose 文件包含的镜像 docker-compose images 验证文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。 docker-compose config 以json的形式输出nginx的docker日志 docker-compose events --json nginx 暂停nignx容器 docker-compose pause nginx 恢复ningx容器 docker-compose unpause nginx 删除容器(删除前必须关闭容器,执行stop) docker-compose rm nginx 强制删除容器(不必先关闭容器) docker-compose rm -f nginx 停止nignx容器 docker-compose stop nginx 启动nignx容器 docker-compose start nginx 重启项目中的nignx容器 docker-compose restart nginx 下载依赖的镜像 docker-compose pull 推送服务依的镜像 docker-compose push 设置指定服务运行的容器个数。通过service=num的参数来设置数量 docker-compose scale web=3 db=2 查看版本信息 docker-compose version
docker compose 网络管理
1. 默认场景下,使用docker compose编排服务,会自动创建对应的网络。可以使用docker network ls
2. 以及docker inspect 网络id 进行相关的查询。
可以在compose文件中,使用networks
定义一个网络,并在服务中使用networks属性加入一个自定义网络。这时候有三种结果,如果所有的服务都加入到了自定义网络,则docker,会创建自定义网络,并将所有的服务容器添加到对应的网络中,如果没有任何服务声明加入自定义网络,则docker会创建默认网络,然后将容器添加到默认网络,而不会创建自定义网络,如果有的服务声明添加到自定义网络,而有的服务没有声明,则docker会创建两个网络,一个是自定义网络,而另一个是默认网络,并将对应的容器添加到对应的网络中。
3. 使用固定ip策略
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | version: '3.3' services: cslcp_web: image: "cslcp_web_image:v01" ports: - "19090:8080" build: context: "../web/" dockerfile: "Dockerfile" networks: - "cslcp_net" cslcp_mysql: image: "mysql" networks: cslcp_net: ipv4_address: 192.168.13.100 ports: - "13306:3306" environment: MYSQL_ROOT_PASSWORD: 'root' cslcp_centos: container_name: 'test_centos' image: "centos" tty: true networks: cslcp_net: ipv4_address: 192.168.13.11 networks: cslcp_net: ipam: config: - subnet: "192.168.13.0/24" gateway: "192.168.13.1" |
- 使用服务策略
当compose启动成功后可以直接使用ping 访问服务名 - 使用网络别名策略
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | networks: cslcp_net: ipam: config: - gateway: 192.168.13.1 subnet: 192.168.13.0/24 services: cslcp_centos: container_name: test_centos depends_on: cslcp_web: condition: service_started image: centos links: - cslcp_web:cw networks: cslcp_net: ipv4_address: 192.168.13.11 tty: true cslcp_mysql: environment: MYSQL_ROOT_PASSWORD: root image: mysql networks: cslcp_net: ipv4_address: 192.168.13.100 ports: - published: 13306 target: 33064 cslcp_web: build: context: /root/docker/dockercompose/cslcp/web dockerfile: Dockerfile image: cslcp_web_image:v01 networks: cslcp_net: null ports: - published: 19090 target: 8080 version: '3.3' |
- 使用container 策略
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | version: '3.3' services: cslcp_web: image: "cslcp_web_image:v01" build: context: "../web/" dockerfile: "Dockerfile" depends_on: - "cslcp_centos" network_mode: "service:cslcp_centos" cslcp_mysql: image: "mysql" environment: MYSQL_ROOT_PASSWORD: 'root' depends_on: - "cslcp_centos" network_mode: "service:cslcp_centos" cslcp_centos: container_name: 'test_centos' image: "centos" tty: true ports: - "17070:8080" - "13306:3306" networks: cslcp_net: ipv4_address: 192.168.13.11 networks: cslcp_net: ipam: config: - subnet: "192.168.13.0/24" gateway: "192.168.13.1" |
在解决方案目录下添加docker-compose.yml文件:
添加方式:
1、手动添加文件
2、通过vs自动添加:选中需要添加项目右键,如图
鸣谢:
https://blog.csdn.net/ayhg1/article/details/118066576
https://www.cnblogs.com/cwsheng/p/13944281.html
本文来自博客园,作者:{春光牛牛,yak},转载请注明原文链接:https://www.cnblogs.com/yakniu/p/16314335.html
欢迎各位大佬们评论指正
QQ讨论群:610129902
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?