Docker-Compose概述(上)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
全局流量管理 GTM,标准版 1个月
简介: Docker-Compose概述(上)

一、Docker-Compose简介


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


  • Compose是一个定义和管理多容器的工具,也是一种容器编排工具,前身是Pig,使用Python语言编写。使用Compose配置文件描述多个容器应用的架构,build使用什么镜像,数据卷,映射端口等;然后一条命令管理所有服务,比如启动,停止,重启。简化部署多个容器的操作。


  • Docker-compose是一个定义和管理多容器的工具,主要用来编排相关联的容器。


  • Compose 使用的三个步骤:


  1. 使用 Dockerfile 定义应用程序的环境。
  2. 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  3. 最后,执行 docker-compose up 命令来启动并运行整个应用程序。


二、Docker-Compose安装


最新下载地址:https://docs.docker.com/compose/install/


(1)下载二进制文件安装Compose

[root@Centos7 ~]# curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   633  100   633    0     0     86      0  0:00:07  0:00:07 --:--:--   131
100 12.1M  100 12.1M    0     0  32848      0  0:06:27  0:06:27 --:--:-- 81655
[root@Centos7 ~]# cd /usr/local/bin/
[root@Centos7 bin]# ll | grep docker-compose
-rw-r--r-- 1 root root 12737304 7月  29 17:20 docker-compose
[root@Centos7 bin]# chmod a+x docker-compose 
[root@Centos7 bin]# docker-compose -version   #查看版本
docker-compose version 1.29.2, build 5becea4c

(2)使用pip下载Compose

******(1)配置yum源,下载pip
# 更新yum源
yum update
# 安装扩展yum源
yum -y install epel-release
# 下载python pip
yum -y install python-pip
******(2)安装Docker Compose
pip install docker-compose
• 软件版本:pip版本8.1.2,但是版本18.1是可用的。
• 可以通过:pip install—upgrade pip'命令进行升级。


三、Docker-Compose常用命令


(1)Compose常用选项


  • SERVICE是Compose文件中定义的,类似于ansible的主机组,SERVICE中定义的是镜像的名称


-docker-compose

#docker-compose主命令后面跟其他命令
语法:docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
选项:
-f 指定Compose配置文件,默认docker-compose.yml
-p 指定项目名称,默认目录名
--verbose 显示更多的输出


-build


#重新构建服务
语法:build [options] [--build-arg key=val...] [SERVICE...]
选项:
--no-cache 不使用缓存构建镜像
--build-arg key=val 指定镜像构建时的变量

-config

#验证和查看Compose文件语法是否正确
语法:config [options]
选项:
-q, --quiet 只验证不打印
--services 只打印服务名称,每行一个
--volumes 打印数据卷名称,每行一个

-exec

#在运行的容器里运行命令
语法:exec [options] SERVICE COMMAND [ARGS...]
选项:
-d 在后台运行命令
--privileged 给这个进程赋予特权权限
-u, --user USER 作为该用户运行该命令
-T 禁用分配伪终端,默认分配一个终端
--index=index 多个容器时的索引数字,默认1

-port

#打印绑定的开放端口
语法:port [options] SERVICE PRIVATE_PORT
选项:
--protocol=proto tcp或udp,默认tcp
--index=index 多个容器时的索引数字,默认1

-ps


#列出容器
语法:ps [options] [SERVICE...]
选项:
-q 只显示ID


-rm

#删除停止的服务容器
语法:rm [options] [SERVICE...]
选项:
-f, --force 强制删除
-s, --stop 删除容器时如果需要先停止容器
-v 删除与容器相关的任何匿名卷

-scale


#指定一个服务启动容器
语法:scale [options] [SERVICE=NUM...]


-up

#创建和启动容器
语法:up [options] [--scale SERVICE=NUM...] [SERVICE...]
选项:
-d 在后台运行容器
-t 指定超时时间
-no-deps 不启动连接服务
--no-recreate 如果容器存在,不重建他们
--no-build 不构建镜像,即使它丢失
--build 启动容器下构建镜像
--scale SERVICE=NUM 指定一个服务(容器)的启动数量


-stop、start、restart

#停止服务
语法:stop [SERVICE...]
#启动服务
语法:start [SERVICE...]
#重启服务
语法:restart [options] [SERVICE...]

-top


#显示容器运行进程
语法:top [SERVICE...]


-logs


#显示容器的输出
-f, --follow 实时输出日志
-t, --timestamps 显示时间戳
--tail="all" 从日志末尾显示行数


其他选项


停止容器和删除容器、网络、数据卷和镜像:down


创建一个服务:create


接收容器输出的事件:events


查看命令帮助:help


列出本地Docker的镜像:images


杀死一个容器,可以发送信号:kill


挂起容器:pause


指定发布绑定的端口:port


下载镜像:pull


推送镜像:push


注意事项


  • 通常docker-compose命令只在含有docker-compose.yml文件目录下执行。只去找该文件内的服务,所以当批量部署服务时尽量将所有服务器写入到一个目录结构下


(2)Docker Compose 配置文件常用指令


-YAML文件格式及编写注意事项


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


-YAML文件格式注意事项


  • 不支持制表符tab键缩进,需要使用空格缩进
  • 通常开头缩进2个空格
  • 字符后缩进1个空格


-build

#构建镜像的上下文路径
两种写法都可以
build
build: ./dir          #路径是从docker-compose.yml文件目录下开始的相对路径,一般都是./,后面写目录
build:
  context: ./dir

-Dockerfile


#指定Dockerfile文件名称
build:
  context: .                              #这个就是指定路径在当前目录
  dockerfile: Dockerfile-alternate        #指定dockerfile的文件名称


-images


#选择基础镜像
image: redis          #镜像名称,没有版本名称默认版本为latest
image: ubuntu:14.04   #镜像名称+版本名称
image: tutum/influxdb 
image: example-registry.com:4000/postgresql   #指定镜像仓库的镜像
image: a4bc65fd         #指定镜像id号

-args

#构建参数,在Dockerfile中指定的参数(定义变量,可以一次指定多个变量)
下面两种写法不管是:还是=都可以
build:
  context: .
  args:     
    buildno: 1             #定义变量buildno为1
    gitcommithash: cdc3b19
build:
  context: .
  args:
    - buildno=1
    - gitcommithash=cdc3b19


-command


#指定命令,会覆盖默认命令
command: bundle exec thin -p 3000
command: ["bundle", "exec", "thin", "-p", "3000"]


-container_name

#自定义容器名称。如果自定义名称,则无法将服务scale到1容器之外
container_name: my-web-container          #默认使用compose创建的镜像名称都是以compose_开头的,而这个可以指定镜像的名称

-deploy

#指定与部署和运行相关的配置。限版本3
version: '3'
services:
  redis:             #创建镜像为redis
    image: redis:alpine  #指定基础镜像
    deploy:
      replicas: 6
      update_config:      #用于配置滚动更新配置
        parallelism: 2    #一次性更新的容器数量
        delay: 10s         #更新一组容器之间的间隔时间
      restart_policy:     #定义容器重启策略, 用于代替 restart 参数
        condition: on-failure    #只有当容器内部应用程序出现问题才会重启
#要注意空行,每个选项的内容都会空两个字符串的位置

-depends_on

#服务之间的依赖,控制服务启动顺序。正常是按顺序启动服务,例如构建lnmp这种,就需要排序一下启动的顺序
version: '3'
services:
  web:                #创建镜像web
    build: .          #指定构建镜像获取dockerfile的目录
    depends_on:       
      - db            #指定顺序等待db和redis都启动之后,web才会启动
      - redis
  redis:              #创建镜像redis
    image: redis
  db:                 #创建镜像db
    image: postgres

-dns


#自定义DNS服务器,可以使单个值或者列表
单个值:
dns: 8.8.8.8
列表:
dns:
  - 8.8.8.8
  - 9.9.9.9


-entrypoint


#在 Dockerfile 中有一个指令叫做 ENTRYPOINT 指令,用于指定接入点
entrypoint: /code/entrypoint.sh
entrypoint:
    - php
    - -d
    - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
    - -d
    - memory_limit=-1
    - vendor/bin/phpunit


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6月前
|
负载均衡 Shell Docker
Docker-Compose概述
Docker-Compose概述
|
6月前
|
Linux Go API
Docker入门概述
Docker入门概述
|
6月前
|
应用服务中间件 开发工具 nginx
Docker概述 、 部署Docker 、 Docker镜像 、 Docker基本命令
Docker概述 、 部署Docker 、 Docker镜像 、 Docker基本命令
263 0
|
19天前
|
存储 监控 Linux
Docker技术架构概述
【10月更文挑战第22天】Docker采用CS架构,Client与Daemon交互,Compose管理多容器应用。
|
6月前
|
缓存 Linux 虚拟化
Docker 概述与安装
Docker 概述与安装
81 2
|
6月前
|
Linux 应用服务中间件 nginx
docker概述、安装、常用命令
docker概述、安装、常用命令
101 1
|
6月前
|
运维 虚拟化 开发者
Docker的概述
Docker的概述
52 0
|
Java Linux 虚拟化
Docker从入门到精通——Docker概述
Docker从入门到精通——Docker概述
97 0
|
存储 Ubuntu Linux
Docker(四)进阶:Docker镜像概述和分层原理
镜像是一个只读模板,带有创建Docker容器的说明。通常,一个镜像基于另一个镜像,并带有一些额外的定制。例如,您可以构建一个基于ubuntu镜像的镜像,但是要安装Apache web服务器和您的应用程序,以及运行应用程序所需的配置细节。
1219 0
Docker(四)进阶:Docker镜像概述和分层原理
|
安全 Ubuntu Linux
Docker概述及CentOS安装Docker
Docker概述及CentOS安装Docker
306 0