您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

Docker从入门到精通之Docker Compose

时间:2022-05-16 13:15:40  来源:  作者:上海滩1y4C

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

Install Docker Compose

  1. 下载docker compose
$  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
  1. 给docker compose设置可执行权限
$ sudo chmod +x /usr/local/bin/docker-compose
  1. 验证
$ docker-compose --version

Uninstallation

$ sudo rm /usr/local/bin/docker-compose

Getting Started

Python/ target=_blank class=infotextkey>Python构建一个简易网页统计网页点击量,docker-compose进行发布

Step1:创建项目

  1. 创建项目目录
  2. $ mkdir test_web
    $ cd test_web
  3. 在项目目录中创建App.py文件,并把下面代码复制进去
  4. import time
    import redis
    from flask import Flask
    app = Flask(__name__)
    cache = redis.Redis(host='redis', port=6379)
    def get_hit_count():
    retries = 5
    while True:
    try:
    return cache.incr('hits')
    except redis.exceptions.ConnectionError as exc:
    if retries == 0:
    rAIse exc
    retries -= 1
    time.sleep(0.5)
    @app.route('/')
    def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.n'.format(count)
  5. 创建requirements.txt文件,以下内容复制进去
flask
redis

Step2:创建Dockerfile文件

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

Step3:在docker-compose.yml中定义services

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

Step4:用Docker compose构建和运行app

  1. 进入项目目录,运行docker-compose up
  2. $ docker-compose up
  3. 在浏览器访问http://localhost:5000/ ,刷新页面看变化
  4. 查看使用compose构建的镜像
  5. $ docker images

Step5:绑定一个数据卷

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
  redis:
    image: "redis:alpine"

将当前目录与容器的/code目录绑定,这样可以动态修改代码

Step6:重新构建和运行app

先docker-compose down停止服务,在构建

$ docker-compose down
$ docker-compose up

Compose file

用YAML文件定义服务,默认文件是docker-compose.yml,包含4个顶级key,version、services.NETworks、volumes

参考compose-spec/spec.md at master · compose-spec/compose-spec · GitHub

version

指定本 yml 依从的 compose版本

services

定义多个应用服务,包含环境配置、镜像构建等

build

指定构建镜像的路径

version: "3.9"
services:
  webapp:
    build: ./app

blkio_config

定义服务的block IO配置,参考compose-spec/spec.md at master · compose-spec/compose-spec · GitHub

container_name

指定自定义容器名称

depends_on

定义服务间启动或关闭的依赖关系

services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

command

覆盖容器启动的默认命令

command: [ "bundle", "exec", "thin", "-p", "3000" ]

domainname

domainname declares a custom domain name to use for the service container.

entrypoint

覆盖容器默认的entrypoint

env_file

从文件中添加环境变量到容器,可以是一个或多个文件

env_file: .env
env_file:
  - ./a.env
  - ./b.env

文件格式:

# Set Rails/Rack environment
RACK_ENV=development
VAR="quoted"

environment

添加环境变量

environment:
  RACK_ENV: development
  SHOW: "true"
  USER_INPUT:

expose

暴露端口,但不映射到宿主机,只被连接的服务访问,仅可以指定内部端口

expose:
  - "3000"
  - "8000"

healthcheck

用于检测 docker 服务是否健康运行。

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"] # 设置检测程序
  interval: 1m30s  # 设置检测间隔
  timeout: 10s # 设置检测超时时间
  retries: 3 # 设置重试次数
  start_period: 40s # 启动后,多少秒开始启动检测程序

image

指定容器运行的镜像

image: redis:5

labels

设置容器标签

labels:
  com.example.description: "Accounting webapp"
  com.example.department: "Finance"
labels:
  - "com.example.description=Accounting webapp"
  - "com.example.department=Finance"

links

连接到另一个容器的网络,简单将就是让容器相互连通

web:
  links:
    - db
    - db:database
    - redis

logging

服务的日志记录配置,driver:指定服务容器的日志记录驱动程序,默认值为json-file。有以下三个选项

driver: "json-file"
driver: "syslog"
driver: "none"

仅在 json-file 驱动程序下,可以使用以下参数,限制日志得数量和大小。

logging:
  driver: json-file
  options:
    max-size: "200k" # 单个文件大小为200k
    max-file: "10" # 最多10个文件

syslog 驱动程序下,可以使用 syslog-address 指定日志接收地址。

logging:
  driver: syslog
  options:
    syslog-address: "tcp://192.168.0.42:123"

network_mode

设置网络模式,格式如下:

network_mode: "bridge" #桥接模式
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"

networks

配置容器连接的网络

services:
  some-service:
    networks:
      - some-network
      - other-network
networks:
  some-network:
    # Use a custom driver
    driver: custom-driver-1
  other-network:
    # Use a custom driver which takes special options
    driver: custom-driver-2
services:
  frontend:
    image: awesome/webapp
    networks:
      - front-tier
      - back-tier

  monitoring:
    image: awesome/monitoring
    networks:
      - admin

  backend:
    image: awesome/backend
    networks:
      back-tier:
        aliases:
          - database
      admin:
        aliases:
          - MySQL

networks:
  front-tier:
  back-tier:
  admin:

ipv4_address, ipv6_address

指定ip地址

services:
  frontend:
    image: awesome/webapp
    networks:
      front-tier:
        ipv4_address: 172.16.238.10
        ipv6_address: 2001:3984:3989::10

networks:
  front-tier:
    ipam:
      driver: default
      config:
        - subnet: "172.16.238.0/24"
        - subnet: "2001:3984:3989::/64"

ports

端口映射,映射主机与容器端口,格式:Host:ontainer

ports:
     - "5000:5000"

restart

容器重启策略

restart: "no"
restart: always
restart: on-failure
restart: unless-stopped

secrets

存储敏感数据,比如密码

services:
  frontend:
    image: awesome/webapp
    secrets:
      - server-certificate
secrets:
  server-certificate:
    file: ./server.cert

volumes

将主机数据卷挂载到容器

services:
  db:
    image: postgres:latest
    volumes:
      - "/localhost/postgres.sock:/var/run/postgres/postgres.sock"
      - "/localhost/data:/var/lib/postgresql/data"

working_dir

覆盖容器工作目录

Volumes 顶级目录

services:
  backend:
    image: awesome/database
    volumes:
      - db-data:/etc/data

  backup:
    image: backup-service
    volumes:
      - db-data:/var/lib/backup/data

volumes:
  db-data:

Networks 顶级目录

services:
  frontend:
    image: awesome/webapp
    networks:
      - front-tier
      - back-tier

networks:
  front-tier:
  back-tier:
    driver: bridge

docker-compose 命令

$ docker-compose --help
Define and run multi-container applications with Docker.

Usage:
  docker-compose [-f <arg>...] [--profile <name>...] [options] [COMMAND] [ARGS...]
  docker-compose -h|--help

Options:
  -f, --file FILE             Specify an alternate compose file
                              (default: docker-compose.yml)
  -p, --project-name NAME     Specify an alternate project name
                              (default: directory name)
  --profile NAME              Specify a profile to enable
  --verbose                   Show more output
  --log-level LEVEL           Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
  --no-ansi                   Do not print ANSI control characters
  -v, --version               Print version and exit
  -H, --host HOST             Daemon socket to connect to

  --tls                       Use TLS; implied by --tlsverify
  --tlscacert CA_PATH         TRust certs signed only by this CA
  --tlscert CLIENT_CERT_PATH  Path to TLS certificate file
  --tlskey TLS_KEY_PATH       Path to TLS key file
  --tlsverify                 Use TLS and verify the remote
  --skip-hostname-check       Don't check the daemon's hostname against the
                              name specified in the client certificate
  --project-directory PATH    Specify an alternate working directory
                              (default: the path of the Compose file)
  --compatibility             If set, Compose will attempt to convert deploy
                              keys in v3 files to their non-Swarm equivalent

Commands:
  build              Build or rebuild services
  bundle             Generate a Docker bundle from the Compose file
  config             Validate and view the Compose file
  create             Create services
  down               Stop and remove containers, networks, images, and volumes
  events             Receive real time events from containers
  exec               Execute a command in a running container
  help               Get help on a command
  images             List images
  kill               Kill containers
  logs               View output from containers
  pause              Pause services
  port               Print the public port for a port binding
  ps                 List containers
  pull               Pull service images
  push               Push service images
  restart            Restart services
  rm                 Remove stopped containers
  run                Run a one-off command
  scale              Set number of containers for a service
  start              Start services
  stop               Stop services
  top                Display the running processes
  unpause            Unpause services
  up                 Create and start containers
  version            Show the Docker-Compose version information

Swarm集群



Tags:Docker Compose   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Docker与Docker Compose入门:释放你应用部署的威力
今天给大家介绍一项强大而有趣的技能,那就是使用 Docker 和 Docker Compose 来释放你的应用部署的威力!无论你是一名开发人员还是系统管理员,掌握这个技能都将为你的工作带来巨...【详细内容】
2024-01-17  Search: Docker Compose  点击:(69)  评论:(0)  加入收藏
使用Docker Compose搭建高可用Redis集群
&emsp;&emsp;如今业务系统对于缓存Redis的依赖似乎是必不可少的,我们可以在各种各样的系统中看到Redis的身影。考虑到系统运行的稳定性,Redis的应用和MySQL数据库一样需要做到...【详细内容】
2023-11-13  Search: Docker Compose  点击:(200)  评论:(0)  加入收藏
使用Docker Compose编排多个容器
使用Docker Compose编排多个容器是一种简单而强大的方式,可以在单个文件中定义、配置和管理多个容器。它使得部署和管理复杂的应用程序变得更加容易和可靠。下面将介绍Docker...【详细内容】
2023-11-02  Search: Docker Compose  点击:(277)  评论:(0)  加入收藏
三种可视化方法帮助您轻松理解Docker Compose架构
无论您是初学者还是经验丰富的开发人员,阅读Docker Compose的架构可能会令人感到困惑。Docker Compose是一个优质的工具,用于在Docker容器中定义和运行多个服务。然而,其复杂的...【详细内容】
2023-08-01  Search: Docker Compose  点击:(391)  评论:(0)  加入收藏
看不懂docker compose,用可视化的三个方法轻松读懂架构
Docker compose 是一种用于定义和运行多容器 Docker 应用程序的工具。它允许用户使用 YAML 文件来配置应用程序的服务,网络和卷,然后使用一个命令来创建和启动所有的服务。Doc...【详细内容】
2023-07-05  Search: Docker Compose  点击:(279)  评论:(0)  加入收藏
使用 Docker Compose 一键安装 novel 项目的开发环境
背景novel 项目的技术栈比较多,很多同学都曾经向我反映过安装完全部环境需要花大量时间,甚至有的小伙伴可能嫌麻烦就直接放弃了,为了解决这个问题,今天花了好几个小时整了个一键...【详细内容】
2023-03-31  Search: Docker Compose  点击:(333)  评论:(0)  加入收藏
Docker从入门到精通之Docker Compose
Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,只需一个命令,就可以从配置中创建并启动所有服务。Inst...【详细内容】
2022-05-16  Search: Docker Compose  点击:(439)  评论:(0)  加入收藏
Docker 容器编排利器 Docker Compose
Compose 简介    通过前面几篇文章的学习,我们可以通过 Dockerfile 文件让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成...【详细内容】
2020-09-08  Search: Docker Compose  点击:(319)  评论:(0)  加入收藏
Docker Compose 网络设置,你了解多少?
基本概念默认情况下,Compose会为我们的应用创建一个网络,服务的每个容器都会加入该网络中。这样,容器就可被该网络中的其他容器访问,不仅如此,该容器还能以服务名称作为hostname...【详细内容】
2019-10-24  Search: Docker Compose  点击:(650)  评论:(0)  加入收藏
▌简易百科推荐
Docker 和传统虚拟机有什么区别?
我有一个程序员朋友,他每年情人节都要送女朋友一台服务器。他说:“谁不想在过节当天收到一台 4核8g 的服务器呢?”“万一对方不要,我还能留着自己用。” 给他一次过节的机会,他能...【详细内容】
2024-03-26  小白debug  微信公众号  Tags:Docker   点击:(15)  评论:(0)  加入收藏
掌握Docker网络驱动程序:优化容器通信
Docker为在容器内包装、交付和运行应用程序提供了一个强大的平台,从而彻底改变了容器化。网络是容器化的重要组成部分,Docker提供了各种网络驱动程序来支持容器之间的通信以...【详细内容】
2024-03-22    51CTO  Tags:Docker   点击:(13)  评论:(0)  加入收藏
Containerd容器管理
Nginx 指定容器名称 使用 ctr container create 命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。容器基本操作容器基本操作主要是 ctr image 命令,查看命令帮...【详细内容】
2024-03-20  云原生运维圈  微信公众号  Tags:容器   点击:(15)  评论:(0)  加入收藏
如何基于Docker镜像逆向生成Dockerfile
引言你是否曾经遇到过一个想要使用的 Docker 镜像,但却无法修改以适应你的特定需求?或者你可能发现了一个喜欢的 Docker 镜像,但想要了解它是如何构建的?在这两种情况下,将 Docke...【详细内容】
2024-03-07  云原生运维圈  微信公众号  Tags:Docker   点击:(29)  评论:(0)  加入收藏
Kubernetes是什么?主要特点是什么?
Kubernetes是什么?Kubernetes,也称为K8s,是一个开源的容器编排系统,由Google首次开发和维护。它允许容器化的应用程序在集群中自动部署、扩展和管理。Kubernetes提供了一种容器...【详细内容】
2024-02-01    简易百科  Tags:Kubernetes   点击:(178)  评论:(0)  加入收藏
我们一起聊聊容器资源自愈
在企业实际在使用容器这类资源的时候,除了技术本身,要考虑的其他问题也会很多。企业管理的容器有千千万万,出于效率考虑,对于有特殊需求的容器如何进行批量创建和管理呢,这就需要...【详细内容】
2024-01-30  匠心独运维妙维效  微信公众号  Tags:容器   点击:(51)  评论:(0)  加入收藏
Docker与Docker Compose入门:释放你应用部署的威力
今天给大家介绍一项强大而有趣的技能,那就是使用 Docker 和 Docker Compose 来释放你的应用部署的威力!无论你是一名开发人员还是系统管理员,掌握这个技能都将为你的工作带来巨...【详细内容】
2024-01-17  waynblog  微信公众号  Tags:Docker   点击:(69)  评论:(0)  加入收藏
Docker镜像与容器的交互及在容器内部执行代码的原理与实践
Docker作为一种流行的容器技术,已经成为现代应用程序开发和部署的重要工具。在Docker中,镜像是构建和运行容器的基础,而容器则是基于镜像创建的可执行实例。Docker镜像与容器的...【详细内容】
2024-01-10  编程技术汇  今日头条  Tags:Docker   点击:(84)  评论:(0)  加入收藏
如何在 Ubuntu 上安装 Docker
使用 Docker 意味着开启一个新的计算领域,但如果你刚刚开始使用 Docker,安装可能看起来是一项艰巨的任务。在 Ubuntu 上安装 Docker 有两种推荐的方法: 从 Ubuntu 的仓库安装 D...【详细内容】
2024-01-04    Linux中国  Tags:Docker   点击:(128)  评论:(0)  加入收藏
从Kubernetes的探针到DevOps
今天在群里又看有人问如何设置 Kubernetes 的探针,感觉要补充的话太多了,结合我们在一些 DevOps 项目中痛苦的体验,今天一劳永逸的全部说完,此外,也为大家展现一下为什么 DevOps...【详细内容】
2023-12-27  云云众生s  微信公众号  Tags:Kubernetes   点击:(124)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条