Docker Compose(单机编排)

Docker Compse介绍

当在宿主机启动较多的容器时候,如果都是手动操作会觉得比较麻烦而且容易出错,此时推荐使用docker 单机编排工具 docker-compose。
docker-compose 是 docker 容器的一种单机编排服务,docker-compose 是一个管理多个容器的工具,比如: 可以解决容器之间的依赖关系,就像启动一个nginx 前端服务的时候会调用后端的tomcat,那就得先启tomcat,但是启动tomcat 容器还需要依赖数据库,那就还得先启动数据库,docker-compose 可以用来解决这样的嵌套依赖关系,并且可以替代docker命令对容器进行创建、启动和停止等手工的操作。
因此,如果说docker命令就像linux的命令,docker compse就像shell脚本,可以自动的执行容器批量操作,从而实现自动化的容器管理,或者说docker命令相当于ansible命令,那么docker compose文件,就相当于ansible-playbook的yaml文件。
docker-compose 项目是Docker 官方的开源项目,负责实现对Docker 容器集群的快速编排,docker-compose 将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。

在这里插入图片描述
yml语言
AML 文件格式及编写注意事项:
YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。
类似于 json 数据描述语言,语法比 json 简单的很多。
YAML 数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号 [] 括起来, hash 用花括号 {} 括起来。

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

  • 大小写敏感
  • 通过缩进表示层级关系
  • 不支持制表符 tab 键缩进,只能使用空格缩进
  • 缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
  • 用 # 号注释
  • 符号字符后缩进1个空格,如冒号 : 、逗号 , 、横杠 -
  • 如果包含特殊字符用单引号(‘’)引起来会作为普通字符串处理,双引号(“”): 特殊字符作为本身想表示的意思
指令作用演示
build指定构建上下文和可选的Dockerfile用于构建镜像。build: context: /opt/test dockerfile: Dockerfile
dockerfile指定Dockerfile的路径。通常在build部分中使用。dockerfile: Dockerfile.prod
context指定构建上下文的路径,即包含Dockerfile和构建上下文的目录路径context: /opt/test
image指定用于服务/容器的镜像名称。image: myapp:latest
command覆盖由镜像指定的默认命令command: [“python”, “app.py”]
container_name为容器指定自定义名称。container_name: my_container
deploy指定部署选项,如副本和放置deploy: replicas: 3
environment为服务指定环境变量environment: - DEBUG=true
networks指定连接服务的网络networks: - frontend - backend
network_mode指定容器的网络模式network_mode: “host”
ports:将容器端口映射到主机端口ports: - “8080:80”
volumes挂载主机或其他容器的卷volumes: - "nginx-data:/usr/local/nginx/html
volumes_from从另一个服务/容器挂载卷volumes_from: - data-container
hostname:指定主机名hostname: my-container
sysctls为容器设置内核参数sysctls: - net.core.somaxconn=1024
restart重启策略restart: always
depends_on指定该服务依赖的其他服务depends_on: - mysql

常用指令
命令只能在docker-compose.yml的目录下执行。

命令解释
build#构建镜像
bundle#从当前docker compose 文件生成一个以<当前目录>为名称的json格式的Docker Bundle 备份文件
config -q#查看当前配置,没有错误不输出任何信息
create#创建服务,较少使用
down#停止和删除所有容器、网络、镜像和卷
events#从容器接收实时事件,可以指定json 日志格式,较少使用
exec#进入指定容器进行操作
help#显示帮助细信息
images#显示镜像信息,较少使用
kill#强制终止运行中的容器
logs#查看容器的日志
pause#暂停服务
port#查看端口
ps#列出容器,较少使用
pull#重新拉取镜像,镜像发生变化后,需要重新拉取镜像,较少使用
push#上传镜像
restart#重启服务,较少使用
rm#删除已经停止的服务
run#一次性运行容器
scale#设置指定服务运行的容器个数
start#启动服务 ,较少使用
stop#停止服务,较少使用
top#显示容器运行状态
unpause#取消暂定
up#创建并启动容器 ,较少使用

安装和准备

可以通过yum安装,也可以通过二进制安装。

yum install  epel-release.noarch  -y
yum -y install docker-compose
先装epel源。

查看命令格式

选项含义
-f,–file FILE指定Compose 模板文件,默认为docker-compose.yml
-p,–project-name NAME指定项目名称,默认将使用当前所在目录名称作为项目名。
–verbose显示更多输出信息
–log-level LEVEL定义日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL)
–no-ansi不显示ANSI 控制字符
-v, --version显示版本

docker compse文件格式

docker compose 文件是一个yaml格式的文件,所以注意行首的缩进很严格默认docker-compose命令会调用当前目录下的docker-compose.yml的文件,因此一般执行docker-compose命令前先进入docker-compose.yml文件所在目录。

实际操作

启动单台容器

docker compose文件可以任意目录,创建文件名为docker-compose。yml配置文件,需要注意前后的缩进。

准备yml文件。

version: '2.1'  
services:  
  server-nginx-web:  
    image: nginx  
    container_name: web1  
    expose:  
      - 80  
      - 443  
    ports:  
      - "80:80"  
      - "443:443"

docker-compose up启动即可。
docker-compose up是前台启动;docker-compose up -d是后台启动。
在这里插入图片描述
docker-compose down会将容器删除。
docker-compose kill 只是退出容器。
docker-compose rm 只删除停止的容器。
docker-compose events 查看事件。
在这里插入图片描述

启动多个容器

version: '2.1'  

services:  
  server-nginx-web:  
    image: nginx  
    container_name: web1  
    expose:  
      - 80  
      - 443  
    ports:  
      - "80:80"  
      - "443:443"  

  server-tomcat:  
    image: tomcat  
    container_name: tomcat1

在这里插入图片描述

编写compose文件

services:
  nginx:
    container_name: web1
    hostname: nginx
    build:
      context: /data/dockerfile/system/centos/centos7/
      dockerfile: Dockerfile
    ports:
      - 1216:80
      - 1217:443
    networks:
      mynet:
        ipv4_address: 172.18.0.10
    volumes:
      - ./wwwroot:/usr/local/nginx/html
networks:
  mynet:
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.0.0/16

services: 定义了要运行的服务。

nginx: Nginx 服务的配置。

container_name: 指定容器的名称为 web1。

hostname: 指定容器的主机名为 nginx。

build: 指定了构建 Nginx 容器所需的上下文和 Dockerfile。

ports: 将主机端口 1216 映射到容器的 80 端口,将主机端口 1217 映射到容器的 443 端口。

networks: 将服务连接到名为 lnmp 的自定义网络。

volumes: 将主机上的 ./wwwroot 目录挂载到容器中的 /usr/local/nginx/html 目录。

networks: 定义了自定义网络。

lnmp: 自定义网络的配置。

driver: 网络驱动程序为 bridge。

ipam: IP 地址管理配置。

config: 子网配置,指定了 IP 地址范围。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值