Docker之Compose

目录

前言

[1.1Docker Swarm与Docker Compose](#1.1Docker Swarm与Docker Compose)

[1.1.1Docker Swarm](#1.1.1Docker Swarm)

[1.1.2Docker Compose](#1.1.2Docker Compose)

[1.1.2.1 三层容器](#1.1.2.1 三层容器)

​编辑

二、YAML

2.1YAML概述

2.2注意事项

[2.3Docker Compose 环境安装](#2.3Docker Compose 环境安装)

2.3.1下载

三、Docker-Compose配置常用字段

四、Docker-compose常用命令

五、Docker-Compose文件结构

5.1准备依赖文件

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


前言

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

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

一、Docker-compose概述

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

Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。

Compose可在所有环境中工作:生产,分期,开发,测试以及CI工作流。

1.1Docker Swarm与Docker Compose

1.1.1Docker Swarm

可以管理跨节点容器

1.1.2Docker Compose

管理单主机节点的所有容器

1.1.2.1 三层容器

工程(project)、服务(service)、容器(container)

二、YAML

2.1YAML概述

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

2.2注意事项

  • 大小写敏感

  • 通过缩进表示层级关系

  • 不支持制表符tab间缩进,只能使用空格缩进,同层级左侧对齐,通常开通缩进两个空格

  • 用 # 注释

  • 符号字符缩进一个空格,如 : , / -

  • 如果包含特殊字符字符用单引号 '' 引起来作为普通字符

  • 布尔值

    • debug: true

    • debug: false

2.3Docker Compose 环境安装

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

2.3.1下载

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

三、Docker-Compose配置常用字段

字段 描述
build 指定 Dockerfile 文件名
dockerfile 构建镜像上下文路径 Dockerfile的名称 Dockerfile-nginx
context 可以是 dockerfile 的路径,或者是指向 git 仓库的 url 地址 指定 Dockerfile在哪个目录当中
image 指定镜像
command 执行命令,覆盖容器启动后默认执行的命令
container_name 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量
deploy 指定部署和运行服务相关配置,只能在 Swarm 模式使用
environment 添加环境变量
networks 加入网络,引用顶级networks下条目
network_mode 设置容器的网络模式,如 host,bridge,...
ports 暴露容器端口,与 -p 相同,但端口不能低于 60
volumes 挂载一个宿主机目录或命令卷到容器,命名卷要在顶级 volumes 定义卷名称
volumes_from 从另一个服务或容器挂载卷,可选参数 :ro 和 :rw,仅版本 '2' 支持
hostname 容器主机名
sysctls 在容器内设置内核参数
links 连接到另外一个容器,- 服务名称[:服务别名]
privileged 用来给容器root权限,注意是不安全的,true | false
restart 设置重启策略,no,always,no-failure,unless-stoped
depends_on 在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,可能会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。depends_on标签用于解决容器的依赖、启动先后的问题。

四、Docker-compose常用命令

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

五、Docker-Compose文件结构

bash 复制代码
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					#站点网页

5.1准备依赖文件

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

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

bash 复制代码
vim /opt/compose_nginx/docker-compose.yml
version: '3'    1 2 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

-f, --file FILE :使用特定的 compose 模板文件,默认为 docker-compose.yml

-p, --project-name NAME :指定项目名称,默认使用目录名称

-d :在后台运行

bash 复制代码
docker ps -a
CONTAINER ID   IMAGE                 COMMAND     CREATED              STATUS              PORTS                                         NAMES
b48dceee248f   compose_nginx_nginx   "/run.sh"   About a minute ago   Up About a minute   0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp   compose_nginx_nginx_1

cd /opt/compose_nginx/
docker-compose ps					#必须在docker-compose.yml所在目录执行此命令
相关推荐
Ghost Face...18 小时前
Docker实战:从安装到多容器编排指南
运维·docker·容器
此生只爱蛋19 小时前
【Linux】正/反向代理
linux·运维·服务器
qq_54702617919 小时前
Linux 基础
linux·运维·arm开发
废春啊19 小时前
前端工程化
运维·服务器·前端
我只会发热19 小时前
Ubuntu 20.04.6 根目录扩容(图文详解)
linux·运维·ubuntu
爱潜水的小L19 小时前
自学嵌入式day34,ipc进程间通信
linux·运维·服务器
zhuzewennamoamtf19 小时前
Linux I2C设备驱动
linux·运维·服务器
TSAI19 小时前
Docker Swarm 集群部署 Eureka 服务注册中心:高可用微服务架构的基石
spring cloud·docker
不惑_19 小时前
Windows 安装 Docker 和 Docker Compose 完整教程
windows·docker·容器
邂逅星河浪漫20 小时前
【域名解析+反向代理】配置与实现(步骤)-SwitchHosts-Nginx
linux·nginx·反向代理·域名解析·switchhosts