我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【云原生】Docker Compose从入门到实践

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【云原生】Docker Compose从入门到实践

前言

大家好,本文是讲解了如何安装使用 Docker Compose,Compose 模板文件的常用指令,以及Docker Compose实战。希望对大家有所帮助~

目录

一、概述

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具,负责实现对 Docker 容器集群的快速编排。可以在一个 YAML 文件中定义所有配置,然后使用一个命令启动所有容器。

在日常工作中,经常会碰到需要使用多个容器,且需要多个容器相互配合来完成某项任务的情况。例如实现一个WEB服务,可能还需要数据库服务容器、缓存服务容器等。Compose 恰好满足了这样的需求。

Docker Compose 不是将所有服务都放在一个大容器中,而是允许将它们拆分为可单独管理的容器。这对于构建和部署都更好,并且不需要手动启动每个单独的容器。

二、安装与卸载

2.1、手动下载安装

2.1.1、下载

Linux 上安装十分简单,从 Docker Compose GitHub 官方仓库直接下载编译好的二进制文件即可。

目前最新版本为 v2.9.0

官方地址:

https://github.com/docker/compose/releases

GitHub
下载

2.1.2、上传

下载好后,使用 Xftp 工具,将其上传至 /usr/local/bin 目录下。
上传

2.1.3、增加权限

我们上传二进制文件后,要添加可执行权限,才可以在Linux中正常使用。命令如下:

#进入到文件目录cd /usr/local/bin#改名mv docker-compose-linux-x86_64 docker-compose#增加可执行权限chmod +x docker-compose

执行ll 命令后,我们可以看到 docker-compose 二进制文件有了可执行权限

root@ubuntu:/usr/local/bin# lltotal 25208drwxr-xr-x  2 root root     4096 Aug 15 20:56 ./drwxr-xr-x 13 root root     4096 Jul 27 23:16 ../-rwxr-xr-x  1 root root 25804800 Aug 15 20:50 docker-compose*

查看 docker-compose 版本

root@ubuntu:/usr/local/bin# docker-compose -vDocker Compose version v2.9.0

2.2、系统命令安装

下载 docker-compose。网速很慢的话,建议采用第一种方式。

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

增加权限

#进入到文件目录cd /usr/local/bin#增加可执行权限chmod +x docker-compose

查看 docker-compose 版本

root@ubuntu:/usr/local/bin# docker-compose -vDocker Compose version v2.9.0

2.3、卸载

二进制包方式安装的,删除二进制文件即可

rm -fr /usr/local/bin/docker-compose

三、使用

我们使用 Docker Compose 来构建一个自己的 Nginx。

  • 创建文件夹:

    mkdir -p /usr/local/docker/nginx
  • 创建 index.html

    echo 'Hello Docker Compose!' > index.html
  • 创建 Dockerfile

    vi Dockerfile

    内容如下:

    FROM nginx:latestMAINTAINER Micromaple COPY index.html /usr/share/nginx/html/index.htmlEXPOSE 80
  • 创建 docker-compose.yml

    version: '3.1'services:  nginx:    build: .    ports:     - "80:80"
  • 运行 Docker Compose 项目

    docker-compose up
  • 访问

    此时访问 http://ip 可以看到页面如下
    访问

四、模板文件

模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。默认的模板文件名称为 docker-compose.yml ,格式为 YAML 格式。

version: "3"services:  nginx:    image: nginx    ports:      - "80:80"    volumes:      - "./html:/usr/share/nginx/html"

每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动构建生成镜像。

使用 build 指令,在 Dockerfile 中设置的选项(例如: CMDEXPOSEVOLUMEENV等) 将会自动被获取,无需在 docker-compose.yml 中再次设置。

4.1、常用指令

1)、build

指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。Compose 将会利用它自动构建这个镜像,然后使用这个镜像。

version: '3.1'services:  nginx:    build: .

也可以使用 context 指定 Dockerfile 所在文件夹的路径。使用 dockerfile 指令指定 Dockerfile 文件名。使用 arg 指令指定构建镜像时的变量。如下:

version: '3.1'services:  nginx:    build:      context: ./dir      dockerfile: Dockerfile-nginx      args:        buildno: 1

2)、command

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

version: "3.1"services:  nginx:    image: nginx    ports:      - "80:80"    command: echo "hello world"

3)、container_name

指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式。

version: "3.1"services:  nginx:    image: nginx    container_name: nginx_web    ports:      - "80:80"    command: echo "hello world"

4)、depends_on

解决容器的依赖、启动先后的问题。以下例子中会先启动 redis db 在启动 web

version: '3.1'services:  web:    build: .    depends_on:      - db      - redis  redis:    image: redis  db:    image: postgres

注意:web 服务不会等待 redis db 完全启动之后才启动。

5)、env_file

从文件中获取环境变量,可以为单独的文件路径或列表。

如果通过 docker-compose -f FILE 方式来指定 Compose 模板文件,则 env_file 中变量的路径会基于模板文件路径。

如果有变量名称与 environment 指令冲突,则按照惯例,以后者为准。

env_file: .envenv_file:  - ./common.env  - ./apps/web.env  - /opt/secrets.env

环境变量文件中每一行必须符合格式,支持 # 开头的注释行。

# common.env: Set development environmentPROG_ENV=development

6)、environment

设置环境变量。你可以使用数组或字典两种格式。

只给定名称的变量会自动获取运行 Compose 主机上对应变量的值,可以用来防止泄露不必要的数据。

environment:  RACK_ENV: development  SESSION_SECRET:environment:  - RACK_ENV=development  - SESSION_SECRET

如果变量名称或者值中用到 true|false,yes|no 等表达布尔含义的词汇,最好放到引号里,避免 YAML 自动解析某些内容为对应的布尔语义。这些特定词汇,包括如下:

y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF

7)、expose

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

expose: - "3000" - "8000"

8)、image

指定为镜像名称或镜像 ID。如果镜像在本地不存在, Compose 将会尝试拉取这个镜像。

image: ubuntuimage: orchardup/postgresqlimage: a4bc65fd

9)、networks

配置容器链接的网络

version: "3.1"services:  some-service:    networks:     - some-network     - other-networknetworks:  some-network:  other-network:

10)、ports

暴露端口信息。

使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。

ports: - "3000" - "8000:8000" - "49100:22" - "127.0.0.1:8001:8001"

注意:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 并且没放到引号里,可能会得到错误结果,因为 YAML 会自动解析 xx:yy 这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式。

11)、secrets

存储敏感数据,例如 mysql 服务密码。

version: "3.1"services:mysql:  image: mysql  environment:    MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password  secrets:    - db_root_password    - my_other_secretsecrets:  my_secret:    file: ./my_secret.txt  my_other_secret:    external: true

12)、volumes

数据卷所挂载路径设置。可以设置宿主机路径,宿主机路径:容器内路径HOST:CONTAINER) 或加上访问模式(HOST:CONTAINER:ro)。

宿主机路径可以为相对路径,相对路径基于 Compose 模板文件路径。

volumes: - /var/lib/mysql - cache/:/tmp/cache - ~/configs:/etc/configs/:ro

13)、privileged

允许容器中运行一些特权命令。

privileged: true

14)、restart

指定容器退出后的重启策略为始终重启。该命令对保持服务始终运行十分有效,在生产环境中推荐配置为 always 或者 unless-stopped

restart: always

4.2、变量读取

Compose 模板文件支持动态读取主机的系统环境变量和当前目录下的 .env 文件中的变量。

使用 Compose 文件从运行的环境中读取变量 ${nginx_version} 的值,并写入执行的指令中。

version: "3.1"services:  web:    image: "nginx:${nginx_version}"

执行 nginx_version=1.20 docker-compose up 则会启动一个 nginx:1.20 镜像的容器

$ docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMESc1f23dd35d51        nginx:1.20          "/docker-entrypoint.…"   10 seconds ago      Up 10 seconds       80/tcp              nginx2-web-1

若当前目录存在 .env 文件,执行 docker-compose 命令时将从该文件中读取变量。

在Compose 模板文件路径新建 .env文件,并写入以下内容

nginx_version=1.22

env 文件支持 # 号注释

执行 docker-compose up 则会启动一个 nginx:1.22 镜像的容器。

$ docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES86fe34faf119        nginx:1.22          "/docker-entrypoint.…"   4 seconds ago       Up 4 seconds        80/tcp              nginx2-web-1

五、常用命令

前台运行

docker-compose up

后台运行

docker-compose up -d

启动容器

docker-compose start

停止容器

docker-compose stop

停止并移除容器

docker-compose down

六、实战

以安装运行 MySQL5.7 为例。

创建 Docker Compose 模板文件

#创建文件夹mkdir /usr/local/docker/mysqlcd /usr/local/docker/mysql
#创建模板文件vi docker-compose.yml

内容如下:

version: '3.1'services:  # mysql  mysql:    image: mysql:5.7.38    container_name: mysql    restart: always    ports:      - 3306:3306    volumes:      - ./data:/var/lib/mysql    environment:      TZ: Asia/Shanghai      MYSQL_ROOT_PASSWORD: 123456    command:      --character-set-server=utf8mb4      --collation-server=utf8mb4_general_ci      --explicit_defaults_for_timestamp=true      --lower_case_table_names=1      --max_allowed_packet=128M

运行容器

docker-compose up -d

查看容器运行状态

$ docker-compose psNAME                COMMAND                  SERVICE             STATUS              PORTSmysql               "docker-entrypoint.s…"   mysql               running             0.0.0.0:3306->3306/tcp, 33060/tcp

使用 MySQL 数据库连接工具连接。如果连接失败请检查防火墙。
连接MySQL

读到这里,想必你已经对 Docker Compose 的使用有了更加深入的理解,快跟着一起动手吧。别忘了三连支持博主呀~
我是微枫Micromaple,期待你的关注~💪💪💪

来源地址:https://blog.csdn.net/qq_41779565/article/details/126373801

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【云原生】Docker Compose从入门到实践

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Helm 从入门到实践

Helm 是 Kubernetes 的软件包管理工具。本文需要读者对 Docker、Kubernetes 等相关知识有一定的了解。 本文将介绍 Helm 中的相关概念和基本工作原理,并通过一些简单的示例来演示如何使用Helm来安装、升级、回
2023-01-31

PHP Docker 实战指南:从入门到精通

PHP Docker 实战指南:从零开始搭建 PHP Docker 环境,掌握 PHP Docker 部署技巧,助力 PHP 开发与运维。
PHP Docker 实战指南:从入门到精通
2024-02-03

Python GUI和游戏开发从入门到实践

GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,下面这篇文章主要给大家介绍了关于Python图形用户界面与游戏开发的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-05-19

“PHP面向对象编程入门:从概念到实践”

PHP面向对象编程(OOP)是一种强大的编程范式,它可以帮助您构建更灵活、更可维护的代码。本文将介绍OOP的基本概念,并通过示例展示如何使用OOP来解决实际问题。
“PHP面向对象编程入门:从概念到实践”
2024-02-25

学习Golang的途径:从零开始到入门实践

Golang(也称为Go)是谷歌公司开发的一门编程语言,它在近年来迅速流行起来,成为许多开发人员的首选语言。相比其他编程语言,Golang有着更高的性能、更高的并发支持和更简洁的语法。在这篇文章中,我们将从零基础开始,逐步介绍Golang的
学习Golang的途径:从零开始到入门实践
2024-01-20

C++云原生开发:从概念到实现

c++++ 云原生开发采用微服务、容器化、编排、ci/cd 和可观察性原则。步骤包括:创建 c++ 微服务、docker 化、部署到 kubernetes、ci/cd 自动化以及使用 prometheus 和 influxdb 进行可观察性
C++云原生开发:从概念到实现
2024-05-11

阿里云服务器实例系列从入门到高级

本文将介绍阿里云服务器实例系列,包括入门级、中级和高级三个级别的实例,以及每个级别实例的特点和适用场景。入门级实例入门级实例是阿里云提供的一种最基础的服务器实例,适用于初学者和小型网站的运行。它们通常具有较低的价格和资源限制,但足以满足大多数初级用户的需求。举例来说,阿里云提供的ECS(ElasticComput
阿里云服务器实例系列从入门到高级
2024-01-19

阿里云服务器应用实例从入门到精通

本文将详细介绍阿里云服务器的应用实例,包括如何搭建、管理及优化服务器。从入门到精通,本文将带您全面了解阿里云服务器。一、搭建阿里云服务器阿里云服务器是阿里云推出的一款高性能、高可用的云服务器产品,能够满足企业级用户的各种需求。首先,您需要在阿里云官方网站上注册并登录账号,然后选择服务器产品,根据您的需求选择相应的
阿里云服务器应用实例从入门到精通
2023-10-31

PHP服务器优化入门指南:从认识到实践,一步一步提升网站性能

作为脚本语言,PHP在一定程度上存在着执行效率低下、响应速度慢的问题,特别是对于复杂的或者动辄处理百万千万级别数据时更明显。PHP优化是当前最热门的话题,本文将从浅显易懂的角度介绍PHP优化的常用方法和手段,从原理到实践,进而加以剖析和阐述。
PHP服务器优化入门指南:从认识到实践,一步一步提升网站性能
2024-02-13

编程热搜

目录