Docker 基础使用(5)Compose

文章目录

  • [Docker Compose 基础认识](#Docker Compose 基础认识)
  • [Docker Compose 基础语法](#Docker Compose 基础语法)
  • [Docker Compose 基础指令](#Docker Compose 基础指令)
  • [Docker Compose 使用实例](#Docker Compose 使用实例)

Docker 基础使用(0)基础认识
Docker 基础使用(1)使用流程概览
Docker 基础使用(2)镜像与容器
Docker 基础使用(3)存储卷
Docker 基础使用(4)网络管理
Docker 基础使用(5)Compose

Docker Compose 基础认识

Docker Compose 的作用

docker-compose 是 Docker 官方的开源项目,使用 python 编写,实现上调用了Docker 服务的 API 进行容器管理及编排,其官方定义为定义和运行多个 Docker 容器的应用。

简单理解:根据前面的学习,在容器启动时,由于 存储卷、网络管理、容器间的相互依赖等因素, 使得启动指令参数变的复杂,并且通常需要分多段指令执行。并且难以管理,为了解决这个问题,便需要使用 Docker Compose 。Docker Compose 作用即为容器编排。

Docker Compose 服务和项目的概念

服务 ( service ): 一个应用的容器。

项目( project ): 由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。 即一个docker-compose.yml通过组织容器定义项目。

Docker Compose 的具体功能

• 启动,停止和重建服务

• 查看正在运行的服务的状态

• 流式传输运行服务的日志输出

• 在服务上运行一次性命令

Docker Compose 的安装

一般来说安装Docker时会自动安装Docker Compose 。这个时候只需要使用 docker compose version指令来验证docker compose 应用是否存在即可。

Docker Compose 基础语法

首先看一个简单的 yaml docker-compose.yml配置文件。可以直观看到其是如何配置的,之后便是一些字段、语法、指令的说明。(仅作了解,在这个GPT那么发达时间点上,没必要记)

bash 复制代码
version: '3'
services:
  服务名称:
    image: 镜像名称:标签
    container_name: 容器名称
    ports:
      - "主机端口:容器端口"
    volumes:
      - 主机路径:容器路径
    environment:
      - 环境变量=值
    networks:
      - 网络名称

networks:
  网络名称:
    driver: bridge
bash 复制代码
image字段形式
image: redis
image: redis:5
image: 
redis@sha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398
bc4b991aac7
image: library/redis
image: docker.io/library/redis
image: my_private.registry:5000/redis

command字段形式
command: ["bundle", "exec", "thin", "-p", "3000"]
command: bundle exec thin -p 3000
bash 复制代码
environment 字段
environment 添加环境变量
可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,
以确保 YML 解析器不会将其转换为 True 或 False

#map 语法
environment:
 RACK_ENV: development
 SHOW: "true"
 USER_INPUT:
#数组语法
environment:
 - RACK_ENV=development
 - SHOW=true
 - USER_INPUT
bash 复制代码
networks字段:

services:
 frontend:
 image: awesome/webapp
 networks:
 - front-tier
 - back-tier
 monitoring:
 image: awesome/monitoring
 networks:
 - admin
 backend:
 image: awesome/backend
 networks:
 back-tier:
 aliases:
 - database
 admin:
 aliases:
 - mysql
bash 复制代码
docker compose networks:
  front-tier:
    driver: bridge
  back-tier:
    driver: bridge
  admin:
    driver: bridge
这段代码定义了三个网络:front-tier、back-tier 和 admin。
这些网络都是使用默认的 bridge 驱动程序,用于容器间的通信和隔离。

front-tier: 可以用于前端服务的容器通信,例如Web服务器或者其他前端服务。
back-tier: 可以用于后端服务的容器通信,例如数据库或者消息队列等后端服务。
admin: 可以用于管理服务的容器通信,例如管理控制台或者日志收集服务等。
bash 复制代码
volumes 字段

services:
 db:
 image: postgres:latest
 volumes:
 - "/localhost/postgres.sock:/var/run/postgres/postgres.sock"
 - "/localhost/data:/var/lib/postgresql/data"
 
#完整语法
services:
 backend:
 image: awesome/backend
 volumes:
 - type: volume
 #命名卷
 source: db-data
 target: /data
 volume:
 nocopy: true
 #绑定卷
 - type: bind
 source: /var/run/postgres/postgres.sock
 target: /var/run/postgres/postgres.sock

此外还有许多字段,总结一下它们的整体结构

bash 复制代码
version:  表示当前使用的 docker-compose 语法的版本
services1: # 服务,可以存在多个
servicename: # 服务名字,它也是内部 bridge 网络可以使用的 DNS name,
如果不是集群模式相当于 docker run 的时候指定的一个名称,
 #集群(Swarm)模式是多个容器的逻辑抽象
 image: # 必选,镜像的名字
 command: # 可选,如果设置,则会覆盖默认镜像里的 CMD 命令
 environment: # 可选,等价于 docker container run 里的 --env 选项
设置环境变量
 volumes: # 可选,等价于 docker container run 里的 -v 选项 绑定数据
卷
 networks: # 可选,等价于 docker container run 里的 --network 选项
指定网络
 ports: # 可选,等价于 docker container run 里的 -p 选项指定端口映
射
 expose: # 可选,指定容器暴露的端口
 build: #构建目录
 depends_on: #服务依赖配置
 env_file: #环境变量文件
servicename2:
.....

Docker Compose 基础指令

bash 复制代码
- **docker-compose up: 通过此命令启动docker-compose文件定义的所有服务。
- **docker-compose down: 停止并移除由docker-compose启动的所有容器。
- **docker-compose ps: 显示docker-compose启动的所有服务的状态。
- **docker-compose exec: 在正在运行的容器中执行命令。
- **docker-compose build: 构建或重新构建docker-compose文件定义的服务。
- **docker-compose logs: 显示docker-compose服务的日志输出。
- **docker-compose pull: 从docker镜像仓库拉取服务的最新镜像。
- **docker-compose restart: 重启docker-compose服务。
- **docker-compose pause: 暂停docker-compose服务。
- **docker-compose unpause: 取消暂停docker-compose服务。

对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。 可以使用常用的选项如-f, --file 指定使用的 Compose 模板文件。(默认为 docker-compose.yml文件) 还可以使用-p, --project-name 指定项目名称。(默认将使用所在目录名称作为项目名)

Docker Compose 使用实例

(演示一个Docker Compose完整且简易的使用流程,注意docker-compose.yml依靠缩进确定字段范围,类似python)

bash 复制代码
完整指令 
1. 创建并进入docker-compose.yml目录
mkdir testcompose 
cd ./testcompose 

2. 利用vim创建并编辑docker-compose.yml文件  
# 进入文件
vim docker-compose.yml 
# 编辑内容
version: "3.8"
services:
  web:
    image: nginx:1.24.0
    environment:
      TEST: 1
    ports:
      - 8979:80
    networks:
      - mytestnet
    volumes:
      - ./mynginxhome:/usr/share/nginx/html
    depends_on:
      - mysql
      - redis
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: "wsk"
    networks:
      - mytestnet
    volumes:
      - /data/maxhou/mysqldata/varlib/:/var/lib/mysql
    healthcheck:
      test: mysql --user=root --password='wsk' -e "SELECT 1;"
      interval: 10s
      timeout: 5s
      retries: 10
  redis:
    image: redis:7
    networks:
      - mytestnet
    healthcheck:
      test: redis-cli ping
      interval: 10s
      timeout: 5s
      retries: 10
networks:
  mytestnet:

 
3. 检查所编写的docker-compose.yml文件语法是否正确
docker compose config

4.启动
docker compose up -d

5. 停止 / 删除服务
docker compose stop
docker compose down
 

(报错)

(正确)

4 启动如遇到以下面的情况说明在加载镜像源,由于默认从外网加载,所以速度很慢,甚至无法加载。

此问题可参考以下解决方法

相关推荐
NiNg_1_23425 分钟前
使用Docker Compose一键部署
运维·docker·容器
萠哥啥都行30 分钟前
Linux安装Docker以及Docker入门操作
运维·docker·容器
王哲晓30 分钟前
Linux通过yum安装Docker
java·linux·docker
汀、人工智能1 小时前
修改Docker默认存储路径,解决系统盘占用90%+问题(修改docker root dir)
docker·容器
吃面不喝汤662 小时前
如何配置和使用自己的私有 Docker Registry
运维·docker·容器
Leighteen2 小时前
Docker常用命令
docker·容器
丶21362 小时前
【Nginx】在 Docker 上安装 Nginx 的详细指南
运维·nginx·docker
codelife3212 小时前
在Docker容器中执行命令
容器
petaexpress3 小时前
常用的k8s容器网络模式有哪些?
网络·容器·kubernetes
m0_741768859 小时前
使用docker的小例子
运维·docker·容器