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。

相关推荐
冷心笑看丽美人6 分钟前
探秘 DNS 服务器:揭开域名解析的神秘面纱
linux·运维·服务器·dns
wenxiaocsdn12 分钟前
某科技局国产服务器PVE虚拟化技术文档
运维·服务器
深圳安锐科技有限公司1 小时前
首次接触结构安全自动化监测系统,价格高吗?后期维护?
运维·自动化
冬天vs不冷1 小时前
Linux用户与权限管理详解
linux·运维·chrome
凯子坚持 c2 小时前
深入Linux权限体系:守护系统安全的第一道防线
linux·运维·系统安全
大熊程序猿2 小时前
K8s证书过期
云原生·容器·kubernetes
摸鱼也很难5 小时前
Docker 镜像加速和配置的分享 && 云服务器搭建beef-xss
运维·docker·容器
woshilys6 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
疯狂飙车的蜗牛6 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
恩爸编程7 小时前
探索 Nginx:Web 世界的幕后英雄
运维·nginx·nginx反向代理·nginx是什么·nginx静态资源服务器·nginx服务器·nginx解决哪些问题