资讯专栏INFORMATION COLUMN

Docker开源之Docker-Compose

IT那活儿 / 854人阅读
Docker开源之Docker-Compose
[
前言
]

“寒江孤影,江湖故人”。

在Docker走马江湖的青葱岁月里,面对云时代的巍然大势下,Docker曾也浪迹江湖,执三剑以扫天下,饮马江湖,仗剑天涯。今朝声名已著,江湖时传,三剑客也。


Docker三剑客之Docker-Machine

DockerMachine:docker-machine就是docker公司官方提出的用于在各种平台上快速创建具有docker服务的技术,主要是解决docker运行环境问题。


Docker三剑客之Docker-Compose

Docker-compose:是用来定义和运行多容器应用的工具,主要是解决本地docker容器编排问题。


Docker三剑客之Docker-Swarm

DockerSwarm:是Docker社区原生提供的容器集群管理工具,是解决多主机多个容器调度部署的问题。


在docker后续的发展浪潮中,docker-machine的能力范围主要用于处理陈旧系统的中docker部署及远程系统上配置docker的需求。docker-compose作为docker的一项开源项目独立维护。而docker-swarm被docker吸收嵌入到dockerengine中成为docker的子命令。本文仅以docker-compose为出发点,详细分析下其功能作用和配置特点。


[
Docker-compose概述
]


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


Compose通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

使用compose基本上是一个三步过程:

1.用dockerfile,或者镜像定义应用程序的环境,以便在任何地方复制。


2.在docker-compose.yml中定义组成应用程序的服务,以便它们可以在多带带的环境中一起运行。


3.运行dockercompose up启动并运行整个应用程序。

docker-compose将所管理的容器分为3层结构:Project 、Service 、Container。docker-compose.yml组成一个project,project中包括多个service,每个service定义了容器运行的镜像(或构建镜像),网络端口,文件挂载,参数,依赖等,每个service又可以包括同一个镜像的多个容器实例。


[
Docker-compose示例演练
]


部署安装

因为docker-compose的运行还是依赖docker容器的,故docker也是事先部署好的;另外还要注意的是,docker-compose的运行版本也是需要和本地运行的dockerengine的版本是统一的。


Docker安装

$ sudo yum install -y yum-utils


$ sudo yum-config-manager

  --add-repo

  https://download.docker.com/linux/centos/docker-ce.repo


配置dockeryum源:

$ sudo yum install docker-ce docker-ce-cli containerd.io


安装最新版dockerengine:

安装指定版本的dockerengine:

注:文件演示docker安装版本:Dockerversion 18.09.0, build 4d60db4

Docker-compose安装:

$ yum list docker-ce --showduplicates | sort -r


docker-ce.x86_64 3:18.09.1-3.el7                     docker-ce-stable

docker-ce.x86_64 3:18.09.0-3.el7                     docker-ce-stable

docker-ce.x86_64 18.06.1.ce-3.el7                    docker-ce-stable

docker-ce.x86_64 18.06.0.ce-3.el7                    docker-ce-stable


$ sudo yum install docker-ce-

docker-ce-cli- containerd.io

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/

docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

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

$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose


注意:要安装其他版本的Compose,请替换1.26.2 为要使用的Compose版本。另外github网络连接不好的情况可能下载失败,可以去github上直接下载上传到本地服务器。文中docker-compose安装版本:docker-composeversion 1.18.0, build 8dd22a9


[
示例演练
]


本次示例采用的是wordpress+mysql部署一个博客项目:


Docker-compose.yml文件配置内容如下:

version: 3.1

services:

wordpress:

  image: wordpress

  restart: always

  ports:

    - 8080:80

  environment:

    WORDPRESS_DB_HOST: db

    WORDPRESS_DB_USER: wp

    WORDPRESS_DB_PASSWORD: 123456

    WORDPRESS_DB_NAME: wordpress

  volumes:

    - wordpress:/var/www/html


db:

  image: mysql:5.7

  restart: always

  environment:

    MYSQL_DATABASE: wordpress

    MYSQL_USER: wp

    MYSQL_PASSWORD: 123456

    MYSQL_RANDOM_ROOT_PASSWORD: 1

  volumes:

    - db:/var/lib/mysql


volumes:

wordpress:

db:


Docker-compose启动wordpress博客项目,这里统称上述yml文件中描述的服务都是来完成博客项目的,其中service有两个:wordpress服务和MySQL服务。


至此我们使用docker-compose来启动该项目:

#进入docker-compose.yml文件所在目录执行命令

$ sudo docker-compose up -d

#或者启动docker-compose.yml文件来启动

$ sudo docker-compose -f /yml_dir/docker-compose.yml  up -d


查看容器启动情况:

]# docker-compose ps

      Name                       Command               State        Ports        

-------------------------------------------------------------------------------------

wordpress_db_1         docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp

wordpress_wordpress_1  docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp


Wordpress页面配置展示效果:

从演示的结果来看,docker-compose确实完成了我们期望的工作,在一次部署中完成对项目中所有服务的构建管控。从服务器环境上来说,compose使用项目名称的方式将环境相互隔离;并且支持环境变量,方便用户使用这些变量应用在不用的环境中,用户自定义设置变量等方面。从应用上看过了compose的功能特点,接下来我们看看从yml文件配置中看看docker-compose都完成了什么。


[
Yml文件配置概述
]


version:指定docker-compose.yml文件的写法格式

version: 3.1


services:多个服务集合,例如文件中wordpress和db都是服务:

services:

wordpress:

db:


image:指定服务所使用的镜像:

version: 3.1

services:

wordpress:

  image: wordpress


restart:always :配置重启,docker每次启动时会启动该服务

restart:always


ports:定义宿主机端口和容器端口的映射,可使用宿主机IP+宿主机端口进行访问宿主机端口:容器端口


environment:环境变量配置,可以用数组或字典两种方式


volumes:卷挂载路径,定义宿主机的目录/文件和容器的目录/文件的映射  宿主机


ports:

- 8080:80


environment:

WORDPRESS_DB_HOST: db  #此项配置引用 服务 db的名称,

WORDPRESS_DB_USER: wp

WORDPRESS_DB_PASSWORD: 123456

WORDPRESS_DB_NAME: wordpress


volumes:#此处wordpress为数据卷

- wordpress:/var/www/html


路径:容器路径


[
Docker-compose命令概述
]


docker-composepull:拉取服务里定义的镜像

docker-composeps :列出project所有运行容器(容器名= 目录名_service_index index表示容器序数,从1开始)


docker-composebuild:构建/重新构建所有镜像

docker-composestart [serviceName]:启动已存在但停止的所有service;

(可选)[serviceName]:表示启动某一个service

docker-composeup -d(相当于build + start ):构建(容器)并启动(容器)整个project的所有service

-d:后台进程

--scale:指定服务运行的容器个数

docker-composestop [serviceName]:停止运行的service

(可选)[serviceName]:表示停止某一个service

docker-composerm -f [serviceName]:删除已停止的所有service

(可选)[serviceName]:表示删除已停止某一个service

-f :删除不在询问

docker-composedown -v(相当于stop + rm):停止并移除整个project的所有services

-v:删除挂载卷和volunme的链接

docker-composelogs [serviceName]:查看服务内所有容器日志输出

(可选)[serviceName]:表示输出某一个service的日志

-f:实时输出日志

docker-composerun [serviceName] command:在某个服务上运行命令

eg:docker-compose run web ping www.baidu.com

docker-composeexec [serviceName] sh:进入到某个容器

--index:2 :当服务内有多个容器时,需要指定第几个,默认是第一个

eg:docker-composeexec --index=2 web sh

docker-composerestart [serviceName] : 重启服务

docker-composeconfig:验证和查看compose文件

docker-compose images:列出所用的镜像

docker-cpmposescale:设置服务个数Eg:docker-compose scale web=2 worker=3

docker-composepause [serviceName]:暂停服务

docker-composeunpause [serviceName]:恢复服务


[
总结
]


通过本次演练完整了体现了docker-compose在单台主机上运行多个独立环境的能力及环境变量设置等有力手段,其实compose在对数据卷的使用及只重新创建改变的容器方式也极大的提高了compose的使用便利性。但局限性也很明显就是单台服务器上部署,无法保证高可用性,故而在越来越多的集群方式的环境下,使用场景也变的单一。所以在后续的使用中,要切合场景要求,一切以现场实际为出发点,提出有效正确的方案。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130141.html

相关文章

  • 开发中常用服务 docker-compose.yml 配置文件

    摘要:常用服务配置一些基础服务的配置文件,方便在一台新电脑上快速开始工作不必输入一长串命令来启动对应服务,并且可以做到持久化。 docker-compose 常用服务配置 一些基础服务的docker-compose配置文件,方便在一台新电脑上快速开始工作 不必输入一长串docker命令来启动对应服务,并且可以做到持久化。 代码托管在 https://github.com/shiguanghu...

    lixiang 评论0 收藏0
  • vue项目前端错误收集sentry

    摘要:我创建了一个名为的项目。错误信息查看在后台找到我们的项目,点击进去就能看到多了一条错误信息。它由以下几部分组成,分别是协议公钥私钥主机路径一般为空项目。 sentry简介 Sentry 是一个开源的错误追踪工具,可以帮助开发人员实时监控和修复系统中的错误。其专注于错误监控以及提取一切事后处理所需的信息;支持几乎所有主流开发语言(JS/Java/Python/php)和平台, 并提供了w...

    RaoMeng 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<