传统构建部署
以一个简单的前后端项目来说,分别编写前后端的 Dockerfile
文件并构建镜像,然后编写 docker-compose.yml
构建部署,启动运行。
一个简单的例子:
- 前端:
- 项目名:kubemanagement-web
- 技术栈:Vue
- 后端:
- 项目名:kubemanagement-server
- 技术栈:Golang
tips: 不同语言对应的构建逻辑编写不同。关于 Dockerfile 以及 docker-compose 如何编写,请查阅官方文档,此处不在赘述。
1. 编写前端 Dockerfile 文件:
#第一阶段构建
FROM node:16.13.2 as builder
WORKDIR /app/kubemanagement-web
COPY . .
RUN npm config set registry https://registry.npmmirror.com
RUN npm install
# 开始构建
RUN npm run build:prod
# 第二阶段构建
FROM nginx
COPY --from=builder /app/kubemanagement-web/dist/ /usr/share/nginx/html/
COPY --from=builder /app/kubemanagement-web/default.conf.template /etc/nginx/templates/default.conf.template
EXPOSE 80
2. 编写后端 Dockerfile 文件:
FROM golang:1.20-alpine3.16 as builder
WORKDIR /go/src/kubemanagement.com/server
COPY . .
RUN go env -w GO111MODULE=on \
&& go env -w GOPROXY=https://goproxy.cn,direct \
&& go env -w CGO_ENABLED=0 \
&& go env \
&& go mod tidy \
&& go build -o server .
FROM alpine:latest
LABEL MAINTAINER="zj20162325@163.com"
WORKDIR /go/src/kubemanagement.com/server
COPY --from=0 /go/src/kubemanagement.com/server/config.yaml ./config.yaml
COPY --from=0 /go/src/kubemanagement.com/server/.kube/config ./.kube/config
COPY --from=0 /go/src/kubemanagement.com/server/server ./
EXPOSE 8082
ENTRYPOINT ./server
3. 分别构建镜像:
- 前端
docker build -t harbor.kubemanagement.com/kubemanagement/kubemanagement-web:v1.0 .
- 后端
docker build -t harbor.kubemanagement.com/kubemanagement/kubemanagement:v1.0 .
结果如下:
如果需要推送镜像,比如推送到私有 Harbor 仓库,可执行:
docker push harbor.kubemanagement.com/kubemanagement/kubemanagement-web:v1.0
docker push harbor.kubemanagement.com/kubemanagement/kubemanagement:v1.0
4. 编写 docker-compose.yml 文件:
version: "3"
networks:
network:
ipam:
driver: default
config:
- subnet: '177.7.0.0/16'
services:
web:
container_name: kubemanagement-web
image: harbor.kubemanagement.com/kubemanagement/kubemanagement-web:v1.0
restart: always
environment:
BACKEND_HOST: 'http://177.7.0.12:8082/'
ports:
- '8081:80'
depends_on:
- server
networks:
network:
ipv4_address: 177.7.0.11
server:
container_name: kubemanagement-server
image: harbor.kubemanagement.com/kubemanagement/kubemanagement:v1.0
restart: always
ports:
- '8082:8082'
networks:
network:
ipv4_address: 177.7.0.12
使用 docker-compose 自动完成包括构建镜像,创建服务,启动服务,并关联服务相关容器的一系列操作:
docker-compose up -d
结果如下:
此时通过相应 ip:port 即可访问页面,实例页面如下:
使用 Gogs & Drone 持续集成
Gogs
编写 gogs 的 docker-compose.yml 文件
version: "3"
volumes:
gogsdata:
services:
gogs:
container_name: gogs
image: gogs/gogs:0.12.10
volumes:
- gogsdata:/data
restart: always
ports:
- '10022:22'
- '10880:3000'
执行:
docker-compose up -d
结果如下:
通过 10880 端口访问:
数据库根据需求来选,这里选择最轻量级的 SQLite3 作为演示,其他配置项可以默认,由于编写 docker-compose.yml 时做了端口映射,主要修改域名、端口号,如下:
编写完可选配置后点击立即安装,我这里就简单设置管理员信息:
gogs 的使用与 git 基本一致,简单创建一个仓库并提交信息:
Drone
当前时间:2023/8/7 23:45:48
后续内容明天再完成,即 2023/8/8 之前