Docker-compose

目录

一.compose基本内容

1.产生

2.简介

3.详细内容

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

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

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

[(4)Docker-compose项目由python编写,调用docker服务提供的API来对容器进行管理。因此,只需要所操作的平台支持Docker API,就可以在其上利用compose来进行编排管理。](#(4)Docker-compose项目由python编写,调用docker服务提供的API来对容器进行管理。因此,只需要所操作的平台支持Docker API,就可以在其上利用compose来进行编排管理。)

二.YAML简介

1.定义

2.注意事项

(1)大小写敏感

(2)通过缩进表示层级关系

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

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

(5)用#号注释

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

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

3.支持数据结构

(1)对象,键值对的集合

(2)数组,一组按次序排列的值,又称序列

(3)纯量,单个的,不可再分的值

三.compose常用命令及配置

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

2.数据结构

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

[4.docker compose文件结构](#4.docker compose文件结构)

[四.docker compose部署nginx](#四.docker compose部署nginx)

[1.docker compose安装部署](#1.docker compose安装部署)

2.准备依赖文件

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

4.生成镜像容器

5.访问测试

6.查看结构

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


一.compose基本内容

1.产生

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

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

2.简介

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

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

3.详细内容

(1)Docker-compose的工程配置文件默认为docker-compose.yml,可以通过环境变量compose_file或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。
(2)使用一个dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
(3)compose允许用户通过一个单独的docker-compose.yml模板文件(YAML)格式来定义一组相关联的应用容器为一个项目(project)。
(4)Docker-compose项目由python编写,调用docker服务提供的API来对容器进行管理。因此,只需要所操作的平台支持Docker API,就可以在其上利用compose来进行编排管理。

二.YAML简介

1.定义

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

2.注意事项

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

3.支持数据结构

(1)对象,键值对的集合
(2)数组,一组按次序排列的值,又称序列
(3)纯量,单个的,不可再分的值

三.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.准备依赖文件

复制代码
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

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端口查看是否成功
相关推荐
jugt23 分钟前
CentOS 7.9安装Nginx1.24.0时报 checking for LuaJIT 2.x ... not found
linux·运维·centos
21号 12 小时前
9.进程间通信
linux·运维·服务器
阿福不是狗4 小时前
Python使用总结之Mac安装docker并配置wechaty
python·macos·docker
叶落闲庭7 小时前
【k8s】k8s集群搭建
云原生·容器·kubernetes
搬码临时工7 小时前
电脑同时连接内网和外网的方法,附外网连接局域网的操作设置
运维·服务器·网络
藥瓿亭7 小时前
K8S认证|CKS题库+答案| 3. 默认网络策略
运维·ubuntu·docker·云原生·容器·kubernetes·cks
xyhshen8 小时前
k8s下离线搭建elasticsearch
elasticsearch·容器·kubernetes
Gaoithe8 小时前
ubuntu 端口复用
linux·运维·ubuntu
椰汁菠萝9 小时前
k8s集群安装坑点汇总
云原生·容器·kubernetes
背太阳的牧羊人9 小时前
sudo docker exec -it backend bash 以交互方式(interactive)进入正在运行的 Docker 容器的命令行环境
docker·容器·bash