【docker-compose】docker-compose的详细使用

一、Docker Compose

1、前言
我们知道使⽤⼀个 Dockerfile 模板⽂件,可以让⽤户很⽅便的定义⼀个单独的应⽤容器。然⽽,在⽇常⼯作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。
例如要实现⼀个 Web 项⽬,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚⾄还包括负载均衡容器等,我们只能一个一个`写dockerfile文件,然后bulid构建,run手动操作单个容器`

Compose 恰好满⾜了这样的需求。它允许⽤户通过⼀个单独的 docker-compose.yml 模板⽂件(YAML 格式)
来定义⼀组相关联的应⽤容器为⼀个项⽬(project).
 微服务。 100个微服务!依赖关系。
# Compose 项⽬是 Docker 官⽅的开源项⽬,负责实现对 Docker 容器集群的快速编排。
2、官方介绍

Docker Compose来轻松高效的管理容器,定义运行多个容器。

1、Compose 中有两个重要的概念
# 1、服务 ( service ):
⼀个应⽤的容器,实际上可以包括若⼲运⾏相同镜像的容器实例(web、redis、mysql ...)# 2、项⽬ ( project ):
由⼀组关联的应⽤容器组成的⼀个完整业务单元,在 docker-compose.yml ⽂件中定义(博客、web、mysql)# 启动docker-compose up 可以启动多个服务
2、三步骤
1、Dockerfile 保证我们的项目可以在任何地方运行。

2、定义组成您的应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。
# services 什么是服务
# docker-compose.ym 这个文件如何写

3、运行docker compose up和码头工人组成命令启动并运行你的整个应用程序。

   也可以docker-compose up使用 docker-compose 二进制文件运行。 # 启动项目
3、Compose是Docker官方的开源项目,需要安装!
dockerfile # 让程序在任何地方运行。 web服务、redis、mysql、nginx ... d  多个服务 启动
4、Compose:重要的概念
1、YAML file配置文件。
2、single command。 命令有哪里
3、Compose 适用于所有环境:生产、登台、开发、测试以及 CI 工作流。
4、Compose 的默认管理对象是项⽬,通过⼦命令对项⽬中的⼀组容器进⾏便捷地⽣命周期管理。
5、Compose 项⽬由 Python 编写,实现上调⽤了 Docker 服务提供的 API 来对容器进⾏管理。因此,只要所操作的平
台⽀持 Docker API,就可以在其上利⽤ Compose 来进⾏编排管理。

# Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。

二、docker compose 安装

# 官网安装: https://docs.docker.com/compose/install/

在这里插入图片描述

1、下载
方式一:
# 1、官网安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
方式二:
# 2、国内
curl -L "https://get.daocloud.io/docker/compose/releases/download/1.25.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

[root@docter bin]# ll
total 12440
-rw-r--r-- 1 root root 12737304 Jul 14 20:19 docker-compose
2、bash命令补全
curl -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
3、卸载(没有安装不需要执行)

如果是⼆进制包⽅式安装的,删除⼆进制⽂件即可。

 sudo rm /usr/local/bin/docker-compose
4、授权
[root@docter bin]# sudo chmod +x /usr/local/bin/docker-compose
5、检测版本
[root@docter bin]# docker-compose version
docker-compose version 1.29.2, build 5becea4c
docker-py version: 5.0.0
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

三、docker compose使⽤

1、相关概念
# 1、服务 ( service ):
⼀个应⽤容器,实际上可以运⾏多个相同镜像的实例。

# 2、项⽬ ( project ):
由⼀组关联的应⽤容器组成的⼀个完整业务单元。∂⼀个项⽬可以由多个服务(容器)关联⽽成, Compose ⾯向项⽬进⾏管理。
2、场景
最常⻅的项⽬是 web ⽹站,该项⽬应该包含 web 应⽤和缓存。
1、Django应⽤
2、mysql服务
3、redis服务
4、elasticsearch服务
.......
3.docker-compose模板
# 1、编写docker-cmpsoe文件
[root@docter docker-compose]#vim docker-compose.yaml 
version: "3.0"
services:
   mysqldb:
     image: mysql:5.7.19
     container_name: mysql
     ports:
       - "3306:3306"
     volumes:
        - /root/mysql/conf:/etc/mysql/conf.d
        - /root/mysql/logs:/logs
        - /root/mysql/data:/var/lib/mysql
     environment:
       MYSQL_ROOT_PASSWORD: root
     networks:
       - ems
     depends_on:
       - redis
   redis:
      image: redis:4.0.14
      container_name: redis
      ports:
        - "6379:6379"
      networks:
        - ems
      volumes:
        - /root/redis/data:/data
      command: redis-server
    
networks:
  ems:
# 2、启动docker-compose
[root@docter docker-compose]# docker-compose up -d
Creating network "docker-compose_ems" with the default driver
Creating redis ... done
Creating mysql ... done
# 3、查看容器
方式一:
[root@docter docker-compose]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                       NAMES
15d11b1c45de   mysql:5.7.19   "docker-entrypoint.s…"   24 seconds ago   Up 24 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   mysql
5bf22e44ff81   redis:4.0.14   "docker-entrypoint.s…"   24 seconds ago   Up 24 seconds   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   redis
方式二:# (推荐)docker-compose.yaml 必须在当前目录
[root@docter docker-compose]# docker-compose ps
Name               Command               State                    Ports                  
-----------------------------------------------------------------------------------------
mysql   docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp,:::3306->3306/tcp
redis   docker-entrypoint.sh redis ...   Up      0.0.0.0:6379->6379/tcp,:::6379->6379/tcp
4、启动
[root@docter ~]# docker-compose up //前台启动⼀组服务
[root@docter ~]# docker-compose up -d //守护进程启动⼀组服务
5、docker-compose 模板⽂件

1、模板⽂件是使⽤ Compose 的核⼼

2、默认的模板⽂件名称为 docker-compose.yml ,格式为 YAML 格式。

version: "3"
services:
   webapp:
     image: examples/web
     ports:
       - "80:80"
     volumes:
       - "/data"
1、build

⾃动构建这个镜像

格式:
    build: ./dir

# 1、准备文件
[root@docter jave]# ll
total 4
-rw-r--r-- 1 root root  62 Jul 30 20:35 docker-compose.yaml
drwxr-xr-x 5 root root 122 Jul 30 19:15 springboot-master
# 2、编写docker-compose.yaml文件
[root@docter jave]# vim docker-compose.yaml 
version: '3'
services:
  jave:
    build: ./springboot-master
    ports:
      - "8080:8080"
# 3、启动docker-compose
[root@docter jave]# docker-compose up -d
Creating network "jave_default" with the default driver
Creating jave_jave_1 ... done

# 4、查看docker-compose是否启动
方式一: 推荐 #docker-compose必须在当前目录,否则启动不了
[root@docter jave]# docker-compose ps
   Name                  Command               State                    Ports                  
-----------------------------------------------------------------------------------------------
jave_jave_1   /bin/sh -c java -jar GitLa ...   Up      0.0.0.0:8080->8080/tcp,:::8080->8080/tcp
方式二:
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                                       NAMES
fa6682dbba66   jave_jave   "/bin/sh -c 'java -j…"   2 minutes ago   Up 2 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   jave_jave_1

在这里插入图片描述

2、command

覆盖容器启动后默认执⾏的命令

格式:
command: echo "hello world" 

# 1、编写docker-compose.yaml文件
[root@docter jave]# cat docker-compose.yaml 
version: '3'
services:
  jave:
    build: ./springboot-master
    command: echo "hello world" 
    ports:
      - "8080:8080"
# 2、启动docker-compose
[root@docter jave]# docker-compose up -d
Recreating jave_jave_1 ... done
# 3、查看容器 
[root@docter jave]# docker-compose ps
   Name           Command        State    Ports
-----------------------------------------------
jave_jave_1   echo hello world   Exit 0      #显示 hello world

3、container_name

指定容器名称,默认将会使⽤ 项⽬名称_服务名称_序号 这样的格式

格式:
container_name: docker-web-jave 

# 1、编写docker-compose.yaml文件
[root@docter jave]# vim docker-compose.yaml 
version: '3'
services:
  jave:
    build: ./springboot-master
    container_name: docker-web-jave
# 2、启动docker-compose
[root@docter jave]# docker-compose up -d
Creating network "jave_default" with the default driver
Creating docker-web-jave ... done
# 3、查看docker-compose
[root@docter jave]# docker-compose ps
     Name                    Command               State    Ports  
-------------------------------------------------------------------
docker-web-jave   /bin/sh -c java -jar GitLa ...   Up      8080/tcp   # 显示名称docker-web-jave 

# 注意: 指定容器名称后,该服务将⽆法进⾏扩展(scale),因为 Docker 不允许多个容器具有相同的名称。
5、depends_on

解决容器的依赖、启动先后的问题

格式:
    depends_on:
      - php
      - nginx
  php:
    image: php
  nginx:
    image: nginx
# 1、准备文件
[root@docter lnmp]# ll
total 4
-rw-r--r-- 1 root root 138 Jul 30 21:08 docker-compose.yaml
drwxr-xr-x 2 root root  80 Jul 30 20:04 nginx
drwxr-xr-x 2 root root  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值