Docker-Compose介绍、安装及使用

一、Docker-Compose简介

参考Docker基础知识和使用示例 Docker:Docker Compose 详解

Docker快速入门——Docker-Compose

前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知。

使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。然而在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。而使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。

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

Docker-Compose的工程配置文件默认为docker-compose.yml,其定义了多个有依赖关系的服务及每个服务运行的容器。

比如说,一个项目有数据库服务mysql-service、远程字典服务redis-service和项目自身的Web服务seckill(秒杀系统),其docker-compose.yml如下所示,此yml文件将上诉几个容器关联为一个项目,默认直接从上到下按顺序启动容器,所以seckill需要放最后。

version: "2"
services:
  mysql-service:
    image: mysql:5.7  #指定服务所使用的镜像
    ports:
      - "3306:3306"
    restart: always
    environment: #环境变量配置
      MYSQL_ROOT_PASSWORD: "123456"
      MYSQL_DATABASE: "dev"
      MYSQL_USER: "developer"
      MYSQL_PASSWORD: "123456"
  redis-service:
    image: redis
    command: redis-server --requirepass 123456  #覆盖容器启动后默认执行的命令
    ports:
      - "6379:6379"
    restart: always
  seckill:
    restart: always
    build: ./ 	#Compose将会利用Dockerfile自动构建镜像,然后使用镜像启动服务容器。
    ports:  # 暴露端口信息  - "宿主机端口:容器暴露端口"
      - "8000:8000"
    links:  #链接到其它服务中的容器
      - mysql-service:mysql
      - redis-service:redis

二、安装 Docker Compose

通过下面命令自动下载适应版本的 Compose,并为安装脚本添加执行权限。github源不稳定,速度极慢。建议使用daocloud源。

#github源
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

#daocloud源
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Docker相关换源参考:Docker快速安装以及换镜像源

查看安装是否成功

docker-compose -v

输出

docker-compose version 1.25.0, build 0a186604

三、Docker-Compose模板文件示例

1、docker-compose模板文件编写

docker-compose.yaml文件如下:

version: '2'
services:
  web1:
    image: nginx
    ports: 
      - "6061:80"
    container_name: "web1"
    networks:
      - dev
  web2:
    image: nginx
    ports: 
      - "6062:80"
    container_name: "web2"
    networks:
      - dev
      - pro
  web3:
    image: nginx
    ports: 
      - "6063:80"
    container_name: "web3"
    networks:
      - pro

networks:
  dev:
    driver: bridge
  pro:
    driver: bridge

docker-compose.yaml文件指定了三个web服务。

2、启动应用

创建一个webapp目录,将docker-compose.yaml文件拷贝到webapp目录下,使用docker-compose启动应用。

docker-compose up -d

3、服务访问

通过浏览器访问web1,web2,web3服务:
http://127.0.0.1:6061
http://127.0.0.1:6062
http://127.0.0.1:6063

运行结果如下:

root@zhongzhanhui-VirtualBox:/home/zhongzhanhui/GoProject# mkdir docker_compose_try
root@zhongzhanhui-VirtualBox:/home/zhongzhanhui/GoProject# cd docker_compose_try/
root@zhongzhanhui-VirtualBox:/home/zhongzhanhui/GoProject/docker_compose_try# vi docker-compose.yaml
root@zhongzhanhui-VirtualBox:/home/zhongzhanhui/GoProject/docker_compose_try# docker-compose up -d
Creating network "docker_compose_try_dev" with driver "bridge"
Creating network "docker_compose_try_pro" with driver "bridge"
Pulling web1 (nginx:)...
latest: Pulling from library/nginx
000eee12ec04: Pull complete
eb22865337de: Pull complete
bee5d581ef8b: Pull complete
Digest: sha256:50cf965a6e08ec5784009d0fccb380fc479826b6e0e65684d9879170a9df8566
Status: Downloaded newer image for nginx:latest
Creating web2 ... done
Creating web3 ... done
Creating web1 ... done

浏览器输入上述三个服务的地址后,都显示"Welcome to nginx!",代表nginx服务启动成功。

输入命令docker ps查看现在正在运行的容器

root@zhongzhanhui-VirtualBox:/home/zhongzhanhui/GoProject/docker_compose_try# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
325541bca9c3        nginx               "nginx -g 'daemon of…"   6 minutes ago       Up 5 minutes        0.0.0.0:6063->80/tcp   web3
e2106b09e031        nginx               "nginx -g 'daemon of…"   6 minutes ago       Up 5 minutes        0.0.0.0:6061->80/tcp   web1
f972b5a3c391        nginx               "nginx -g 'daemon of…"   6 minutes ago       Up 5 minutes        0.0.0.0:6062->80/tcp   web2

可见有web1、web2、web3这三个容器正在运行中。

发布了131 篇原创文章 · 获赞 12 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_41519463/article/details/103472297