第2课_Docker部署流程
热度🔥:38 免费课程
授课语音
Docker 容器化部署的基本流程
在现代应用开发和部署中,Docker 提供了一个轻量级、便捷的方式来容器化应用程序。对于基于 RBAC 的后台系统,容器化不仅能解决依赖管理、环境一致性问题,还能提升部署效率和系统的可维护性。本节课将介绍 Docker 容器化部署的基本流程,以及如何使用 Docker 完成 Go 应用的部署。
1. Docker 简介
Docker 是一个开源的应用容器引擎,允许开发者将应用程序和它的依赖打包到一个可移植的容器中。容器可以在任何支持 Docker 的环境中运行,无论是开发环境、测试环境还是生产环境。
1.1 Docker 的主要优点
- 一致性:Docker 保证无论在哪个环境中运行,应用的运行方式都是一致的,避免了环境配置差异带来的问题。
- 轻量级:Docker 容器是轻量级的,它们共享宿主机的内核,因此相较于虚拟机,容器占用更少的资源。
- 快速部署:Docker 容器可以快速启动和停止,适合高效的自动化部署。
2. Docker 容器化部署流程
Docker 容器化部署的基本流程通常包括以下几个步骤:
- 编写
Dockerfile
:描述应用的构建和运行方式。 - 构建 Docker 镜像:使用
docker build
命令根据Dockerfile
构建镜像。 - 运行 Docker 容器:通过
docker run
启动容器并运行应用。 - 推送镜像到 Docker Hub(可选):将构建好的镜像推送到公共或私有的 Docker 镜像仓库。
2.1 编写 Dockerfile
Dockerfile
是一种文本文件,包含了从构建镜像到启动容器的一系列指令。它定义了如何在 Docker 容器中构建和运行应用程序。
示例:Go 应用的 Dockerfile
# 1. 使用官方的 Golang 镜像作为基础镜像
FROM golang:1.19-alpine
# 2. 设置工作目录为 /app
WORKDIR /app
# 3. 将当前目录的文件复制到容器中的 /app 目录
COPY . .
# 4. 安装依赖
RUN go mod tidy
# 5. 编译 Go 应用
RUN go build -o myapp .
# 6. 设置容器启动时的默认命令
CMD ["./myapp"]
# 7. 暴露容器的端口
EXPOSE 8080
解释:
FROM golang:1.19-alpine
:指定使用官方 Golang 镜像作为基础镜像,选择轻量的 Alpine 版本。WORKDIR /app
:在容器中创建并设置工作目录为/app
。COPY . .
:将当前目录(包含源码文件)复制到容器内的/app
目录。RUN go mod tidy
:安装 Go 应用的依赖。RUN go build -o myapp .
:编译 Go 应用,生成myapp
可执行文件。CMD ["./myapp"]
:设置容器启动时运行myapp
。EXPOSE 8080
:暴露容器的端口 8080,确保应用可以访问。
3. 构建 Docker 镜像
通过 docker build
命令,我们可以根据 Dockerfile
创建一个新的 Docker 镜像。下面是构建镜像的步骤:
3.1 构建命令
# 在项目根目录下执行以下命令来构建镜像
docker build -t my-go-app .
解释:
docker build
:构建镜像的命令。-t my-go-app
:给镜像命名为my-go-app
。.
:当前目录,表示Dockerfile
位于当前目录。
4. 运行 Docker 容器
构建镜像成功后,我们可以使用 docker run
命令启动一个容器来运行我们的应用。
4.1 运行命令
# 运行容器并暴露端口
docker run -p 8080:8080 my-go-app
解释:
docker run
:启动一个新的容器并运行。-p 8080:8080
:将宿主机的端口 8080 映射到容器的 8080 端口,确保外部可以访问 Go 应用。my-go-app
:指定要运行的镜像名称。
此时,Go 应用将在 Docker 容器中启动并监听 8080 端口,你可以在浏览器中访问 http://localhost:8080
来测试应用是否正常运行。
5. 推送 Docker 镜像到 Docker Hub
如果需要在其他环境中使用该镜像,或者希望将其分享给其他人,可以将镜像推送到 Docker Hub(或其他私有仓库)。
5.1 登录 Docker Hub
# 登录 Docker Hub
docker login
解释:
- 使用 Docker Hub 账户登录。
5.2 标记镜像
# 标记镜像为 Docker Hub 中的指定仓库名称
docker tag my-go-app your-dockerhub-username/my-go-app:v1.0
解释:
docker tag
:为镜像打标签,your-dockerhub-username/my-go-app:v1.0
表示将镜像标记为v1.0
版本。
5.3 推送镜像
# 将镜像推送到 Docker Hub
docker push your-dockerhub-username/my-go-app:v1.0
解释:
docker push
:将镜像推送到 Docker Hub。
6. 总结
通过 Docker 容器化部署,我们可以将 Go 应用与所有依赖打包成容器,确保应用在不同环境中的一致性和可移植性。Docker 提供了快速、可靠的方式来构建、部署和管理应用,特别适合开发、测试和生产环境中的应用部署。