Docker使用docker-compose.yml文件(六)
前言
前面介绍的都是单个容器部署,对于多容器部署也是一个个部署。这里Docker开发了docker-compose.yml。它是一个YAML格式的文件,用于定义和运行多容器的Docker应用程序。它允许你使用单个命令来启动、停止和重启应用程序,以及管理应用程序依赖的服务。
一、配置yml文件
version: '3' # 版本不同,件格式特性不一样 services: # 应用程序中需要运行的服务 web: # 服务名称
restart: always #开机重启策略 build: . # 构建当前目录下的Dockerfile文件 ports: # 端口映射 - "5000:5000" environment: # 环境变量 - DEBUG=1 volumes: # 当前目录挂载到容器/app目录 - .:/app networks: # 指定网络 - front-tier depends_on: # web服务依赖于db服务,启动顺序是db->web - db db: # 服务名称 image: postgres # postgres数据库镜像
restart: always environment: # 这里设置postgres数据库账号密码 - POSTGRES_USER=myuser - POSTGRES_PASSWORD=mypassword volumes: # 挂载db-data到容器data目录下 - db-data:/var/lib/postgresql/data networks: # 指定网络 - back-tier volumes: # 创建卷 db-data: networks: # 创建网络 front-tier: back-tier:
二、执行docker-compose.yml文件
以JavaWeb项目为例,配置dockerfile文件,里面是web项目。再以mysql数据库为例作为依赖项。
# 使用包含Java的官方基础镜像 FROM openjdk:8u131-jdk-alpine # 设置时区 ENV TZ=Asia/Shanghai # 设置工作目录 WORKDIR /jar # 将JAR文件从当前目录复制到容器的/jar目录下 COPY ./web/target/web-0.0.1.jar ./web.jar # 暴露应用程序运行的端口,假设你的应用监听在8085端口 EXPOSE 8085 # 启动JAR包 ENTRYPOINT ["java", "-jar", "web.jar"]
配置docker-compose.yml文件
version: '3' services: web: build: . ports: - "8085:8085" networks: - web-db-tier depends_on: - db db: image: mysql:8 environment: - MYSQL_ROOT_PASSWORD=123456 volumes: - db-data:/var/lib/mysql networks: - web-db-tier volumes: db-data: networks: web-db-tier:
查看是否创建成功,然后查看network、volume等信息是否符合。
~]# docker compose ls # 查看compose是否成功执行 ~]# docker compose ps # 查看两个容器在运行 ~]# docker volume ls # 查看卷是否创建 ~]# docker network ls # 查看网络是否创建 ~]# docker inspect baby-db-1 # 查看容器信息,是否volume、network是否配置成功
基本上信息都对上了,后面就是基本操作命令。这里的db是yml配置名,而不是控制台中的baby-db-1名称,若要使用控制台显示的名称,需要使用docker stop等命令。
~]# docker compose down#停止并删除yml包含容器 ~]# docker compose start db# 开始服务 ~]# docker compose stop db# 停止服务或者 docker stop baby-db-1 ~]# docker compose restart db# 重启服务
若使用docker compose down则会删除yml配置文件内的所有容器,并删除network网络,不过会保留volume卷。
以上就是docker-compose.yml文件的基本使用,介绍了多容器统一管理配置,以及依赖顺序创建启动。
如果需要更加深入了解特殊配置,可以去官网查看最新版本的配置,这里使用version:3版本,后续官方可能会更新版本,并提供其他新特征。