Docker-compose

一、docker-compose 简介

知道使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。服务编排有很多种技术方案,今天给大家介绍 Docker 官方产品 Docker Compose 。
docker swarm(管理跨节点)

Dockerfile可以让用户管理一个单独的应用容器;而Compose则允许用户在一个模板(YAML格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web 服务容器再加上后端的数据库服务容器等。
 

Docker-compose 简介 

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

Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡,比如 Consul。

Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)

Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API, 就可以在其上利用Compose来进行编排管理。

 compose 部署 

1. Docker Compose 环境安装
Docker Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker Compose

#下载
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#安装
chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose --version
 

YAML 文件格式及编写注意事项   * * * *


YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 XML数据描述语言,语法比 XML 简单的很多。YAML 数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号 [] 括起来, hash 用花括号 {} 括起来。

使用 YAML 时需要注意下面事项:

●大小写敏感
●通过缩进表示层级关系
●不支持制表符 tab 键缩进,只能使用空格缩进
●缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
●用 # 号注释
●符号字符后缩进1个空格,如冒号 :  、逗号 ,  、横杠 -    
●如果包含特殊字符用单引号('')引起来会作为普通字符串处理,双引号(""): 特殊字符作为本身想表示的意思
name: "Hi,\nTom"

 

 数据结构:


●对象映射: 键值对的字典
animal: pets

●序列数组: 一组按次序排列的列表
- Cat
- Dog
- Goldfish

["Cat", "Dog", "Goldfish"]

animal: 
- 飞行动物
- 爬行动物
- 水生动物
- 两栖东西
 
横向格式
animal: ["飞行动物", "爬行动物", "水生动物", "两栖东西"]

●布尔值
debug: true
debug: false


示例:
# yaml 格式
languages:       #序列的映射
  - Java
  - Golang
  - Python
websites:        #映射的映射
  cpu: 2
  memory: 1024M
  swap: 2048M
  disk: 60G 

#yaml格式用 空格缩进 表示字段的层级关系,同一层字段要靠左对齐
 
一级字段:
    二级字段1:                    
    二级字段2:
	    三级字段: 
 
human:
  name:
    姓: "王"
	ming: 
	- 文宇
	- 思聪
  age: 24
  sex: 男
  height: 180

# Json 格式(开头先有大括号,分区里面的值依然写大括号,如有多个值还要写大括号,里面的值要用【】号)

 json文件格式:文件名格式通常是以 .json 为后缀,用 大括号{} 表示字段的层级关系,每层字段除了最后一个字段都要用逗号,结尾,特性:易于api接口解析


human:
  name:
    姓: "王"
	ming: 
	- 文宇
	- 思聪
  age: 24
  sex: 男
  height: 180
  
  
{
  "human": {                      #json格式用 大括号{} 表示字段的层级关系,每层字段除了最后一个字段都要用逗号,结尾
     "name": {
	    "姓": ["王"],
		"名":["文宇", "思聪"]
	 },
	 "age": ["24"],
	 "sex": ["男"],
     "height": ["180"]
  
  }
}

 文本块:

value:              ->  value: "helloworld"
       hello 
       world
 
 
value: |            -> value: "hello\nworld"              #key: |  表示保留文本块里的换行符
       hello 
       world
 
value: |-           -> value: 相当于 echo -n "helloworld"
       hello        
       world
	   
value: |+           -> value: "hello\nworld\n"
       hello    
       world 

 锚点

name: &a yaml       #锚点,相当于 a="yaml"                    
book: *a            #引用,相当于 echo $a     book: yaml   

docker-compose配置模板文件常用的字段 与docker run的选项和参数对比 

 

Docker Compose 常用命令

字段                                        描述
build                                       重新构建服务
ps                                          列出容器
up                                          创建和启动容器    
exec                                        在容器里面执行命令
scale                                       指定一个服务容器启动数量
top                                         显示容器进程
logs                                        查看容器输出
down                                        删除容器、网络、数据卷和镜像
stop/start/restart                          停止/启动/重启服务

 nginx + tomcat docker-compose编排

 nginx的dockerfile

FROM centos:7
MAINTAINER this is nginx image <xyl>
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.0.tar.gz /usr/local/src/
WORKDIR /usr/local/src/nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make -j4 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
EXPOSE 443
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]

 编写配置文件docker-compose.yml

vim /opt/compose_nginx/docker-compose.yml
version: '3'
services:
  nginx:
    container_name: web1
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 1216:80
      - 1217:443
    networks:
      lnmp:
        ipv4_address: 172.18.0.10
    volumes:
      - ./wwwroot:/usr/local/nginx/html
networks:
  lnmp:
   driver: bridge
   ipam:
     config:
	   - subnet: 172.18.0.0/16

查看容器状态和访问测试

docker ps -a
cd /opt/compose-nginx/
docker-compose ps					#必须在docker-compose.yml所在目录执行此命令
 
浏览器访问:192.168.44.20:1314

访问页面 自己主机+端口号 

 

 Docker-compose 搭建nginx+tomcat 

准备依赖文件

FROM centos:7
MAINTAINER this is tomcat image <hmj>
ADD jdk-8u291-linux-x64.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv jdk1.8.0_291 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH $JAVA_HOME/bin:$PATH
ADD apache-tomcat-8.5.16.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv apache-tomcat-8.5.16 /usr/local/tomcat
EXPOSE 8080
#CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
CMD ["/usr/local/tomcat/bin/startup.sh","start"]

 

version: '3'
services:
  nginx:
    container_name: web1
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 1314:80
      - 1315:443
    networks:
      lnmp:
        ipv4_address: 172.18.0.10
    volumes:
      - ./wwwroot:/usr/local/nginx/html
  tomcat: 
    hostname: tomcat
    build:  
      context: ./tomcat
      dockerfile: Dockerfile
    ports:  
      - 8080:8080
    networks:
      lnmp:   
networks:
  lnmp:
    driver: bridge 
    ipam:
      config:
        - subnet: 172.18.0.0/16

 删除之前nginx的一切 防止干扰

 

 根据 docker-compose.yml 文件的配置,在后台启动并运行所有指定的服务

 查看网络、容器、镜像

 

总结:

① 什么是 docker-compose

docker-compose 实现在单机上完成容器集群编排的管理单机容器编排
docker-compose.yml compose 模版文件
工程(项目) project  LNMP
服务  nginx   Mysql  PHP
容器  container    容器名 --name     主机名  -h      镜像 image:tag     端口  -p       网络 --network            数据卷 -v

使用 docker-compose  可以完成多个  docker run 的所有操作

相关推荐

  1. docker-compose

    2024-04-30 09:50:02       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-30 09:50:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-30 09:50:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-30 09:50:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-30 09:50:02       20 阅读

热门阅读

  1. 解决拉取多个不同git项目下的ssh问题

    2024-04-30 09:50:02       13 阅读
  2. 【Python快速上手(四)】

    2024-04-30 09:50:02       15 阅读
  3. 【Golang】Gin 框架的多种类型绑定函数

    2024-04-30 09:50:02       13 阅读
  4. Android Room 数据库中的 Journal mode 解释

    2024-04-30 09:50:02       13 阅读
  5. 【Spring AI】07. 提示词

    2024-04-30 09:50:02       11 阅读
  6. Verilog学习之时序控制、语句块(1)

    2024-04-30 09:50:02       12 阅读
  7. Caddy实践 | Docker环境下使用Caddy快速部署web服务器

    2024-04-30 09:50:02       11 阅读
  8. memcpy,memmove函数详解

    2024-04-30 09:50:02       15 阅读
  9. 云容器与云中间件

    2024-04-30 09:50:02       11 阅读