君玉自牧 君玉自牧
首页
  • Linux
  • Nginx
  • MySQL
  • Redis
  • Kafka
  • Docker
  • Jenkins
  • Oneindex
  • Bitwarden
  • Confluence
  • Photogallery
  • 智能手机
  • 上古卷轴
  • 健身记录
  • 站点相关
  • 未完待续
GitHub (opens new window)
首页
  • Linux
  • Nginx
  • MySQL
  • Redis
  • Kafka
  • Docker
  • Jenkins
  • Oneindex
  • Bitwarden
  • Confluence
  • Photogallery
  • 智能手机
  • 上古卷轴
  • 健身记录
  • 站点相关
  • 未完待续
GitHub (opens new window)
  • 技术架构

  • 桌面维护

  • 网络工程

  • 系统运维

  • 环境搭建

  • 容器编排

    • Docker 安装部署 & 常规配置
    • Docker Swarm 集群部署
    • Docker Compose
      • 一、入门
        • 1.安装
        • 2.命令
      • 二、编排
        • 1.文件
        • 2.实例
      • 三、故障
    • 构建最小镜像
    • Kubernetes 集群部署
    • Kubernetes 项目实践
    • Kubernetes YAML 入门
    • Kubernetes 存储卷
    • 镜像仓库:Harbor
    • 容器管理:Portainer
    • Kubernetes 使用故障
  • 持续集成

  • 监控告警

  • 项目实践

  • 脚本开发

  • 前端开发

  • 后端开发

  • 效率工具

目录

Docker Compose

Docker 入门 (opens new window) Docker-Compose 是一个容器编排工具,通过编辑 yaml 文件将所有的容器的部署方法、文件映射、容器端口映射等情况进行提前设置,然后执行 docker-compose up 命令进行快速部署。

# 一、入门

# 1.安装

选择合适的版本 - https://github.com/docker/compose (opens new window)

#下载最新版的 docker-compose 文件
curl -L https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#添加可执行权限
chmod +x /usr/local/bin/docker-compose
#添加软链接
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
#测试安装结果
docker-compose --version
1
2
3
4
5
6
7
8

# 2.命令

#停止运行并移除容器
docker-compose down
#启动单个服务
docker-compose up -d 服务名
#查看当前运行的服务
docker-compose ps
#构建镜像,--no-cache 表示不用缓存
docker-compose build --no-cache
#查看镜像
docker-compose images
#查看日志
docker-compose logs
#启动/停止服务
docker-compose start/stop 服务名
#拉取镜像
docker-compose pull 镜像名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 二、编排

# 1.文件

Docker-Compose 最重要的时 yaml 文件的结构和语法,更多内容见《官方文档 (opens new window)》

vi docker-compose.yml

version: "3.9"  #语法格式版本
services: #定义服务
  web:  #服务名称
    build: . #指定 Dockerfile 路径
    ports: #端口
      - "8080:5000" #主机端口:容器端口
    volumes:
      - .:/code
      - logvolume01:/var/log
    links:
      - redis
  redis:
    image: redis
    volumes:
        logvolume01: {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 2.实例

部署 Node.js、PHP、MySQL、Redis、RabbitMQ 前后端分离项目

version: '3' #语法格式版本
services: #定义服务
  backend: #服务名称
      build: #Dockerfile 路径,可以是相对/绝对路径
        context: backend #Dockerfile 名称
        dockerfile: Dockerfile
      volumes:  #相当于 docker run -v
        - "./backend:/opt/www" #主机路径:容器路径
      command: [ #相当于 Dockfile 中的 CMD 且优先级更高
        "php",
        "/opt/www/server.php"
      ]
      container_name: backend-compose #容器名称
      depends_on: #该服务依赖的其他服务,可修改启动顺序
        - mysql
        - redis
        - rabbitmq
      ports: #映射端口
        - "9502:9502" #主机端口:容器端口

  frontend:
    build:
      context: frontend
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    container_name: frontend-compose

  mysql:
    build:
      context: mysql
      dockerfile: Dockerfile
    ports:
      - "3306:3306"
    environment: #相当于 docker run -e
      MYSQL_ROOT_PASSWORD: root@123 #初始化的数据库密码
      MYSQL_DATABASE: junyu #初始化的数据库名称
    container_name: mysql-compose
    restart: always #自动重启
    volumes:
      - "./mysql/db/:/var/lib/mysql"
    command: [ #相当于 Dockfile 中的 CMD 且优先级更高
      "mysqld",
      "--lower_case_table_names=1", #设置表名不区分大小写
      "--default-authentication-plugin=mysql_native_password", #设置密码认证插件,低于 8.0.4 版本忽略
      "--character-set-server=utf8mb4",
      "--collation-server=utf8mb4_general_ci",
      "--max_connections=3000" #设置最大连接数
    ]    
    
  redis:
    image: redis
    ports:
      - "6379:6379"
    container_name: redis-compose
    restart: always
    command: [
      "redis-server",
      "--requirepass 123456", #设置密码为:123456
      "--appendonly yes" #开启持久化
    ]

  rabbitmq:
    image: rabbitmq:management
    ports:
      - "5672:5672"
      - "15672:15672"
    container_name: rabbitmq-compose
    environment:
      RABBITMQ_DEFAULT_USER: admin #rabbitmq 的初始用户名
      RABBITMQ_DEFAULT_PASS: 123456 #rabbitmq 的初始密码

networks:
  default:
    external:
      name: appnet
#指定使用的网络,要提前创建好
#docker network create --driver bridge --subnet 172.16.0.0/16 appnet
#--driver/-d 指定连接方式,--subnet 指定网段 ,appnet 为网络名称
#使用新的指定网络是为了防止网段占用完,route -n 查看网段占用情况
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

# 三、故障

Docker-Compose 配置容器启动顺序,有时依靠 depends_on 并不能完全解决,因为depends_on只能保证容器进入了running状态而不保证是否进入ready状态 解决方案:启动命令前增加判断依赖服务状态的工具 https://www.runoob.com/docker/docker-compose.html (opens new window)

网页编辑 (opens new window)
最近提交: 2023/03/22, 11:52:35
Docker Swarm 集群部署
构建最小镜像

← Docker Swarm 集群部署 构建最小镜像→

Theme by Vdoing | Copyright © 2011-2023 | 君玉自牧
粤ICP备15057965号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式