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 #三个容器重启(也就是说一下管理三个容器)
此时就可以查看端口,访问页面了

Docker-Compose编排与部署的更多相关文章

  1. Docker Compose编排工具部署lnmp实践及理论(详细)

    目录 一.理论概述 编排 部署 Compose原理 二.使用docker compose 部署lnmp 三.测试 四.总结 一.理论概述 Docker Compose是一个定义及运行多个Docker容 ...

  2. 使用Docker compose编排Laravel应用

    前言 Laravel官方开发环境推荐的是Homestead(其实就是一个封装好的Vagrant box),我感觉这个比较重,于是自己用Docker compose编排了一套开发环境,在这里分享下. 环 ...

  3. Docker 镜像编排并部署SpringBoot应用

    Docker-compose是一个基于Docker的编排工具,所谓编排个人理解就是将不同的镜像通过配置,组成一个新的运行环境,官方定义是:Compose is a tool for defining ...

  4. Docker(二十六)-Docker Compose编排容器

    1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...

  5. Docker系列之(五):使用Docker Compose编排容器

    1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...

  6. docker compose 编排

    Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Comp ...

  7. Docker Compose 项目打包部署

    Docker Compose 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build.docker run 等命令操作容器.然而微服务架构的应用系统一 ...

  8. 使用Docker Compose编排Spring Cloud微服务

    文章目录 微服务构建实例 简化Compose的编写 编排高可用的Eureka Server 编排高可用Spring Cloud微服务集群及动态伸缩 微服务项目名称 项目微服务中的角色 microser ...

  9. 使用docker compose编排容器

    一.安装docker compose 二进制包安装 1.安装 Docker Compose 从 官方 GitHub Release 处直接下载编译好的二进制文件即可 # curl -L https:/ ...

  10. 使用Docker Compose编排微服务

    一般微服务架构会包含若干个微服务,而每个微服务可以有多个实例,如果每个微服务都有手动启停,那么效率就很低.维护量比较大. 所以我们可以使用Docker Compose来轻松.高效地管理容器. 一.安装 ...

随机推荐

  1. 下载接口时出现:Try to run this command from the system terminal. Make sure that you use the correct version of 'pip' installed for your Python interpreter located at 'D:\python\demo\venv\Scripts\...的错误

    下载接口时出现:Try to run this command from the system terminal. Make sure that you use the correct version ...

  2. 使用IDEA+Tomcat部署web项目记录

    使用IDEA+Tomcat部署web项目记录 本文已同步发布于CSDN JDK版本:1.8(请自行配好环境变量) IDEA版本:2019.3 Tomcat版本:9.0.39 1.新建project和m ...

  3. idea启动项目,报java.lang.OutOfMemoryError: PermGen space 和启动项目很慢的问题解决

    启动一个老的项目,报错,查是内存溢出 进入 VM options 加上   -Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m   在 ...

  4. 看不见的的html

    1.  meta标签自动刷新/跳转 实现定时跳转功能:除了设置定时器外  可以 <meta http-equiv="Refresh" content="5" ...

  5. 剑指 Offer II 堆

    059. 数据流的第 K 大数值 class KthLargest { public: priority_queue<int,vector<int>,greater<int&g ...

  6. lib_0001_file_manager.py

    #!/usr/bin/python # -*- coding: UTF-8 -*- import os import pathlib import shutil import sys class fi ...

  7. chia NFT 经验

    除了NFT的ID 其他所有内容都可以相同包括NFT数据,meta,许可证 收藏集创建一次后就无法更改了,如果之后的mint中重新设置了收藏集,将无效, 收藏集只认UUID,不认名称.

  8. 读《高情商修炼手册》有感 output

    偶然的一次机遇,遇见了这本书,本着情绪的心态的初衷去阅读,没想到还是挺好读的,此次记录是在读完这本书之后的第二天,受output 1.情商高,意味着控制好自己的情绪,让人相处舒服 在智商过剩的年代,有 ...

  9. Python语言基础学习报告

    这个学期我们开设了一门新课程---Python,早在很久之前,我就经常在各种有关职场的帖子下面看到这个词,且多为夸赞,因此,尽管大一深受C语言和数据结构两门课的折磨,我还是怀着十分的认真和敬意开始了这 ...

  10. 思科IPsecVPN建立

    实验拓扑 实验目标: 1.不配置中间的三个路由器的路由实现router0和router2的vpn隧道 2.PC0能够ping通PC1 实验IP预定: PC0 10.1.1.1/24 PC1 20.1. ...