title: Docker学习笔记五:docker-compose
tags:
- wechat
comments: true
categories: - wechat
date: 2022-12-06 16:19:31
Docker学习笔记五:docker-compose
一、介绍
问题:docker官方建议一个容器内只运行一个服务,那么若我们需要同时部署多个服务,是也要为每个服务写一个Dockerfile然后在构建镜像运行容器吗?这样也太麻烦了吧,所有Docker官方提供了docker-compose多服务部署工具。
docker-compose是Docker公司推出的一个工具软件,可以管理多个Docker容器组成的一个应用。只需要定义一个YAML格式的配置文件docker-compose.yml,在该文件中配置好多个容器之间的调用关系,然后只需要一个命令就能同时启动或关闭这些容器。
docker-compose简化的多容器启动过程,简单来说,一个项目部署会设计到redis服务,mysql服务等,且只有这些服务先启动时,项目才能正常启动,compose就是简化这一流程,可以同时且按照指定顺序运行容器。所有这又有一个前提,所有服务的镜像已存在(编写Dockerfile,构建镜像这一步骤无法省略)
官方地址:https://docs.docker.com/compose/install/other/
# 安装
curl -SL https://github.com/docker/compose/releases/download/v2.14.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
# 卸载
sudo rm /usr/local/bin/docker-compose
二、使用
2.1、相关概念
-
文件必须是 docker-compose.yml
-
service - 服务
就是一个个应用容器实例。
-
project - 工程
有一组关联的应用容器组成的一个完整的业务单元
2.2、常用命令
docker-compose -h
:查看帮助docker-compose up
:启动所有的docker-compose服务docker-compose up -d
:启动所有docker-compose服务并后台运行docker-compose down
:停止并删除容器、网络、卷、镜像。docker-compose exec yml里面的服务id
:进入容器实例内部docker-compose ps
:展示当前docker-compose编排过的运行的所有容器docker-compose top
:显示容器进程docker-compose logs yml里面的服务id
: 查看容器输出日志docker-compose config
:检查配置docker-compose config -q
:检查配置,有问题才有输出docker-compose stop
:停止服务docker-compose restart
:重启服务docker-compose start
:启动服务
2.3、docker-compose.yml
version: "3"
services:
microService:
image: zzyy_docker:1.6
container_name: ms01
ports:
- "6001:6001"
volumes:
- /app/microService:/data
networks:
- atguigu_net
depends_on:
- redis
- mysql
redis:
image: redis:6.0.8
ports:
- "6379:6379"
volumes:
- /app/redis/redis.conf:/etc/redis/redis.conf
- /app/redis/data:/data
networks:
- atguigu_net
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'db2021'
MYSQL_USER: 'zzyy'
MYSQL_PASSWORD: 'zzyy123'
ports:
- "3306:3306"
volumes:
- /app/mysql/db:/var/lib/mysql
- /app/mysql/conf/my.cnf:/etc/my.cnf
- /app/mysql/init:/docker-entrypoint-initdb.d
networks:
- atguigu_net
command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
networks:
atguigu_net: