mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-24 10:45:23 +00:00
Use a better structure
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# 实战案例
|
||||
# 第十四章 实战案例
|
||||
|
||||
本章将介绍 Docker 在不同场景下的实战案例。
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# CI/CD
|
||||
## CI/CD
|
||||
|
||||
**持续集成(Continuous integration)** 是一种软件开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# GitHub Actions
|
||||
## GitHub Actions
|
||||
|
||||
GitHub [Actions](https://github.com/features/actions) 是 GitHub 推出的一款 CI/CD 工具。
|
||||
|
||||
@@ -23,6 +23,6 @@ jobs:
|
||||
args: go version
|
||||
```
|
||||
|
||||
## 参考资料
|
||||
### 参考资料
|
||||
|
||||
* [Actions Docs](https://docs.github.com/en/actions)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# DevOps 工作流完整示例
|
||||
## DevOps 工作流完整示例
|
||||
|
||||
本章将演示一个基于 Docker, Kubernetes 和 Jenkins/GitLab CI 的完整 DevOps 工作流。
|
||||
|
||||
## 工作流概览
|
||||
### 工作流概览
|
||||
|
||||
1. **Code**: 开发人员提交代码到 GitLab。
|
||||
2. **Build**: GitLab CI 触发构建任务。
|
||||
@@ -12,25 +12,25 @@
|
||||
6. **Verify**: 人工或自动化验证。
|
||||
7. **Release (Production)**: 审批后自动部署到生产环境。
|
||||
|
||||
## 关键配置示例
|
||||
### 关键配置示例
|
||||
|
||||
### 1. Dockerfile (多阶段构建)
|
||||
#### 1. Dockerfile (多阶段构建)
|
||||
|
||||
```dockerfile
|
||||
# Build stage
|
||||
## Build stage
|
||||
FROM golang:1.18 AS builder
|
||||
WORKDIR /app
|
||||
COPY . .
|
||||
RUN go build -o main .
|
||||
|
||||
# Final stage
|
||||
## Final stage
|
||||
FROM alpine:latest
|
||||
WORKDIR /app
|
||||
COPY --from=builder /app/main .
|
||||
CMD ["./main"]
|
||||
```
|
||||
|
||||
### 2. GitLab CI (.gitlab-ci.yml)
|
||||
#### 2. GitLab CI (.gitlab-ci.yml)
|
||||
|
||||
```yaml
|
||||
stages:
|
||||
@@ -67,7 +67,7 @@ deploy_staging:
|
||||
- develop
|
||||
```
|
||||
|
||||
## 最佳实践
|
||||
### 最佳实践
|
||||
|
||||
1. **不可变基础设施**: 一旦镜像构建完成,在各个环境(Dev, Staging, Prod)中都应该使用同一个镜像 tag (通常是 commit hash),而不是重新构建。
|
||||
2. **配置分离**: 使用 ConfigMap 和 Secret 管理环境特定的配置,不要打包进镜像。
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Drone
|
||||
## Drone
|
||||
|
||||
基于 `Docker` 的 `CI/CD` 工具 `Drone` 所有编译、测试的流程都在 `Docker` 容器中进行。
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
|
||||
本小节以 `GitHub` + `Drone` 来演示 `Drone` 的工作流程。当然在实际开发过程中,你的代码也许不在 GitHub 托管,那么你可以尝试使用 `Gogs` + `Drone` 来进行 `CI/CD`。
|
||||
|
||||
## Drone 关联项目
|
||||
### Drone 关联项目
|
||||
|
||||
在 Github 新建一个名为 `drone-demo` 的仓库。
|
||||
|
||||
打开我们已经 [部署好的 Drone 网站](install.md) 或者 [Drone Cloud](https://cloud.drone.io),使用 GitHub 账号登录,在界面中关联刚刚新建的 `drone-demo` 仓库。
|
||||
打开我们已经 [部署好的 Drone 网站](9.2_install.md) 或者 [Drone Cloud](https://cloud.drone.io),使用 GitHub 账号登录,在界面中关联刚刚新建的 `drone-demo` 仓库。
|
||||
|
||||
## 编写项目源代码
|
||||
### 编写项目源代码
|
||||
|
||||
初始化一个 git 仓库
|
||||
|
||||
@@ -72,7 +72,7 @@ trigger:
|
||||
└── app.go
|
||||
```
|
||||
|
||||
## 推送项目源代码到 GitHub
|
||||
### 推送项目源代码到 GitHub
|
||||
|
||||
```bash
|
||||
$ git add .
|
||||
@@ -82,7 +82,7 @@ $ git commit -m "test drone ci"
|
||||
$ git push origin master
|
||||
```
|
||||
|
||||
## 查看项目构建过程及结果
|
||||
### 查看项目构建过程及结果
|
||||
|
||||
打开我们部署好的 `Drone` 网站或者 Drone Cloud,即可看到构建结果。
|
||||
|
||||
@@ -92,7 +92,7 @@ $ git push origin master
|
||||
|
||||
本书 GitBook 也使用 Drone 进行 CI/CD,具体配置信息请查看本书根目录 [`.drone.yml`](../../../.drone.yml) 文件。
|
||||
|
||||
## 参考链接
|
||||
### 参考链接
|
||||
|
||||
* [Drone Github](https://github.com/drone/drone)
|
||||
* [Drone 文档](https://docs.drone.io/)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 部署 Drone
|
||||
## 部署 Drone
|
||||
|
||||
## 要求
|
||||
### 要求
|
||||
|
||||
* 拥有公网 IP、域名 (如果你不满足要求,可以尝试在本地使用 Gogs + Drone)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
* 对 `CI/CD` 有一定了解
|
||||
|
||||
## 新建 GitHub 应用
|
||||
### 新建 GitHub 应用
|
||||
|
||||
登录 GitHub,在 https://github.com/settings/applications/new 新建一个应用。
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
接下来查看这个应用的详情,记录 `Client ID` 和 `Client Secret`,之后配置 Drone 会用到。
|
||||
|
||||
## 配置 Drone
|
||||
### 配置 Drone
|
||||
|
||||
我们通过使用 `Docker Compose` 来启动 `Drone`,编写 `docker-compose.yml` 文件。
|
||||
|
||||
@@ -68,18 +68,18 @@ volumes:
|
||||
新建 `.env` 文件,输入变量及其值
|
||||
|
||||
```bash
|
||||
# 必填 服务器地址,例如 drone.domain.com
|
||||
## 必填 服务器地址,例如 drone.domain.com
|
||||
DRONE_SERVER_HOST=
|
||||
DRONE_SERVER_PROTO=https
|
||||
DRONE_RPC_SECRET=secret
|
||||
HOSTNAME=demo
|
||||
# 必填 在 GitHub 应用页面查看
|
||||
## 必填 在 GitHub 应用页面查看
|
||||
DRONE_GITHUB_CLIENT_ID=
|
||||
# 必填 在 GitHub 应用页面查看
|
||||
## 必填 在 GitHub 应用页面查看
|
||||
DRONE_GITHUB_CLIENT_SECRET=
|
||||
```
|
||||
|
||||
### 启动 Drone
|
||||
#### 启动 Drone
|
||||
|
||||
```bash
|
||||
$ docker-compose up -d
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
# 在 IDE 中使用 Docker
|
||||
## 在 IDE 中使用 Docker
|
||||
|
||||
使用 IDE 进行开发,往往要求本地安装好工具链。一些 IDE 支持 Docker 容器中的工具链,这样充分利用了 Docker 的优点,而无需在本地安装。
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# VS Code 中使用 Docker
|
||||
## VS Code 中使用 Docker
|
||||
|
||||
## 将 Docker 容器作为远程开发环境
|
||||
### 将 Docker 容器作为远程开发环境
|
||||
|
||||
无需本地安装开发工具,直接将 Docker 容器作为开发环境,具体参考 [官方文档](https://code.visualstudio.com/docs/remote/containers)。
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 操作系统
|
||||
## 操作系统
|
||||
|
||||
目前常用的 Linux 发行版主要包括 `Debian/Ubuntu` 系列和 `CentOS/Fedora` 系列。
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Alpine
|
||||
## Alpine
|
||||
|
||||
## 简介
|
||||
### 简介
|
||||
|
||||

|
||||
|
||||
@@ -22,7 +22,7 @@ ubuntu latest b39b81afc8ca 188.3 MB
|
||||
centos latest 8efe422e6104 210 MB
|
||||
```
|
||||
|
||||
## 获取并使用官方镜像
|
||||
### 获取并使用官方镜像
|
||||
|
||||
由于镜像很小,下载时间往往很短,读者可以直接使用 `docker run` 指令直接运行一个 `Alpine` 容器,并指定运行的 Linux 指令,例如:
|
||||
|
||||
@@ -31,7 +31,7 @@ $ docker run alpine echo '123'
|
||||
123
|
||||
```
|
||||
|
||||
## 迁移至 `Alpine` 基础镜像
|
||||
### 迁移至 `Alpine` 基础镜像
|
||||
|
||||
目前,大部分 Docker 官方镜像都已经支持 `Alpine` 作为基础镜像,可以很容易进行迁移。
|
||||
|
||||
@@ -61,7 +61,7 @@ RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories
|
||||
&& apk add --no-cache <package>
|
||||
```
|
||||
|
||||
## 相关资源
|
||||
### 相关资源
|
||||
|
||||
* `Alpine` 官网:https://www.alpinelinux.org/
|
||||
* `Alpine` 官方仓库:https://github.com/alpinelinux
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Busybox
|
||||
## Busybox
|
||||
|
||||
## 简介
|
||||
### 简介
|
||||
|
||||

|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
`BusyBox` 可运行于多款 `POSIX` 环境的操作系统中,如 `Linux`(包括 `Android`)、`Hurd`、`FreeBSD` 等。
|
||||
|
||||
## 获取官方镜像
|
||||
### 获取官方镜像
|
||||
|
||||
可以使用 `docker pull` 指令下载 `busybox:latest` 镜像:
|
||||
|
||||
@@ -29,7 +29,7 @@ REPOSITORY TAG IMAGE ID CREATED
|
||||
busybox latest e72ac664f4f0 6 weeks ago 2.433 MB
|
||||
```
|
||||
|
||||
## 运行 busybox
|
||||
### 运行 busybox
|
||||
|
||||
启动一个 `busybox` 容器,并在容器中执行 `grep` 命令。
|
||||
|
||||
@@ -107,7 +107,7 @@ tmpfs on /sys/firmware type tmpfs (ro,relatime)
|
||||
|
||||
`busybox` 镜像虽然小巧,但包括了大量常见的 `Linux` 命令,读者可以用它快速熟悉 `Linux` 命令。
|
||||
|
||||
## 相关资源
|
||||
### 相关资源
|
||||
|
||||
* `Busybox` 官网:https://busybox.net/
|
||||
* `Busybox` 官方仓库:https://git.busybox.net/busybox/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# CentOS Fedora
|
||||
## CentOS Fedora
|
||||
|
||||
## CentOS 系统简介
|
||||
### CentOS 系统简介
|
||||
|
||||
`CentOS` 和 `Fedora` 都是基于 `Redhat` 的常见 Linux 分支。`CentOS` 是目前企业级服务器的常用操作系统;`Fedora` 则主要面向个人桌面用户。
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统),它是基于 `Red Hat Enterprise Linux` 源代码编译而成。由于 `CentOS` 与 `Redhat Linux` 源于相同的代码基础,所以很多成本敏感且需要高稳定性的公司就使用 `CentOS` 来替代商业版 `Red Hat Enterprise Linux`。`CentOS` 自身不包含闭源软件。
|
||||
|
||||
### 使用 CentOS 官方镜像
|
||||
#### 使用 CentOS 官方镜像
|
||||
|
||||
**注意:CentOS 8 已于 2021 年 12 月 31 日停止维护(EOL)。对于新部署,推荐使用 CentOS Stream,或 Rocky Linux、AlmaLinux 等替代发行版。**
|
||||
|
||||
@@ -25,13 +25,13 @@ Status: Downloaded newer image for centos:latest
|
||||
CentOS Linux release 7.9.2009 (Core)
|
||||
```
|
||||
|
||||
## Fedora 系统简介
|
||||
### Fedora 系统简介
|
||||
|
||||

|
||||
|
||||
`Fedora` 由 `Fedora Project` 社区开发,红帽公司赞助的 `Linux` 发行版。它的目标是创建一套新颖、多功能并且自由和开源的操作系统。`Fedora` 的功能对于用户而言,它是一套功能完备的,可以更新的免费操作系统,而对赞助商 `Red Hat` 而言,它是许多新技术的测试平台。被认为可用的技术最终会加入到 `Red Hat Enterprise Linux` 中。
|
||||
|
||||
### 使用 Fedora 官方镜像
|
||||
#### 使用 Fedora 官方镜像
|
||||
|
||||
使用 `docker run` 命令直接运行 `Fedora` 官方镜像,并登录 `bash`。
|
||||
|
||||
@@ -45,7 +45,7 @@ Status: Downloaded newer image for fedora:latest
|
||||
Fedora release 39 (Thirty Nine)
|
||||
|
||||
|
||||
## 相关资源
|
||||
### 相关资源
|
||||
|
||||
* `Fedora` 官网:https://getfedora.org/
|
||||
* `Fedora` 官方仓库:https://github.com/fedora-infra
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Debian Ubuntu
|
||||
## Debian Ubuntu
|
||||
|
||||
`Debian` 和 `Ubuntu` 都是目前较为流行的 **Debian 系** 的服务器操作系统,十分适合研发场景。`Docker Hub` 上提供了官方镜像,国内各大容器云服务也基本都提供了相应的支持。
|
||||
|
||||
## Debian 系统简介
|
||||
### Debian 系统简介
|
||||
|
||||

|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
众多的 `Linux` 发行版,例如 `Ubuntu`、`Knoppix` 和 `Linspire` 及 `Xandros` 等,都基于 `Debian GNU/Linux`。
|
||||
|
||||
### 使用 Debian 官方镜像
|
||||
#### 使用 Debian 官方镜像
|
||||
|
||||
官方提供了大家熟知的 `debian` 镜像以及面向科研领域的 `neurodebian` 镜像。可以使用 `docker run` 直接运行 `Debian` 镜像。
|
||||
|
||||
@@ -24,13 +24,13 @@ Debian GNU/Linux 8
|
||||
|
||||
`Debian` 镜像很适合作为基础镜像,构建自定义镜像。
|
||||
|
||||
## Ubuntu 系统简介
|
||||
### Ubuntu 系统简介
|
||||
|
||||

|
||||
|
||||
`Ubuntu` 是一个以桌面应用为主的 `GNU/Linux` 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词(官方译名“友帮拓”,另有“吾帮托”、“乌班图”、“有奔头”或“乌斑兔”等译名)。`Ubuntu` 意思是“人性”以及“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。 `Ubuntu` 基于 `Debian` 发行版和 `GNOME/Unity` 桌面环境,与 `Debian` 的不同在于它每 6 个月会发布一个新版本,每 2 年推出一个长期支持 **(Long Term Support,LTS)** 版本,一般支持 3 年时间。
|
||||
|
||||
### 使用 Ubuntu 官方镜像
|
||||
#### 使用 Ubuntu 官方镜像
|
||||
|
||||
下面以 `ubuntu:24.04` 为例,演示如何使用该镜像安装一些常用软件。
|
||||
|
||||
@@ -123,7 +123,7 @@ root@7d93de07bf76:/# curl 127.0.0.1
|
||||
|
||||
配合使用 `-p` 参数对外映射服务端口,可以允许容器外来访问该服务。
|
||||
|
||||
## 相关资源
|
||||
### 相关资源
|
||||
|
||||
* `Debian` 官网:https://www.debian.org/
|
||||
* `Neuro Debian` 官网:http://neuro.debian.net/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 本章小结
|
||||
## 本章小结
|
||||
|
||||
本章讲解了典型操作系统镜像的下载和使用。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user