Docker-Compose编排与部署

Docker Compose (多个容器编排)

是一个定义及运行多个docker容器的工具,可以使用YAML文件来配置应用,使用命令,可以创建并启动配置中的所有服务。docker compose会通过解析容器之间的依赖关系,按先后顺序启动容器。
适应所有环境过程

  • 使用Dockerfile定义应用程序的环境,可以在任何地方复制
  • docker-compose.yml中定义组成应用程序服务,可以在任何环境中运行
  • 运行docker-compose开始运行应用程序

官方文档:https://docs.docker.com/compose/overview

Docker compose优点
能将多个繁琐的docker命令步奏,简化成一个命令

compose原理

首先docker-compose up -d指令启动,一个docker-compose.yml定义了一个docker -compose的project(一个项目),compose会传到project参数由project模块处理
其次若果宿主机有与应用对应的容器,docker-compose将进行逻辑判断,可以指定直接启动已有容器,docker-compose会执行server模块的容器重启,否则直接启动已有容器。
最后就是在container模块执行启动时,模块会调用docker-py客户端执行post请求

compose案例

#首先安装docker-compose
/usr/bin/docker-compose  #一般默认在这里面
#如果没有下载到这里面
[root@localhost ~]# chmod +x /usr/bin/docker-compose   #给他可执行权限
[root@localhost ~]# docker-compose version    #查看版本号就可以使用了
docker-compose version 1.21.1, build 5a3f1a3
docker-py version: 3.3.0
CPython version: 3.6.5
OpenSSL version: OpenSSL 1.0.1t  3 May 2016

docker-compose用法
格式:docker-compose [-f...] [options] [COMMAND(命令)] [ARGS(命令参数)...]
docker-compose常用选项-f

  • --verbose:输出更多调试信息
  • --version:打印版本信息
  • -f,--file FILE 使用特定的compose模板文件,默认为docker-compose.yml
  • -p,--project-name NAME 指定项目名称,默认使用目录名称

docker-compose常用命令:

  • –build 在启动容器前构建服务镜像
  • kill 杀掉容器
  • logs 显示容器输出内容
  • port 打印绑定的开放端口
  • ps 显示容器
  • pull 拉去服务镜像
  • restart 重启服务
  • rm 删除停止的容器
  • run 运行一个一次性命令
  • scale 设置服务的容器数目
  • exec 切换到容器内
  • start 开启服务
  • stop 停止服务
  • up 创建并启动服务

docker-compose中的yml文件
YAML全称YAML Ain't Markup Language表示“YAML不是一种标记语言”的缩写,为了强调YAML语言以数据作为中心,不是以标记语言为重点,使用返璞词重新命名。
YAML是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。

YAML文件注意事项

  • 通常开头缩进两个空格(不能使用tab键)
  • 字符的后面缩进一个空格,冒号,逗号,横杆等。
  • 支持#注释
  • 允许加入空格
docker-comopse.yml文件lnmp
version: '3'
services:
  nginx:
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 80:80
    networks:
      - lnmp
    volumes:
      - ./wwwroot:/usr/local/nginx/html

  php:
    hostname: php
    build:
      context: ./php
      dockerfile: Dockerfile
    ports:
      - 9000:9000
    networks:
      - lnmp
    volumes:
      - ./wwwroot:/usr/local/nginx/html

  mysql:
    hostname: mysql
    image: mysql:5.6
    ports:
      - 3306:3306
    networks:
      - lnmp
    volumes:
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/data:/var/lib/mysql
    command: --character-set-server=utf8
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: wordpress
      MYSQL_USER: user
      MYSQL_PASSWORD: user123

networks:
  lnmp:

docker-compose中YAML常用字段

  • images用来指定服务的镜像名称或镜像ID,如果镜像在本地不存在,compose将会尝试去拉取这个镜像。
  • volumes指令用于设置数据卷挂载路径,数据卷挂载路径可以是一个目录或一个已经存在的数据卷容器,可以设置宿主机路径HOST:CONTAINER或加上访问模式HOST:CONTAINER:ro。使用ro表示对于容器来说数据卷是只读的,这样可以有效地保护宿主机的文件系统。
  • networks指令用于设置指定网络
  • command覆盖容器启动后默认执行的命令
  • ports暴露端口,与-p相同,但端口不能低于60
#使用docker编译lnmp
上传或者编译lnmp目录包,里面有各种配置,以及最主要的compose.yml,宿主机
[root@localhost ~]# cd compose_lnmp/
[root@localhost compose_lnmp]# ls
docker-compose.yml  mysql  nginx  php  wwwroot
[root@localhost compose_lnmp]# ls mysql/
conf  data
[root@localhost compose_lnmp]# ls nginx/
Dockerfile  nginx-1.12.1.tar.gz  nginx.conf  run.sh
[root@localhost compose_lnmp]# ls php/
Dockerfile  php-5.6.39.tar.gz  php.ini
[root@localhost compose_lnmp]# ls wwwroot/
index.html  index.php


#所有准备好后
docker-compose up -d  #在目录里,要识别到.yml文件
构建完成后
docker-compose ps  #查看状态
docker-compose restart  #三个容器重启(也就是说一下管理三个容器)
此时就可以查看端口,访问页面了


posted @ 2021-10-26 21:24  whml  阅读(566)  评论(0编辑  收藏  举报