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策略
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 访问服务名 - 使用网络别名策略
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 策略
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


浙公网安备 33010602011771号