如何在 Ubuntu 20.04 上安装和使用 Docker Compose

简介: 如何在 Ubuntu 20.04 上安装和使用 Docker Compose

介绍

Docker 简化了在容器中管理应用程序进程的过程。虽然容器在某些方面类似于虚拟机,但它们更轻量且更节省资源。这使开发人员能够将应用程序环境分解为多个隔离的服务。

对于依赖于多个服务的应用程序,编排所有容器一起启动、通信和关闭可能会变得非常复杂。Docker Compose 是一个工具,允许您根据 YAML 文件中设置的定义来运行基于多个容器的应用程序环境。它使用服务定义来构建完全可定制的环境,其中包含多个可以共享网络和数据卷的容器。

在本指南中,您将演示如何在 Ubuntu 20.04 服务器上安装 Docker Compose 以及如何开始使用这个工具。

先决条件

要遵循本文,您需要:

  • 作为非根用户具有 sudo 权限的 Ubuntu 20.04 本地机器或开发服务器的访问权限。如果您使用远程服务器,建议安装活动防火墙。要设置这些,请参考我们的 Ubuntu 20.04 初始服务器设置指南。
  • 在服务器或本地机器上安装了 Docker,按照《在 Ubuntu 20.04 上安装和使用 Docker》的 步骤 1 和 2 进行操作。

步骤 1 — 安装 Docker Compose

为了确保获得最新的稳定版本的 Docker Compose,您将从其官方 Github 存储库下载此软件。

首先,确认其发布页面上的最新版本。在撰写本文时,最新的稳定版本是 1.29.2

以下命令将下载 1.29.2 版本,并将可执行文件保存在 /usr/local/bin/docker-compose,这将使该软件作为 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

接下来,设置正确的权限,以便 docker-compose 命令可执行:

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

要验证安装是否成功,可以运行:

docker-compose --version

您将看到类似于以下内容的输出:

docker-compose version 1.29.2, build 5becea4c

Docker Compose 现在已成功安装在您的系统上。在下一节中,您将看到如何设置 docker-compose.yml 文件,并使用该工具启动容器化环境。

步骤 2 — 设置 docker-compose.yml 文件

为了演示如何设置 docker-compose.yml 文件并使用 Docker Compose,您将使用 Docker Hub 上的官方 Nginx 镜像,这是公共 Docker 注册表。这个容器化环境将提供一个单一的静态 HTML 文件。

首先,在您的主目录中创建一个新目录,然后进入该目录:

mkdir ~/compose-demo
cd ~/compose-demo

在此目录中,设置一个应用程序文件夹,作为您的 Nginx 环境的文档根目录:

mkdir app

使用您喜欢的文本编辑器,在 app 文件夹中创建一个新的 index.html 文件:

nano app/index.html

将以下内容放入此文件中:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Docker Compose Demo</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
</head>
<body>
    <h1>This is a Docker Compose Demo Page.</h1>
    <p>This content is being served by an Nginx container.</p>
</body>
</html>

完成后保存并关闭文件。如果您使用的是 nano,可以通过输入 CTRL+X,然后输入 YENTER 来确认。

接下来,创建 docker-compose.yml 文件:

nano docker-compose.yml

docker-compose.yml 文件中插入以下内容:

version: '3.7'
services:
  web:
    image: nginx:alpine
    ports:
      - "8000:80"
    volumes:
      - ./app:/usr/share/nginx/html

docker-compose.yml 文件通常以 version 定义开始。这将告诉 Docker Compose 您正在使用哪个配置版本。

然后是 services 块,您在其中设置了此环境的服务。在您的情况下,有一个名为 web 的单个服务。此服务使用 nginx:alpine 镜像,并使用 ports 指令设置端口重定向。主机(运行 Docker Compose 的系统)上端口 8000 的所有请求将被重定向到 web 容器上的端口 80,其中 Nginx 将运行。

volumes 指令将在主机和容器之间创建一个共享卷。这将使用容器内的 /usr/share/nginx/html 目录共享本地的 app 文件夹,并且该卷将覆盖 Nginx 的默认文档根目录。

保存并关闭文件。

您已经设置了一个演示页面和一个 docker-compose.yml 文件,以创建一个容器化的 Web 服务器环境来提供它。在下一步中,您将使用 Docker Compose 启动此环境。

步骤 3 — 运行 Docker Compose

有了 docker-compose.yml 文件,现在可以执行 Docker Compose 来启动你的环境。以下命令将下载必要的 Docker 镜像,为 web 服务创建一个容器,并在后台模式下运行容器化环境:

docker-compose up -d

Docker Compose 首先会在本地系统中查找定义的镜像,如果找不到镜像,它将从 Docker Hub 下载镜像。你会看到如下输出:

Creating network "compose-demo_default" with the default driver
Pulling web (nginx:alpine)...
alpine: Pulling from library/nginx
cbdbe7a5bc2a: Pull complete
10c113fb0c77: Pull complete
9ba64393807b: Pull complete
c829a9c40ab2: Pull complete
61d685417b2f: Pull complete
Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502
Status: Downloaded newer image for nginx:alpine
Creating compose-demo_web_1 ... done

你的环境现在在后台运行。要验证容器是否活动,可以运行:

docker-compose ps

此命令将显示有关正在运行的容器及其状态的信息,以及当前设置的任何端口重定向:

Name                     Command               State          Ports        
----------------------------------------------------------------------------------
compose-demo_web_1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8000->80/tcp

现在,你可以通过将浏览器指向 localhost:8000(如果在本地机器上运行此演示)或 your_server_domain_or_IP:8000(如果在远程服务器上运行此演示)来访问演示应用程序。

你将看到如下页面:

!Docker Compose Demo Page

你在 docker-compose.yml 文件中设置的共享卷可使 app 文件夹中的文件与容器的文档根目录保持同步。如果对 index.html 文件进行任何更改,容器将自动捕获这些更改,并在重新加载页面时反映在你的浏览器上。

在下一步中,你将了解如何使用 Docker Compose 命令来管理容器化环境。

步骤 4 — 熟悉 Docker Compose 命令

你已经了解了如何设置 docker-compose.yml 文件,并使用 docker-compose up 启动你的环境。现在,你将了解如何使用 Docker Compose 命令来管理和与容器化环境交互。

要检查 Nginx 容器产生的日志,可以使用 logs 命令:

docker-compose logs

你将看到类似于以下的输出:

Attaching to compose-demo_web_1
web_1  | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
web_1  | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
web_1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
web_1  | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
web_1  | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
web_1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
web_1  | /docker-entrypoint.sh: Configuration complete; ready for start up
web_1  | 172.22.0.1 - - [02/Jun/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-"

如果要暂停环境执行而不更改容器的当前状态,可以使用:

docker-compose pause
Pausing compose-demo_web_1 ... done

要在发出暂停后恢复执行:

docker-compose unpause
Unpausing compose-demo_web_1 ... done

stop 命令将终止容器执行,但不会销毁与你的容器相关的任何数据:

docker-compose stop
Stopping compose-demo_web_1 ... done

如果要删除与此容器化环境相关的容器、网络和卷,可以使用 down 命令:

docker-compose down
Removing compose-demo_web_1 ... done
Removing network compose-demo_default

请注意,这不会从 Docker Compose 用于启动你的环境的基本镜像中删除基本镜像(在你的情况下是 nginx:alpine)。这样,每当你使用 docker-compose up 再次启动你的环境时,过程会快得多,因为镜像已经在你的系统上。

如果你想从系统中删除基本镜像,可以使用:

docker image rm nginx:alpine
Untagged: nginx:alpine
Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912
Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270
Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1
Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157
Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6
Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08
Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a

结论

在本指南中,您已经学会了如何安装 Docker Compose 并基于 Nginx web 服务器镜像设置容器化环境。您还学会了如何使用 Compose 命令管理此环境。

要获取所有可用的 docker-compose 命令的完整参考,请查阅官方文档。

如果您对 Docker Compose 的更多用法感兴趣,请查看《如何使用 Docker Compose 安装 WordPress》以及《如何使用 Nginx、Let’s Encrypt 和 Docker Compose 保护容器化的 Node.js 应用程序》。


目录
相关文章
|
9月前
|
人工智能 前端开发 Docker
从本地到云端:用 Docker Compose 与 Offload 构建可扩展 AI 智能体
在 AI 智能体开发中,开发者常面临本地调试与云端部署的矛盾。本文介绍如何通过 Docker Compose 与 Docker Offload 解决这一难题,实现从本地快速迭代到云端高效扩容的全流程。内容涵盖多服务协同、容器化配置、GPU 支持及实战案例,助你构建高效、一致的 AI 智能体开发环境。
841 2
从本地到云端:用 Docker Compose 与 Offload 构建可扩展 AI 智能体
|
9月前
|
关系型数据库 数据库 PostgreSQL
docker 安装 Postgres 17.6
本文介绍如何通过Docker安装和配置PostgreSQL 17.6。内容包括拉取镜像、导出配置文件、运行容器并挂载数据与配置文件目录,以及进入容器使用psql操作数据库的完整步骤,便于持久化管理和自定义配置。
1544 3
docker 安装 Postgres 17.6
|
8月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
876 6
|
8月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
702 2
|
9月前
|
运维 数据可视化 开发者
2025年 三个 Docker Compose 可视化管理器测评
本文对比了三款主流的 Docker Compose 可视化管理工具。随着 Docker 的普及,Compose 已成为多容器应用部署的标准,但 YAML 配置复杂、协作困难等问题也日益突出。三款工具各有侧重:Docker Desktop 适合个人本地开发,Portainer 适合小团队运维管理,而 Websoft9 则通过 GitOps 实现了强大的版本控制与团队协作能力。文章从可视化编辑、部署便捷性、版本管理等方面进行评测,为不同使用场景提供了推荐方案,展望了未来 Compose 管理向 GitOps 深度融合的发展趋势。
1219 1
2025年 三个 Docker Compose 可视化管理器测评
|
数据可视化 开发工具 git
GitOps 驱动的 Docker Compose 可视工具化来了,图形化编辑器上玩转容器编排
Docker Compose 简化了多容器应用的部署,但随着应用复杂度上升,文本配置方式逐渐暴露出维护难、协作效率低等问题。基于 GitOps 的可视化 Docker Compose 工具应运而生,通过图形界面降低使用门槛,提升配置准确性和团队协作效率。结合 GitOps,实现配置变更的版本追踪、自动化部署与环境一致性,为多容器应用管理提供高效、安全的解决方案。
|
Ubuntu Linux Docker
如何在Ubuntu 20.04系统中安装Docker
安装 Docker 引擎的步骤如下:首先更新系统包索引 (`sudo apt update`),安装必要依赖包 (`apt-transport-https` 等),添加 Docker 官方 GPG 密钥及 APT 仓库。接着再次更新包索引并安装 Docker 引擎及相关工具 (`docker-ce` 等)。最后启动 Docker 服务并设置开机自启,通过 `docker --version` 和运行测试容器 (`sudo docker run hello-world`) 验证安装是否成功。
5348 0
|
Ubuntu Linux Docker
Ubuntu 18.04 安装Docker实战案例
关于如何在Ubuntu 18.04系统上安装Docker的实战案例,包括安装步骤、配置镜像加速以及下载和运行Docker镜像的过程。
2494 3
Ubuntu 18.04 安装Docker实战案例
|
Ubuntu Docker 容器
本地wsl的Ubuntu安装docker,不使用docker桌面版
本文提供了在WSL的Ubuntu环境中安装Docker引擎的步骤,包括安装引擎、配置iptables以及启动Docker服务。
1307 2