Docker Compose 入门

想象一下在服务器上运行静态页面的场景。对于这项任务,NGINX 服务器是一个不错的选择。我们在 static-site/index.html 路径下有一个简单的 HTML 文件:

通过使用 Docker,我们将使用以下官方镜像运行 NGINX 服务器

复制代码
docker run --rm -p 8080:80 --name nginx-compose-01 nginx

让我们来分析一下:

Docker Engine 将运行一个 Docker NGINX 镜像。

  • 映像上的默认端口是 80,因此我们将把它本地映射为 8080,以避免使用特权端口。
  • 我们指定的名称将保持不变,以便与容器的交互更加方便。
  • 通过使用 -rm 参数,我们可以确保一旦完成任务并停止容器,容器就会被删除。

我们的容器已启动并运行。在另一个终端会话中,我们应该访问默认的 NGINX 页面:

复制代码
curl 127.0.0.1:8080

既然已经成功运行了 NGINX,我们就需要调整命令,以便使用定制的 HTML 页面。一个简单快捷的方法是将文件挂载到容器的路径上。让我们使用 Ctrl + C 退出上一条命令,然后完善上一条命令:

复制代码
docker run --rm -p 8080:80 --name nginx-compose -v $(pwd)/static-site:/usr/share/nginx/html nginx

不出所料,页面会更改为我们指定的页面:

复制代码
curl localhost:8080/index.html

现在,我们已经具备了将此应用程序迁移到 Compose 所需的一切。我们将为默认 NGINX 安装创建一个 Compose 文件:

复制代码
services:
  nginx:
    image: nginx
    ports:
      - 8080:80

让我们来分析一下我们刚才所做的:

  • 服务名称为 NGINX。
  • 映像与 NGINX 映像相同。
  • 端口与之前使用的端口相同。

内容应保存到名为 docker-compose.yaml 的文件中。

接下来,我们将在终端上执行 Compose 命令:

复制代码
docker compose up

不出所料,HTTP 请求的结果与运行 Docker 容器时的结果相同。

文件的命名很重要。我们执行了 Compose 命令来启动 Compose 文件,但并没有指定要使用的文件。与 docker build 和 Dockerfile 的情况一样,通过在一个目录中运行 docker compose,Compose 会搜索一个名为 docker-compose.yaml 的文件。如果该文件存在,它就会被当作默认的 Compose 文件。请注意,我们并不局限于一个文件名;我们可以为我们的 Compose 应用程序使用不同的文件名。在接下来的文章中,我们可以为 Compose 文件使用不同的名称,并使用 -f 选项运行应用程序。

接下来,我们将通过 Compose 配置挂载自定义 HTML 页面:

复制代码
services:
  nginx:
    image: nginx
    ports:
      - 8080:80
    volumes:
      - ./static-site:/usr/share/nginx/html

之前的 Docker 命令看似简单,但在幕后,它创建了一个指向文件系统路径的 Docker 卷,然后将其附加到容器上。这同样适用于 Compose。我们指定一个指向文件系统的卷。然后,根据我们的位置,将其挂载到容器的目录中:

复制代码
curl localhost:8080/index.html

不出所料,结果与 Docker 示例的结果相同。

回顾本节,我们使用 Docker CLI 运行了一个 NGINX 实例,并为使用的 Docker 命令参数添加了相应的 YAML 部分,从而过渡到了 Compose。

相关推荐
天下不喵1 小时前
Ubuntu24.04安装Docker过程记录
docker
黑黍2 小时前
如何在k8s中配置并使用nvidia显卡
云原生·容器·kubernetes
梁正雄2 小时前
6、prometheus资源规划
运维·服务器·服务发现·prometheus·监控
晨曦之旅2 小时前
零成本体验云计算!阿贝云免费服务器深度测评
运维·服务器·云计算
工具人55553 小时前
Linux 抓取 RAM Dump 完整指南
linux·运维·安全
冷血~多好3 小时前
使用docker部署elk,实现日志追踪
elk·docker·容器
会飞的小蛮猪3 小时前
SkyWalking运维之路(Java探针接入)
java·运维·经验分享·容器·skywalking
天一生水water4 小时前
docker-compose安装
运维·docker·容器
蓝象_4 小时前
docker安装配置mysql
mysql·docker·容器
Archy_Wang_14 小时前
基于BaGet 构建NuGet私有库并实现类库打包到NuGet私有库
运维·jenkins