Docker单机容器编排工具Docker compose

Docker单机容器编排工具Docker compose

Docker compose介绍

Docker的原则是一个容器只做一件事。一个服务比如zabbix,有三个组件(web前端、数据库、server),那我需要起三容器,三个命令。还有wordpress,就算不把php和nginx分离,也需要俩容器(nginxphp、数据库)。那我要想起个ELK呢?ES都得两个或三个,比较麻烦。所以就有需要docker compose。

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 .yml 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以用 .yml 文件创建并启动所有服务。

比如前面harbor就是用compose写的。

[root@docker02 ~]# cd harbor 
[root@docker02 ~/harbor]# ll
total 605152
drwxr-xr-x 3 root root        20 Jan  3 14:15 common
-rw-r--r-- 1 root root      5285 Jan  3 14:15 docker-compose.yml 
-rw-r--r-- 1 root root 619632806 Sep  4  2019 harbor.v1.9.0.tar.gz
-rw-r--r-- 1 root root      5799 Jan  3 14:12 harbor.yml
-rwxr-xr-x 1 root root      5088 Sep  4  2019 install.sh
-rw-r--r-- 1 root root     11347 Sep  4  2019 LICENSE
-rwxr-xr-x 1 root root      1748 Sep  4  2019 prepare

好多官方网站都会给你写好docker-compose。比如wordpress

https://hub.docker.com/_/wordpress

在这里插入图片描述

Docker compose版本说明

官方版本说明:https://docs.docker.com/compose/compose-file/compose-versioning

Docker compose安装

安装yum源里的最新版本

[root@docker01 ~]# yum install -y docker-compose
[root@docker01 ~]# docker compose version
Docker Compose version v2.20.2

它其实就是装了个可执行文件而已,并没有什么程序

[root@docker01 ~]# which docker-compose 
/usr/bin/docker-compose

[root@docker01 ~]# cat /usr/bin/docker-compose
#!/usr/bin/python3.6
# EASY-INSTALL-ENTRY-SCRIPT: 'docker-compose==1.18.0','console_scripts','docker-compose'
__requires__ = 'docker-compose==1.18.0'
import re
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(
        load_entry_point('docker-compose==1.18.0', 'console_scripts', 'docker-compose')()
    )

Docker compose模板

## 是yaml语法

version: '版本号'

services:
  服务名称1: #(名字,自定义)
     image: 容器镜像
     container_name: 容器名称
     environment:
       环境变量1: 值1       #(新版本语法)
       - 环境变量2: 值2     #(老版本语法)
     volumes:
       - 宿主机数据目录:容器内数据目录
     ports:
       - 宿主机端口:容器内映射端口
     networks:
       - 自定义网络名称
     links:
       - namenode 
     command:
       - 数据库使用字符集变量时可以用
     restart: always
          
  服务名称2:
     image: 容器镜像
     container_name: 容器名称
     environment:
       - 环境变量1=值1
       - 环境变量2=值2
     user: 宿主机用户:容器用户
     volumes:
       - 宿主机数据目录:容器内数据目录
     ports:
       - 宿主机端口:容器内映射端口
     networks:
       - 自定义网络名称
     links:
       - namenode 
     depends_on:
       - 依赖服务
     restart: always
     
  networks:
    default:
    externnal: true
    name: andrew_net

     wordpress:
       depends_on:
         - db
       image: wordpress:latest
       volumes:
         - /data/web_data:/var/www/html
       ports:
         - "80:80"
       restart: always
       environment:
         WORDPRESS_DB_HOST: db
         WORDPRESS_DB_USER: wordpress
         WORDPRESS_DB_PASSWORD: wordpress
 
## 说明 
deponds on 依赖
比如zabbix-sever它要mysql起来才能link到

使用Docker Compose的三步曲

1、准备好镜像(下载现成的或者是自己Dockerfile构建的)

2、写docker-compose:套模板即可,yaml语法
3、启动Compose,就相当于启动应用

实操:用docker compose起MySQL

参考上节起MySQL容器的命令

docker run \
--name wp_db \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD='123' \
-e MYSQL_USER='wp_user' \
-e MYSQL_PASSWORD='123' \
-e MYSQL_DATABASE='wordpress' \
-d mysql:5.7.38

## Xshell如何调缩进:按住alt键,全选
# 写docker compose
[root@docker01 ~]# mkdir mysql
[root@docker01 ~]# cd mysql
[root@docker01 ~/mysql]# ll
total 0
[root@docker01 ~/mysql]# vim docker-compose.yml
version: '3.3'   #//写1.0会报错

services:
  mysql57:   #//服务名(自定义)
    image: mysql:5.7.38
    container_name: andrew_test_db
    environment:
      MYSQL_ROOT_PASSWORD: '123'
      MYSQL_USER: 'andrew'
      MYSQL_PASSWORD: '123'
      MYSQL_DATABASE: 'test_andrew'
    volumes:
       - /data/test:/var/lib/mysql
    ports:
       - 3306:3306
    command:
       --character-set-server=utf8
    restart: always
    
# 写好后启动容器,注意要在目录里执行
[root@docker01 ~/mysql]# docker-compose up -d
Creating andrew_test_db ... done
不加-d会在前台启动

[root@docker01 ~]# docker exec -it andrew_test_db /bin/bash
bash-4.2# mysql -uroot -p123
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| andrew_test        |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

# 总结:看到没有,有了compose文件,连docker run都用不着了,只要写好compose文件,docker-compose up一条命令起服务

Docker compose 相关命令

## 前台启动docker compose并查看日志
[root@docker01 ~/mysql]# docker-compose up

## 如启动没问题即可放后台启动
[root@docker01 ~/mysql]# docker-compose up -d
Starting test_db ... done

## 停止所有服务
[root@docker01 ~/mysql]# docker-compose stop
Stopping test_db ... done

## 启动所有服务
[root@docker01 ~/mysql]# docker-compose start
Starting mysql57 ... done

## 停单个
[root@docker01 ~/mysql]# docker-compose stop mysql57
Stopping test_db ... done

## 查看所有日志
[root@docker01 ~/mysql]#  docker-compose logs

## 查看指定日志
[root@docker01 ~/mysql]#  docker-compose logs mysql57

## 删除容器
[root@docker01 ~/mysql]# docker-compose rm 
Going to remove test_db
Are you sure? [yN] 

## 指定compose文件名启动(如不用默认文件名的话)
[root@docker01 ~/mysql]#  docker-compose -f zabbix.yml up -d

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值