概述
Docker 是一款强大的虚拟化工具,它可以将应用程序及其依赖项(例如数据库、缓存服务器等)打包在一个容器中,消除了运行环境的差异和依赖冲突的问题。使用 Docker Compose 则可以通过一个 YAML 文件定义和配置多个 Docker 容器,实现对整个应用程序环境的管理和部署。
本文将介绍如何使用 Docker Compose 构建 Ruby on Rails 应用程序,并包含完整的示例代码。
环境准备
在开始之前,您需要先安装 Docker 和 Docker Compose 工具。具体安装方法可以参考官方文档:
另外,为了创建 Ruby on Rails 应用程序,您需要安装 Ruby 和 Rails 环境。具体的安装方法可以参考官方文档:
创建 Docker Compose 文件
我们可以通过以下命令创建一个名为 docker-compose.yml 的 YAML 文件:
-- -------------------- ---- ------- -------- ----- --------- ---- ------ - ------ - ----------- -------- - ------ ----------- - -- --- ------ ------------- ------------ -------------- -------- ------------------ ------- ------------ ----------------- -------- - -------------------------------- -------- --------
在这个文件中,我们定义了两个服务:web 和 db。其中,web 服务用于运行 Rails 应用程序,db 服务用于运行 PostgreSQL 数据库。我们在 web 服务中指定了以下配置:
- build: . 表示使用当前目录下的 Dockerfile 文件构建镜像。
- ports: 表示将容器内的 3000 端口映射到宿主机的 3000 端口。
- volumes: 表示将当前目录挂载到容器内的 /app 目录下。
- depends_on: 表示 web 服务依赖于 db 服务。
在 db 服务中,我们使用了官方的 PostgreSQL 13.4 镜像,并指定了以下环境变量:
- POSTGRES_USER: postgres 表示创建一个名为 postgres 的超级用户。
- POSTGRES_PASSWORD: example 表示为超级用户设置密码为 example。
- POSTGRES_DB: myapp_development 表示创建一个名为 myapp_development 的数据库。
我们还为 db 服务挂载了一个名为 db_data 的卷,用于保存数据库文件。
创建 Dockerfile 文件
除了 docker-compose.yml 文件以外,我们还需要为应用程序创建一个名为 Dockerfile 的文件,该文件定义了如何在容器内构建应用程序。
-- -------------------- ---- ------- ---- ---------- --- ------- ------ -- ------- ------- -- --------------- --------- --- ----- ---- ------- ---- ---- ------- ------------ ---- ------------ ----------------- --- ------ ------- ---- - ---- --- ----- ---------- --- --------- --------- ----- ----------
在这个 Dockerfile 文件中,我们从 Ruby 3.0.2 镜像中创建了一个新的容器。接着,我们安装了 build-essential 和 libpq-dev 包,用于编译 C 扩展和连接 PostgreSQL 数据库。
然后,我们在 /app 目录下创建一个新目录并将其设为工作目录。接着,我们将 Gemfile 和 Gemfile.lock 文件复制到容器内。在容器内执行 bundle install 安装所有的 Rails 依赖。
最后,我们复制整个应用程序目录到容器内,并执行数据库迁移。终端处于 server 模式,向外界提供服务。
运行应用程序
在完成 Docker Compose 和 Dockerfile 的编写后,我们可以使用以下命令构建和启动应用程序:
docker-compose up
该命令会将 docker-compose.yml 文件和 Dockerfile 文件组合起来,然后执行以下操作:
- 使用 Dockerfile 文件构建 web 服务的镜像。
- 使用 postgres:13.4 镜像创建 db 服务的容器。
- 启动 db 服务的容器,并将其命名为 myapp_db_1。
- 启动 web 服务的容器,并将其命名为 myapp_web_1。
- 将容器内的 3000 端口映射到宿主机的 3000 端口。
在启动过程中,您将看到 Rails 应用程序的输出信息。如果您使用浏览器访问 http://localhost:3000,则会看到 Rails 应用程序的欢迎页面。
当您需要停止应用程序时,可以使用以下命令:
docker-compose down
该命令将停止所有正在运行的容器,并删除相关的镜像和卷。
总结
本文介绍了如何使用 Docker Compose 和 Dockerfile 编写和部署 Ruby on Rails 应用程序。如果您刚刚接触 Docker 和 Ruby on Rails,则可以将此文章作为入门指南。如果您已经熟悉 Docker 和 Ruby on Rails,则可以使用此文章作为参考,了解如何更好地管理和部署应用程序环境。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646d8f5e968c7c53b0c37c9b