0. 背景
最开始GoWeb部署是基于基础镜像golang:alpine
来创建我们的镜像,并将我们的程序代码COPY到容器里并打包运行,这种方式虽然能快速的部署一个GoWeb项目,但是后期项目维护并不友好,需要我们频繁的执行Dockerfile。
这里能我推荐使用基于基础镜像centos
来创建我们的镜像。使用centos环境主要是为了可以安装以上的各种环境,方便后期可以安装其余所需要的环境。
部署流程简要概括
- linux上提前下载好Git,方便项目的第一次clone
- 在linux服务器上使用git拉取项目代码(使用Http连接下载)
- 项目根目录下编写Dockerfile文件
- 初始化Docker镜像和容器,以及完成自动化部署
- 进入容器打包运行程序
后需实时部署
- 在橡木容器中使用git拉取项目代码
- 重新打包并运行程序
1. Dockerfile生成基础镜像
FROM centos:7
RUN yum -y update \
&& yum -y install vim \
&& yum -y install git \
&& yum install -y gcc-c++ \
&& yum -y install wget\
&& wget -P /root/ https://dl.google.com/go/go1.14.1.linux-amd64.tar.gz \
&& tar -zxvf /root/go1.14.1.linux-amd64.tar.gz -C /usr/local \
&& echo export PATH=$PATH:/usr/local/go/bin >> /etc/profile \
&& source /etc/profile && go version \
&& echo "source /etc/profile" >> /root/.bashrc \
&& go env -w GOPROXY=https://goproxy.cn,direct \
&& go env -w GO111MODULE=on \
- vim 可以方便编辑文件。
- git 主要是为了可能在GitLab、GitHub、Gitee上可以随时拉去最新的项目,进行合作开发,实时部署。
- gcc-c++ 编译器,编译程序为二进制文件
- wget 下载go压缩包
- 安装go环境并配置GOPROXY设置go mod
1.1 build生成镜像
docker build . -t $IMAGE_NAME
- IMAGE_NAME:生成的镜像名
2. 生成容器
运行基础镜像生成项目对应的容器
docker run -e TZ="Asia/Shanghai" -id --name $CONTAINER_NAME -v $PROJECT_PWD:/project/$PROJECT_NAME $IMAGE_NAME
- CONTAINER_NAME :容器名
- PROJECT_PWD:项目在服务器上的路径
- PROJECT_NAME :项目在容器中的项目目录名
- IMAGE_NAME:镜像名