如何将我的网站部署为 Docker 容器

2025-06-07

如何将我的网站部署为 Docker 容器

开发人员最大的噩梦之一就是“它在我的机器上无法运行”的问题。我曾经在不同的机器上本地运行我的网站时也遇到过困难。感谢Brittany Mitchell给了我将网站容器化的想法。容器化让我能够构建网站,并在不同的环境和机器上一致地运行它。Docker 正是实现这种容器化的工具。

图片来源:r/ProgrammerHumour

什么是 Docker?

Docker 是一个用于开发、发布和运行应用程序的开源平台。它是一种技术,允许你将代码及其依赖项合并并存储到一个称为“镜像”的小巧软件包中。

Dockerfile、Docker 镜像和 Docker 容器

Dockerfile:

Dockerfile 是一个包含一系列命令或过程的文本文件。您可以将其视为一个脚本,它定义了如何构建容器镜像。

Docker 镜像:

Docker 镜像是应用程序或环境的打包可运行实例。它包含运行软件(或我们这里指网站)所需的一切,包括代码、运行时、库、环境变量和配置文件。Docker 镜像是用于创建容器的只读模板。

Docker容器:

Docker 容器是一个轻量级、独立、可执行的软件包,包含运行软件所需的一切。容器将应用程序彼此隔离,并与底层基础架构隔离,同时为应用程序提供额外的保护。容器化解决了与应用程序部署和可扩展性相关的问题。它有助于提高软件开发和运营的一致性和效率。

图片来源:JFROG


以下是我如何将我的网站容器化

作为先决条件,请确保您的计算机上本地安装了 Docker。安装 Docker Engine

我的网站代码托管在GitHub上。为了继续操作,请 fork 并克隆此仓库,然后通过运行以下命令将目录切换到该仓库:

git clone https://github.com/paschalogu/personal-website.git
cd personal-website
Enter fullscreen mode Exit fullscreen mode

步骤 1:构建 Docker 镜像

  • 添加 Dockerfile

我通过在网站目录的根目录中运行命令创建了一个名为Dockerfile的新文件touch Dockerfile,并在 Dockerfile 中添加了以下代码行:

FROM nginx:alpine

COPY . /usr/share/nginx/html

EXPOSE 80
Enter fullscreen mode Exit fullscreen mode

FROM nginx:alpine行代码告诉 Docker 使用 Alpine Linux 创建一个基于 Nginx Web 服务器的 Docker 镜像。该COPY . /usr/share/nginx/html代码会将网站内容从我们所在的目录复制到正在构建的镜像中。这意味着我们的网站代码将替换默认的 Nginx Web 服务器内容。EXPOSE 80该代码还指定容器应该能够在 80 端口上提供 HTTP 流量服务。

  • 构建镜像

然后我通过运行下面的代码行来构建图像:

docker build -t personal-website:v1 .
Enter fullscreen mode Exit fullscreen mode

docker build该命令指示 Docker 根据上述 Dockerfile 中的说明将我们的网站构建为镜像。该命令-t personal-website:v1指示 Docker 将镜像标记为 personal-website:v1。v1 表示这是版本 1。句点 (.) 指示 Docker 在当前目录中查找 Dockerfile,并在构建过程中使用此位置中的文件和目录。

Docker 构建

运行该命令docker images显示我刚刚构建的图像:

图片描述


第 2 步:推送到 Docker 注册表

我登录了Docker Hub 容器镜像库并创建了一个新的仓库。我给它命名personal-website并添加了一个简短的描述(描述是可选的)。

Docker 注册表

然后我运行docker push下面的命令来推送我在上一步中构建的图像,但是它失败了,并出现下面的错误😞。

docker push paschalogu/personal-website:v1

The push refers to repository [[docker.io/paschalogu/personal-website](http://docker.io/paschalogu/personal-website)]
An image does not exist locally with the tag: paschalogu/personal-website
Enter fullscreen mode Exit fullscreen mode

为什么失败了?推送命令正在寻找名为 paschalogu/personal-website:v1 的图像,但没有找到。

为了解决这个问题,我运行docker tag命令来标记我的图像,然后重新运行docker push command以推送到我的 docker 存储库。

docker tag personal-website:v1 paschalogu/personal-website:v1

docker push paschalogu/personal-website:v1
Enter fullscreen mode Exit fullscreen mode

步骤3:测试配置

打开浏览器并导航到网站https://labs.play-with-docker.com/

选择“登录”,然后从下拉列表中选择“docker”。然后,我使用我的 Docker Hub 帐户登录,并点击“开始”按钮。

我点击了左侧边栏的“添加新实例”选项。几秒钟后,浏览器中打开了一个终端窗口。

在终端中,我启动了我刚刚推送的网站。

docker pull paschalogu/personal-website:v1

docker run -dp 80:80 paschalogu/personal-website:v1
Enter fullscreen mode Exit fullscreen mode

你会把你的应用程序和网站以 Docker 容器的形式运行吗?请在评论区留言告诉我。欢迎在 LinkedIn 上联系我:https://www.linkedin.com/in/paschal-ogu/,也可以在 Twitter 上关注我: @Paschal_Ik

参考:

https://www.aquasec.com/cloud-native-academy/docker-container/

https://docs.docker.com/get-started/04_sharing_app/

文章来源:https://dev.to/paschologu/how-i-deployed-my-website-as-a-container-3fje
PREV
GitHub 使用 ruby​​、github-actions 和 dev.to API 自动 README
NEXT
作为 Web 开发人员你需要了解的 10 个 GitHub 仓库