深度优先

这个家伙好懒,除了文章什么都没留下

0%

【GO】Web项目Docker部署

原文地址:https://blog.csdn.net/reachyu/article/details/106575961

环境介绍

Go版本:1.13.1
开发工具:IntelliJ IDEA 2019.2.3 x64
开发环境:windows10 64位
部署环境:centos7

代码工程目录结构

代码直接build image部署

上传代码到centos7

Dockerfile内容

1
2
3
4
5
6
7
8
9
10
11
12
13
## 引入最新的golang ,不设置版本即为最新版本
FROM golang
## 在docker的根目录下创建相应的使用目录
RUN mkdir -p /www/webapp
## 设置程序在容器内的工作路径
WORKDIR /www/webapp
COPY . /www/webapp
## 编译
#RUN go build .
## 暴露容器内部端口
EXPOSE 9090
## 启动docker需要执行的文件
CMD go run main.go

制作镜像

Dockerfile和main.go在同一个目录

1
docker build -t appmng1.0:V1.0 -f Dockerfile .

代码直接build image,镜像非常大,如下图

启动容器

1
docker run --name appmng -d -p 9090:9090 appmng1.0:V1.0

访问

http://ip:9090/html

查看日志

1
docker logs 94af72d5961d

代码打包再build image部署

打包可执行文件

windows打包linux可执行文件,在项目根目录依次执行

1
2
3
SET GOARCH=amd64
SET GOOS=linux
go build

项目根目录会生成linux可执行文件

Dockerfile内容

1
2
3
4
5
6
7
8
9
10
11
12
#使用了镜像大小体积只有5MB的alpine镜像
FROM alpine:latest
#在docker的根目录下创建相应的使用目录
RUN mkdir -p /go/app
#设置工作路径
WORKDIR /go/app
#把Dockerfile同级目录所有文件拷贝到上面设置的容器的工作目录中
COPY . .
#暴露容器内部端口
EXPOSE 9090
#入口
ENTRYPOINT ["/go/app/appmng"]

制作镜像

应用打包的linux可执行文件和Dockefile放在同一个目录
注意:用打包的linux可执行文件要执行chmod 777,否则容器无法执行

1
docker build -t appmng:V1.0 -f Dockerfile .

代码打包后再build image,镜像通常只有几十兆,比第一种方式小了很多,但是这种方式,静态资源无法打入包中。

启动容器

1
docker run --name appmng-d -p 9090:9090 appmng:V1.0

Golang代理设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
## 引入最新的golang ,不设置版本即为最新版本
FROM golang
## 在docker的根目录下创建相应的使用目录
RUN mkdir -p /www/webapp
## 设置程序在容器内的工作路径
WORKDIR /www/webapp
COPY . /www/webapp
## 编译
#RUN go build .
## 暴露容器内部端口

RUN export GO111MODULE=on && \
export GOPROXY=https://goproxy.cn && \
go mod download

RUN go build -o main main.go

EXPOSE 8090
## 启动docker需要执行的文件
CMD go run main.go