docker-compose容器编排工具

Docker Compose

3.4.1 介绍

Compose项目是Docker官方的开源项目,负责实现对 Docker容器集群的快速编排。

其代码目前在https://github.com/docker/Compose上开源。

Compose中有两个重要的概念:

  • 服务( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

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

    Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

    Compose 项目由 Python编写,实现上调用了Docer服务提供的API来对容器进行管理。

    因此,只要所操作的平台支持Docer APl,就可以在其上利用Compose来进行编排管理。

3.4.2 三步骤
  1. 定义一个Dockerfile文件

  2. 定义一个docker-Compose.yml文件

  3. docker-Compose up 启动

    作用:批量服务编排

    理解:
    `Compose`诗官方的开源项目,需要安装
    # Dockerfile 让程序在任何地方运行
    
3.4.3 安装
# 官网地址慢
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` >/usr/local/bin/docker-compose
# 授权
sudo chmod +x /usr/local/bin/docker-compose

#安装成功 docker-compose version
docker-Compose version 1.25.5, build 8a1c60f6
docker-py version: 4.1.0
CPython version: 3.7.5
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019
3.4.4 yaml规则
# 三层
version:  #版本
services: #服务
   服务1:web
   # 服务配置
   images
   build
   network
3.4.4.1 build

作用:先根据build中的DockerFile自动构建镜像,自动运行容器

  • context:指定Dockerfile相对docker-compose.yml的路径位置,可使用绝对或相对路径
  • dockerfile:指定你Dockerfile的文件名,如果是Dockerfile可忽略

案例

version: "3.0"
services:
        java:
                build: # 用来指定Dockerfile所在目录
                        context: ./docker # 指定Dockerfile所在目录位置,相对或绝对
                        dockerfile: Dockerfile # Dockerfile的文件名
                container_name: javaApp
                ports:
                -       "2021:2021"
                networks:
                -       ems
                depends_on:
                        -       tomcat
                command: "--server.servlet.context-path=/app"
networks:
		ems:
FROM java:8
ADD springboot-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 2021
ENTRYPOINT ["java","-jar","app.jar"]
CMD ["--server.port=2021"]
3.4.4.2 command

作用:用来覆盖容器启动的默认命令

案例:启动redis

version: "3.0"
services:
        redis1:
                image: redis:5.0
                ports:
                -       "6379:6379"
                container_name: redis01
                volumes:
                -       redisdata:/data
                networks:
                -       ems
                command: "redis-server --appendonly yes" # 使用AOF持久化
                # commend: redis-server /usr/redis/conf/redis.conf 指定配置文件启动
networks:
		ems:
3.4.4.3 container_name

作用:容器名 替换原始的–name

3.4.4.4 depends_on

作用:用来指定当前服务启动依赖那些服务,依赖的服务会在当前优先启动, 之后书写的是服务名

注:不会在依赖的服务完全启动之后在启动

案例:搭建es + kibana

version: "3.1"
services:
  es:
    image: elasticsearch:7.11.2
    container_name: es
    networks:
    - elk
    ports:
    - "9200:9200"
    - "9300:9300"
    environment:
    -  discovery.type=single-node
    volumes:
    - esconfig:/usr/share/elasticsearch/config # 可选配置,配置文件
    - esdata:/usr/share/elasticsearch/data # 可选配置,数据持久化
    - /home/elasticsearch/plugins/:/usr/share/elasticsearch/plugins # 可选配置,插件挂载
    restart: always
  kibana:
    image: kibana:7.11.2
    container_name: kibana
    networks:
    - elk
    ports:
    - "5601:5601"
    environment:
    - ELASTICSEARCH_HOSTS=http://es:9200  # 指定es的路径
    depends_on:
      - es
    restart: always
networks:
  elk:
volumes:
  esconfig:
  esdata:
3.4.4.5 env_file

作用:以配置文件的形式替换enviroment中的配置,因为直接写太敏感

必须以.env为后缀

案例:搭建mysql

version: "3.1"
services:
  mysql1:
    container_name: mysql
    image: mysql:5.7
    ports:
      - "3306:3306"
    volumes:
      - mysqlconf:/etc/mysql/conf.d  # 配置文件挂载
      - /home/mysql/data:/var/lib/mysql # 数据持久化挂载
    env_file:
      - ./pwd.env
    networks:
      - mysql
networks:
  mysql:
volumes:
  mysqlconf:
pwd.env

MYSQL_ROOT_PASSWORD=root
3.4.4.6 enviroment

作用:用来给容器中的某些环境赋值

案例:搭建mysql

version: "3.0"
services:
		mysql1:
                container_name: mysql01
                image: mysql:5.7
                ports:
                -       "3306:3306"
                volumes:
                -       mysqlconf:/etc/mysql/conf.d  # 配置文件挂载
                -       /home/mysql/data:/var/lib/mysql # 数据持久化挂载
                environment:
                -       MYSQL_ROOT_PASSWORD=root   # 数组用等号
                        # MYSQL_ROOT_PASSWORD: root
                networks:
                -       ems
networks:
		ems:
3.4.4.7 healthcheck

作用:心跳机制,检测容器是否存活

healthcheck:
	test: ["CMD","curl","-f","http://localhost"]
	interval: 1m30s
	timeout: 10s
	retries: 3
3.4.4.8 image

作用:指定镜像,使用镜像是谁

3.4.4.9 networks

作用:用来指定容器使用的是哪个网桥 替代 --network

​ -xxx(会自动创建) 一旦指定,一定要手动声明

3.4.4.10 ports

作用:映射端口,相当于-p 8080:8080

3.4.4.11 sysctls

作用:用来修改容器内系统的参数

3.4.4.12 ulimits

作用:用来修改容器内系统的默认最大进程数

ulimits:
	nproc: 65535
	nofile:
		soft: 20000
		hard: 40000
3.4.4.13 volumes

作用:用来挂载数据卷 相当于 -v

使用具名挂载时,要手动申明

3.4.5 启动
docker-compose up  # 启动容器
3.4.6 实战
version: "3.0"
services:
        tomcat: # 服务名,唯一
                container_name: tomcat01 # 替换--name
                image: tomcat:9 # 相当于 tomcat:9
                ports:
                        - "8080:8080" # 相当于 -p 8080:8080
                volumes: # 相当于 -v mytomcatapp:/usr/local/tomcat/webapps
                -       mytomcatapp:/usr/local/tomcat/webapps # 具名挂载,会创建目录名_mytomcatapp的卷名
                networks:  # 相当于--network ems
                -       ems
        tomcat1:
                container_name: tomcat02
                image: tomcat:9
                ports:
                        - "8081:8080"
                volumes:
                -       /home/tomcat/webapps:/usr/local/tomcat/webapps # 指定路径挂载
                networks:
                -       ems
        mysql1:
                container_name: mysql01
                image: mysql:5.7
                ports:
                -       "3306:3306"
                volumes:
                -       mysqlconf:/etc/mysql/conf.d  # 配置文件挂载
                -       /home/mysql/data:/var/lib/mysql # 数据持久化挂载
                environment:
                -       MYSQL_ROOT_PASSWORD=root   # 数组用等号
                        # MYSQL_ROOT_PASSWORD: root
                networks:
                -       ems
        redis1:
                image: redis:5.0
                ports:
                -       "6379:6379"
                container_name: redis01
                volumes:
                -       redisdata:/data
                networks:
                -       ems
                command: "redis-server --appendonly yes" # 用来覆盖容器中的内部命令,用来开启redis的aof持久化

volumes:
        mytomcatapp: # 使用具名挂载要声明
                external: # 使用自定义卷名
                        true  # true确定使用自定义卷名,必须提前创建好,默认为false,不使用
        mysqlconf:  # mysql配置文件挂载点
        redisdata: # redis持久化挂载点
networks:
        ems: # 声明网络,默认会创建目录名_ems
                external: # 使用自定义网桥,需要提前创建好
                        false
version: '3.1'
services:
  cxs-mysql:
    container_name: cxs-mysql
    image: mysql:5.7
    ports:
    - "10086:3306"
    environment:
    - MYSQL_ROOT_PASSWORD=@Passw0rd
    - TZ=Asia/Shanghai
    volumes:
    - /root/mysql-docker/mysql/data:/var/lib/mysql
    - cxs-mysql-conf:/etc/mysql
    - /root/mysql-docker/mysql/log:/var/log/mysql
    command:
    - --character-set-server=utf8mb4
    - --collation-server=utf8mb4_general_ci
volumes:
  cxs-mysql-conf:
3.4.7 命令
1,Docker-compose命令格式
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]

命令选项如下

-f --``file` `FILE指定Compose模板文件,默认为docker-compose.yml``
-p --project-name NAME 指定项目名称,默认使用当前所在目录为项目名``
--verbose 输出更多调试信息``-``v``,-version 打印版本并退出``
--log-level LEVEL 定义日志等级(DEBUG, INFO, WARNING, ERROR, CRITICAL)
2,docker-compose up
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]``选项包括:
-d  # 在后台运行服务容器``
-no-color # 不是有颜色来区分不同的服务的控制输出``
-no-deps # 不启动服务所链接的容器``
3,docker-compose ps
docker-compose ps [options] [SERVICE...] # 列出项目中所有的容器
4,docker-compose stop
docker-compose stop # 停止,不删除
-t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)``
docker-compose stop``停止正在运行的容器
docker-compose start 再次启动
5,docker-compose -h
docker-compose -h # 查看帮助
6,docker-compose down
docker-compose down [options] 停止和删除容器、网络、卷、镜像
docker-compose down # 停止和删除所有
7,docker-compose logs
docker-compose logs [options] [SERVICE...] 查看服务容器的输出。
# 默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过–no-color来关闭颜色。
docker-compose logs 查看服务容器的输出
-f 跟踪日志输出
8,docker-compose bulid
docker-compose build [options] [--build-arg key=val...] [SERVICE...]``构建(重新构建)项目中的服务容器。
docker-compose build来重新构建服务
9,docker-compose pull
docker-compose pull [options] [SERVICE...]``拉取服务依赖的镜像。
10,docker-compose restart
docker-compose restart [options] [SERVICE...] # 重启项目中的服务。
11,docker-compose rm
docker-compose rm [options] [SERVICE...] 删除所有(停止状态的)服务容器。
–f, –force,强制直接删除,包括非停止状态的容器
-v,删除容器所挂载的数据卷
docker-compose rm 删除所有(停止状态的)服务容器。
推荐先执行docker-compose stop命令来停止容器。
12,docker-compose start
docker-compose start [SERVICE...]``docker-compose start 启动已经存在的服务容器。
13,docker-compose run
docker-compose run [options] [-``v` `VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]``在指定服务上执行一个命令。
docker-compose run ubuntu ``ping` `www.baidu.com``在指定容器上执行一个``ping``命令。
14,docker-compose scale
docker-compose scale web=3 db=2``设置指定服务运行的容器个数。通过service=num的参数来设置数量
15,docker-compose pause
docker-compose pause [SERVICE...]``暂停一个服务容器
16,docker-compose kill
docker-compose ``kill` `[options] [SERVICE...]``通过发送SIGKILL信号来强制停止服务容器。``支持通过-s参数来指定发送的信号,例如通过如下指令发送SIGINT信号:``docker-compose ``kill` `-s SIGINT
17,docker-compose config
docker-compose config [options]``验证并查看compose文件配置。``选项包括:``–resolve-image-digests 将镜像标签标记为摘要``-q, –quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息``–services 打印服务名,一行一个``–volumes 打印数据卷名,一行一个
18,docker-compose create
docker-compose create [options] [SERVICE...]``为服务创建容器。``选项包括:``–force-recreate:重新创建容器,即使配置和镜像没有改变,不兼容–no-recreate参数``–no-recreate:如果容器已经存在,不需要重新创建,不兼容–force-recreate参数``–no-build:不创建镜像,即使缺失``–build:创建容器前  ,生成镜像
19,docker-compose exec
docker-compose exec [options] SERVICE COMMAND [ARGS...] # 进入容器
docker-compose exec 服务 bash
20,docker-compose port
docker-compose port [options] SERVICE PRIVATE_PORT``显示某个容器端口所映射的公共端口。``选项包括:``–protocol=proto,指定端口协议,TCP(默认值)或者UDP``–index=index,如果同意服务存在多个容器,指定命令对象容器的序号(默认为1)
21,docker-compose push
docker-compose push [options] [SERVICE...]``推送服务依的镜像。``选项包括:``–ignore-push-failures 忽略推送镜像过程中的错误
22,docker-compose stop
docker-compose stop [options] [SERVICE...]``停止运行的容器
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈小白.

感谢老板,祝老板今年发大财!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值