Docker-compose

目录

一、compose概述

1、docker-compose的产生

2、Docker-compose简介

3、Docker-compose的详细介绍

二、YAML简介

1、YAML简介

2、YAML要注意的事项

3、YAML支持的数据结构

三、compose的常用命令及配置字段

[1、docker compose的常用命令](#1、docker compose的常用命令)

2、数据结构

[3、docker compose配置常用字段](#3、docker compose配置常用字段)

4、docker-compose的文件结构

四、Docker-Compose部署nginx

1、Docker-compose的安装部署

2、准备依赖文件

3、编写配置文件docker-compose.yml

4、生成镜像容器

5、访问测试

6、查看结构

五、compose编排安装运行tomcat容器


一、compose概述

1、docker-compose的产生

Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。

Dockerfile可以让用户管理一个单独的应用容器;而compose则允许用户在一个模板(YAML格式)中定义一组相关联的应用容器(被称为一个project,即项目)。

2、Docker-compose简介

Docker-compose负责实现对Docker容器集群进行快速编排

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

3、Docker-compose的详细介绍

①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来进行编排管理。

二、YAML简介

1、YAML简介

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

2、YAML要注意的事项

①大小写敏感

②通过缩进表示层级关系

③不支持制表符号tab键缩进,只能使用空格缩进

④缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格

⑤用#号注释

⑥符号字符后缩进1个空格,如冒号:逗号,横杆-

⑦如果包含特殊字符用单引号('')会被作为普通字符串处理,双引号(""):特殊字符作为本身想表示的意思

3、YAML支持的数据结构

①对象,键值对的集合

②数组,一组按次序排列的值,又称序列

③纯量,单个的,不可再分的值

三、compose的常用命令及配置字段

1、docker compose的常用命令

|--------|---------|
| 字段 | 描述 |
| build | 重新构建服务 |
| ps | 列出容器 |
| up | 创建和启动容器 |

|-------|--------------|
| exec | 在容器里面执行命令 |
| scale | 指定一个服务容器启动数量 |
| top | 显示容器进程 |
| logs | 查看容器输出 |

|--------------------|----------------|
| down | 删除容器、网络、数据卷和镜像 |
| stop/start/restart | 停止/启动/重启服务 |

2、数据结构

复制代码
数据结构:
●对象映射: 键值对的字典
animal: pets

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

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

●布尔值
debug: true
debug: false


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


键:{值}

# Json 格式
{
  languages: [
    'Java',
    'Golang',
    'Python'	
  ],
  resources: {
    cpu: '2',
    memory: '1024M',
    swap: '2048M',
    disk: '60G'
  }
}

Baidu:
  www.baidu.com
wangyi: www.163.com
tengxun: www.qq.com

键 值

school: bei da
  kgc:          (两个空格)
    yunjisuan:
	  - dingding
	  - benet
	  - wanglei
	  - zhoubo
	  - dalao
	dashuju:
	  - lijia
	  - chenming

3、docker compose配置常用字段

|----------------------|--------------------------|
| 字段 | 描述 |
| build docker context | 指定Dockerfile文件名构建镜像上下文路径 |
| image | 指定镜像 |
| command | 执行命令,覆盖默认命令 |

|----------------|--------------------------------------|
| container name | 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale |
| environment | 添加环境变量 |
| networks | 加入网络 |

|----------|-------------------------------------------|
| ports | 暴露容器端口,与-p相同,但不能低于60 |
| volumes | 挂载宿主机路径或命令卷 |
| restart | 重启策略,默认no,always,no-failure,unless-stoped |
| hostname | 容器主机名 |

4、docker-compose的文件结构

复制代码
yum install -y tree
tree /opt/compose_nginx
/opt/compose_nginx/
├── docker-compose.yml				#创建模板脚本
├── nginx
│?? ├── Dockerfile					#创建容器脚本
│?? ├── nginx-1.12.0.tar.gz			#复制源码包
│?? └── run.sh						#启动服务脚本
└── wwwroot
    └── index.html					#站点网页

四、Docker-Compose部署nginx

1、Docker-compose的安装部署

复制代码
#注意必须是在安装docker的基础上
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#下载安装包单独安装DockerCompose
chmod +x /usr/local/bin/docker-compose
#docker-compose添加执行权限
docker-compose --version
#查看docker-compose版本

2、准备依赖文件

复制代码
(1)准备依赖文件
mkdir -p /opt/compose_nginx/nginx /opt/compose_nginx/wwwroot
cd /opt/compose_nginx/nginx
cp nginx-1.12.0.tar.gz ./

vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx

vim Dockerfile
#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER this is nginx image <hmj>
#添加环境包
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
#上传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 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
#指定http和https端口
EXPOSE 80
EXPOSE 443
//方法一:
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf			#关闭 nginx 在后台运行
#添加宿主机中run.sh到容器中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
//方法二:
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]


echo "<h1>this is test web</h1>" > /opt/compose_nginx/wwwroot/index.html

3、编写配置文件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

参数说明:

复制代码
version: '3'					#compose编排版本为3
services:						#服务:
  nginx:						#服务名称
    hostname: nginx				 #容器主机名
    build:						#创建容器过程:
      context: ./nginx			 #所需素材都在该目录(仓库)下
      dockerfile: Dockerfile	  #指定Dockerfile文件
    ports:						#提供端口:
      - 1216:80					 #对外提供(暴露)的端口
      - 1217:443
    networks:					#指定网络
      - lic						#网络名称(群集名称需一致)
    volumes:					#数据卷
      - ./wwwroot:/usr/local/nginx/html		#将宿主机该仓库内文件与nginx首页文件相关联(容器)
networks:						#对外公开需要声明networks群集名称
  lic:

4、生成镜像容器

复制代码
[root@localhost nginx]# docker-compose -f docker-compose.yml up -d
...
...
Successfully built f87b84e57bd9
Successfully tagged compose_nginx_nginx:latest

前提是必须要有centos7的镜像

5、访问测试

复制代码
[root@localhost compose_nginx]# ls
docker-compose.yml  nginx  wwwroot
 
echo "hello world" > index.html
curl 192.168.170.113:1216

6、查看结构

复制代码
[root@localhost compose_nginx]# yum -y install tree
[root@localhost compose_nginx]# tree ./
./
├── docker-compose.yml
├── nginx
│   ├── Dockerfile
│   └── nginx-1.12.0.tar.gz
└── wwwroot
    └── index.html
 
2 directories, 4 files

五、compose编排安装运行tomcat容器

复制代码
①首先创建一个tomcat的docker_compose文件夹
mkdir -p /opt/compose_tomcat/tomcat
②将tomcat编译安装的jdk包和tomcat包放入tomcat文件夹中
③进入tomcat文件夹编写Dockerfile文件
cd /opt/compose_tomcat/tomcat
vim  Dockerfile
#文件内容如下
FROM centos:7
#基于centos:7镜像
ADD jdk-8u201-linux-x64.tar.gz  /usr/local
ADD apache-tomcat-9.0.16.tar.gz  /usr/local
RUN mv /usr/local/jdk1.8.0_201  /usr/local/java  && mv /usr/local/apache-tomcat-9.0.16 /usr/local/tomcat
#将jdk和tomcat压缩包复制到镜像的/usr/local文件夹下并改名
ENV JAVA_HOME /usr/local/java
ENV JAVA_BIN /usr/local/java/bin
ENV JRE_HOME /usr/local/java/jre
ENV CLASSPATH /usr/local/java/jre/bin:/usr/local/java/lib:/usr/local/java/jre/lib/charsets.jar
ENV PATH $JAVA_BIN:/usr/local/java/jre/bin:$PATH
#定义路径变量
RUN mkdir /usr/local/tomcat/webapps/lucien \
    && echo -e "<%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"UTF-8\"%>\n<html>\n<head>\n<title>JSP test1 page</title>\n</head>\n<body>\n<% out.println(\"123456\");%>\n</body>\n</html>" > /usr/local/tomcat/webapps/lucien/index.jsp \
    && sed -i '71a <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">' /usr/local/tomcat/conf/server.xml \
    && sed -i '72a <Context docBase="/usr/local/tomcat/webapps/lucien" path="" reloadable="true">'  /usr/local/tomcat/conf/server.xml \
    && sed -i '73a </Context>'  /usr/local/tomcat/conf/server.xml \
    && sed -i '74a </Host>'  /usr/local/tomcat/conf/server.xml
#首先创建tomcat主页存放路径,然后添加主页内容,修改环境变量生效
EXPOSE 8080
#定义端口
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
#启动tomcat
④到compose_tomcat路径下创建tomcat的yml文件
cd /opt/compose_tomcat
vim docker-compose.yml
#内容如下:
version: '3'
#docker-compose版本
services:
#定义servers
  tomcat:
#容器名tomcat
    container_name: web2
    hostname: tomcat-test
#主机名tomcat-test
    build:
      context: ./tomcat
      dockerfile: Dockerfile
#镜像构建dockerfile文件夹位置及名称
    ports:
      - 1280:8080
#端口映射
    networks:
      lnmp:
        ipv4_address: 172.19.0.100
#tomcatip定义
networks:
  lnmp:
    driver: bridge
    ipam:
      config:
          - subnet: 172.19.0.0/16
#自定义网络模式和网段,保存退出
⑤创建并启动tomcat容器,注意在/opt/compose_tomcat路径下执行
docker-compose -f docker-compose.yml up -d
#创建后台启动tomcat容器
docker ps -a 
#查看容器状态及端口映射
#访问本机的1280端口查看是否成功
相关推荐
头疼的程序员32 分钟前
docker学习与使用(概念、镜像、容器、数据卷、dockerfile等)
学习·docker·容器
IT小郭.32 分钟前
使用 Docker Desktop 安装 Neo4j 知识图谱
windows·python·sql·docker·知识图谱·database·neo4j
淡水猫.32 分钟前
hbit资产收集工具Docker(笔记版)
运维·docker·容器
.生产的驴2 小时前
Vue3 加快页面加载速度 使用CDN外部库的加载 提升页面打开速度 服务器分发
运维·服务器·前端·vue.js·分布式·前端框架·vue
程序员JerrySUN2 小时前
Linux 内核核心知识热点题分析:10 个连环打通的难点
linux·运维·服务器
水淹萌龙6 小时前
k8s 中使用 Service 访问时NetworkPolicy不生效问题排查
云原生·容器·kubernetes
honey ball7 小时前
R & S的EMI接收机面板
linux·运维·网络
木下-俱欢颜8 小时前
搭建基于chrony+OpenSSL(NTS协议)多层级可信时间同步服务
运维·网络安全·udp·ssl
alden_ygq9 小时前
K8S cgroups详解
容器·贪心算法·kubernetes
旧故新长9 小时前
访问 Docker 官方镜像源(包括代理)全部被“重置连接”或超时
运维·docker·容器