1.如何把在本地开发好的项目部署到服务器上?
1.1 在服务器终端生成名为httpserver
的容器
[root@VM-4-10-centos HttpServer]# docker build -t httpserver .
1.2 运行容器
# 在容器内部监听 8080/tcp 端口,并将其映射到主机的 8081/tcp 端口
[root@VM-4-10-centos HttpServer]# docker run --rm -p 8080:8081 httpserver
- 为什么要把8080(容器)->8081(主机)?
- 因为代码将主机的监听端口固定为8081
2.一些其他常用的命令
2.1 查看正在运行的容器
[root@VM-4-10-centos HttpServer]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eb6eeaf5d34c httpserver "./main" 28 minutes ago Up 28 minutes 8080/tcp, 0.0.0.0:8080->8081/tcp, :::8080->8081/tcp laughing_bouman
2.2 在正在运行的容器内执行一个shell
(这里在容器内执行了ls
命令)
[root@VM-4-10-centos HttpServer]# docker exec -it eb6eeaf5d34c sh
/app # ls
images main
3.Dockerfile怎么写?
# 1.设置基础镜像为 golang:1.21.1-bookworm
FROM golang:1.21.1-bookworm as builder
ENV GO111MODULE=on
GOPROXY=https://goproxy.cn,direct
# 2.设置工作目录为 /app
WORKDIR /app
# 将当前目录下的所有文件复制到容器的 /app 目录中
COPY . .
# 运行 go mod tidy 来整理依赖项
RUN go mod tidy
# 切换工作目录到 /app/cmd
WORKDIR /app/cmd
# 复制 Controller 目录中的文件到容器的 /app/cmd/Controller 目录中
COPY ../Controller ./Controller
# 复制 main.go 文件到容器的 /app/cmd 目录中
COPY ../main.go .
# 构建可执行文件
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o main
# 3.设置基础镜像为 busybox:1.28.4
FROM busybox:1.28.4
# 设置工作目录为 /app
WORKDIR /app
# 复制本地的 images 目录到容器的 /app/images 目录中。
COPY images images
# 复制构建阶段中生成的可执行main 到当前镜像的 /app 目录
COPY --from=builder /app/cmd/main .
# 指定Gin框架的运行模式为发布模式
ENV GIN_MODE=release
# 容器将监听的端口号为 8080
EXPOSE 8080
# 运行编译后的可执行文件 main
ENTRYPOINT ["./main"]