前言:最近让我部署一个项目,该项目是多个服务的,在启动多个容器的时候是比较麻烦的。于是就想到了docker-compose 容器编排。
结构:
目录:
docker 容器编排。当需要启动多容器的时候,需要docker-compose进行编排管理
结构:
流程:
1、下载
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
2、添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
3、
docker-compose --version
docker-compose 文件是一个定义服务,网络,数据卷的yaml
文件,默认文件名为 docker-compose.yml
。
组成:
version
services
images
ports
volumes
container_name
command
build
depends_on
networks
sysctls
ulimits
environment
env_file
案例:
version: "3.7"
services:
saas_group:
build:
context: ../saas-group
dockerfile: ../saas-group/Dockerfile
container_name: saas_group
restart: "no"
external_links:
- nacos_server:nacoshost
- mysql_db:mysqlhost
- redis_db:redishost
volumes:
- /private/docker/application-logs:/mnt/logs
environment:
- nacoshost=xx.xx.xx.xx
- mysqlhost=xx.xx.xx.xx
- redishost=xx.xx.xx.xx
- NACOS_CONFIG_GROUP=develop_group
- DUBBO_IP_TO_REGISTRY=xx.xx.xx.xx
- NACOS_IP_TO_REGISTRY=xx.xx.xx.xx
ports:
- 20880-20085:20880-20885
- 6000-6005:6000-6005
networks:
- qa-overlay
application_group:
build:
context: ../application-group
dockerfile: ./Dockerfile
container_name: application_group
restart: "no"
external_links:
- nacos_server:nacoshost
- mysql_db:mysqlhost
- redis_db:redishost
volumes:
- /private/docker/application-logs:/mnt/logs
environment:
- nacoshost=xx.xx.xx.xx
- mysqlhost=xx.xx.xx.xx
- redishost=xx.xx.xx.xx
- NACOS_CONFIG_GROUP=develop_group
- DUBBO_IP_TO_REGISTRY=xx.xx.xx.xx
- NACOS_IP_TO_REGISTRY=xx.xx.xx.xx
ports:
- 30880-30889:30880-30889
- 9000-9005:9000-9005
networks:
- qa-overlay
global_gateway:
build:
context: middleware-group/global-gateway
dockerfile: ./Dockerfile
container_name: global_gateway
restart: "no"
external_links:
- nacos_server:nacoshost
- mysql_db:mysqlhost
- redis_db:redishost
ports:
- 8080:8080
volumes:
- /private/docker/application-logs:/mnt/logs
environment:
- nacoshost=xx.xx.xx.xx
- mysqlhost=xx.xx.xx.xx
- redishost=xx.xx.xx.xx
- NACOS_CONFIG_GROUP=develop_group
- DUBBO_IP_TO_REGISTRY=xx.xx.xx.xx
- NACOS_IP_TO_REGISTRY=xx.xx.xx.xx
networks:
- qa-overlay
deploy:
resources:
limits:
cpus: '0.50'
memory: 1024M
networks:
qa-overlay:
external: true
1、version
3.0
-4.0
都行,可以在官网查对应的关系:Compose file | Docker Documentation2、services
service
代表一个容器,servieces
下可以有多个容器3、image
compose
会尝试拉取这个镜像。image: centos7.7
image: orchardup/postgresql
image: a4bc65fd
4、ports
宿主端口:容器端口host:container
格式;或者仅仅指定容器的端口,宿主机将会随机选择端口。
ports:
- "3000"
- "49100:22"
5、volumes
host:container
,并且可以设置访问模式host:container:ro
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
version: "3"
services:
my_src:
image: mysql:8.0
# 数据卷声明
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data: # 声明的数据卷
6、container_name
项目名称_服务名称_序号
这样的格式version: "3"
services:
docker-service-name: # 容器服务名
container_name: docker-web-container # 容器名称
7、command
command: echo "hello world"
8、build
Dockerfile
所在文件夹路径(可以是绝对路径,或者是相对 docker-compose.yaml 文件的路径),compose
将会利用它自动构建这个镜像,然后使用这个镜像version: '3'
services:
webapp:
build: ./dir
context
指令指定 Dockerfile
所在文件夹路径dockerfile
指令指定 Dockerfile
文件名,使用 arg
指令指定构建镜像时的变量version: '3'
services:
webapp:
build:
context: /opt/docker
dockerfile: Dockerfile-alternate
args:
buildno: 1
container_name: webapp
ports:
- "8080:8080"
9、depends_on
db
,redis
,web
version: '3'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
10,networks
version: "3"
services:
some-service:
networks:
- some-network
- other-network
networks:
some-network:
other-network:
11、sysctls
sysctls:
net.core.somaxconn: 1024
net.ipv4.tcp_syncookies: 0
sysctls:
- net.core.somaxconn=1024
- net.ipv4.tcp_syncookies=0
12、ulimits
ulimits
限制值例如:指定最大进程数为 65535 ,指定文件句柄数为 20000(软限制,应用可以随时修改,不能超过应限制)和 40000(系统硬限制,只能用户root 提高)
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
13、environment
environment:
- MYSQL_ROOT_PASSWORD=root
14、env_file
docker-compose -f FILE
方式来指令 compose 模板文件,则 env_file
中变量的路径会基于模板文件的路径env_file
的环境变量名称 与 environment
指令冲突,以 environment
为准env_file: .env
env_file:
- ./apps/web.env
- /opt/secrets.env
支持 #
开头的注释,同dockerfile文件一致。
注意:
对于docker-compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。
如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令的影响。
基本命令格式:
docker-compose [-f=...] [options] [COMMAND] [ARGS...]
结构:
1、up
docker-compose up [options] [SERVICE…]
docker-compose up
启动并进入容器;如果当前容器正在运行,将会重新加载 yml 文件,重新创建。ctrl c
退出容器docker-compose up -d
后台启动2、dokcer-compose down
up
命令所启动的容器,并移除网络3、docker-compose ps [options] [service…]
-q
只打印容器的id4、docker-compose log 容器id
实战列表:
docker-compose tomcat
yml文件:
version: "3.0"
services:
tomcat-docker: # 唯一服务名
image: tomcat:8.0-jre8 # 创建当前这个容器的镜像
ports:
- 8094:8080 # 映射端口
启动:
#启动并进入容器
docker-compose up
#启动容器后台运行
docker-compose up -d
访问:
ip地址:8094
相当于简单版k8s
持续集成/部署
jenkins 流水线