Docker Compose

1.Docker Compose概述

(1)传统的容器管理

Dockerfile文件 -> 手动执行 docker build 一个个镜像的构建 -> 手动执行 docker run 一个个容器的创建和启动

(2)容器编排管理

Dockerfile文件 -> 在docker-compose.yml配置模板文件里定义容器启动参数和依赖关系
Dockerfile文件-> 执行docker-compose命令指定配置模板文件,根据模板文件的配置一键完成所有镜像的构建和容器的创建启动

(3)docker-compose

是一个可以实现在单机上对容器集群编排管理的工具。
使用python开发的,能运行docker的平台也都能用docker-compose编排管理容器。

本质:就是在yaml格式的docker-compose配置模板文件里定义一个或多个服务及其容器的启动参数和依赖关系,并使用docker-compose命令根据配置模板文件中的参数来启动和管理容器。

(4)docker-compose的三大概念

项目project
服务service
容器container

项目project -> 包含一个或多个服务service -> 包含容器container的镜像、端口映射、数据卷、环境变量、依赖关系等启动参数

默认使用项目的目录名作为project的项目名,也支持使用 -p 或 --project-name 选项指定项目名称
项目目录里要包含一个docker-compose配置模板文件,默认为docker-compose.yml,也支持使用 -f 或 --file 选项指定项目的配置模板文件
在配置模板文件里要包含一个或多个服务及其容器的配置,每个服务要包含容器的名称、镜像、映射端口、数据卷、网络模式、依赖关系等容器的启动参数

2.compose 部署

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

(1)Docker Compose 环境安装


https://github.com/docker/compose/tags
#下载
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

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

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

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

(1)Docker Compose配置模板文件常用的字段

字段                               		描述
image                使用本地镜像或从仓库拉取镜像创建容器
build:               使用dockerfile现场构建镜像创建容器
  context:               指定dockerfile文件所在的目录路径
  dockerfile:            指定dockerfile文件名
command              设置容器的启动命令,会覆盖镜像中的CMD指令
container_name       设置容器名   --name 
environment          设置环境变量  -e  -env  
networks             设置容器使用的自定义网络和IP  --ip
network_mode         设置容器的网络模式  --network
ports                设置容器端口映射  -p
volumes              设置数据卷挂载   -v
volumes_from         设置数据卷容器挂载,版本3不支持  --volumes-from
hostname             设置容器主机名   -h  --hostname
sysctls              设置容器的内核参数  --sysctl
links                设置容器互联   --link
privileged           设置容器拥有root权限  --privileged
restart              设置容器重启策略   --restart
depends_on           设置容器的依赖关系


(2)yaml格式文

yaml格式文件: 文件名以 .yaml .yml 为后缀,用 空格缩进 表示字段的层级关系,特点:可读性高,易于人类管理

#一级字段
key1: value1              #一个key只有一个值,值的类型为 纯量
key2: 

- value1                        #一个key有多个值的纵向格式,值的类型为 列表

- value2
  key3: ["value1", "value2"]      #一个key有多个值的横向格式,值的类型为 数组
  key4:
  #二级字段
  subkey1: value1               #用 空格缩进 表示字段的层级关系,同一层字段要靠左对齐
  subkey2:value2
  subkey3:                      #key的值也是键值对,值的类型为 对象
    #三级字段
    sskey1: value1
  sskey2: value2

  

json格式文件:文件名以 .json 为后缀,用 大括号{} 表示字段的层级关系,每层字段除了最后一个字段都要用逗号 , 结尾,特点:易于编程语言的api接口解析
#一级字段
{
   "key1": ["value1"],
   "key2": ["value2", "value3"],
   "key3": {
      #二级字段
      "subkey1": ["value1"],
      "subkey2": ["value2"],
      "subkey3": {
         #三级字段
         "sskey1": ["value1"],
         "sskey2": ["value2"]
      }
   }
}


key1:           值相当于echo "helloworld"
  hello
  world

key2: |         值相当于echo -e "hello\nworld"      #key: |  表示保留文本块中的换行符
  hello
  world

key3: |-        值相当于echo -e "hello\nworld\c"
  hello
  world

key4: |+        值相当于echo -e "hello\nworld\n"
  hello
  world

key5: > hello       值相当于echo  "hello world"    #> 会将文本块中的回车替换为空格
  world

key1: &a value1      #定义数据锚点,即定义复制的数据,相当于 a="value1"
key2: *a             #引用锚点数据,值相当于为 echo $a ,  key2: "value1"

4.Docker Compose 常用命令

字段 描述
build 重新构建服务
ps 列出容器
up 创建和启动容器
exec 在容器里面执行命令
scale 指定一个服务容器启动数量
top 显示容器进程
logs 查看容器输出
down 删除容器、网络、数据卷和镜像
stop/start/restart 停止/启动/重启服务
docker run -d  选项  镜像名:标签  [容器启动命令] 
docker-compose [-f docker-compose.yml] up -d        根据模板文件创建并后台启动所有容器
                                       down                  根据模板文件删除所有容器
									   ps                    根据模板文件查看所有容器状态
									   start|stop|restart    根据模板文件启动|停止|重启所有容器

5.Docker Compose 文件结构

(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 <wl>
  #添加环境包
  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



注:


(2)编写配置文件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
  
cd /opt/compose_nginx/
  
docker-compose -f docker-compose.yml up -d    #启动
docker -compose down   #启动
docker ps -a
cd /opt/compose_nginx/
docker-compose ps					#必须在docker-compose.yml所在目录执行此命令
-f, --file FILE 使用特定的 compose 模板文件,默认为 docker-compose.yml
-p, --project-name NAME 指定项目名称,默认使用目录名称
-d 在后台运行











posted @ 2024-07-24 14:41  无敌小鲁班  阅读(39)  评论(0编辑  收藏  举报