3.1 Dockerfile编写与镜像制作

未匹配的标注

Dockerfile编写

我们根据2.3 服务编写2.4 网关编写所建立好的目录,编写对应的Dockerfile文件

account

account/deploy/Dockerfile

FROM centos:7

ADD bin/account /

RUN chmod 777 /account

# 通过先设置一个环境变量,然后在容器运行时传入环境变量具体的值,达到外部指定参数运行的效果

ENV PARAMS=""

ENTRYPOINT ["sh","-c","/account $PARAMS"]

apigateway

apigateway/deploy/Dockerfile

FROM centos:7

ADD bin/apigw /

RUN chmod 777 /apigw

# 通过先设置一个环境变量,然后在容器运行时传入环境变量具体的值,达到外部指定参数运行的效果

ENV PARAMS=""

ENTRYPOINT ["sh","-c","/apigw $PARAMS"]

编写好Dockerfile后,我们先不急着立刻使用docker build来创建镜像,因为我们需要经常重新制作镜像以及上传到我们私人的镜像仓库,所以我们接下面编写shell脚本

容器制作

docker私人仓库

企业的私人仓库可以自己构建Harbor,这个演示我就直接使用阿里云的免费容器镜像服务作为私人仓库

请自行开通容器镜像服务与创建好命名空间哦

我们在阿里云上将仓库设置为私有,然后我们在本地进行docker仓库的认证登陆

docker login --username=guaosi@vip.qq.com registry.cn-shenzhen.aliyuncs.com

# guaosi@vip.qq.com 是阿里云的登录名 请自行修改后,回车后输入密码,回车通过认证

account

build

account/deploy/docker_build.sh

#!/bin/bash
DOCKER_IMAGE_HOST="registry.cn-shenzhen.aliyuncs.com"

DOCKER_IMAGE_NAMESPACE="go_micro"

DOCKER_IMAGE_HUB="account"

IMAGE_TAG="v1.0"

WORK_PATH=$(dirname $0)

# 当前位置跳到脚本位置
cd ./${WORK_PATH}

# 取到脚本目录
WORK_PATH=$(pwd)

mkdir bin

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct

# 跨平台 Mac编译Linux 需要交叉编译
# CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ${WORK_PATH}/bin/ ${WORK_PATH}/../
go build -o ${WORK_PATH}/bin/ ${WORK_PATH}/../

echo -e "\033[32m编译完成: \033[0m ${WORK_PATH}/bin/"

# 容器制作
docker build -t ${DOCKER_IMAGE_HOST}/${DOCKER_IMAGE_NAMESPACE}/${DOCKER_IMAGE_HUB}:${IMAGE_TAG} -f ./Dockerfile .

echo -e "\033[32m镜像打包完成,请推送: \033[0m ${DOCKER_IMAGE_HOST}/${DOCKER_IMAGE_NAMESPACE}/${DOCKER_IMAGE_HUB}:${IMAGE_TAG}\n"

# 删除原二进制文件以及所在目录
rm -rf bin

echo -e "\033[32m残留二进制文件清理成功"

DOCKER_IMAGE_NAMESPACE 请自行修改为自己的阿里云容器镜像服务的命名空间

然后我们执行如下命令,进行account的镜像制作

chmod a+x account/deploy/docker_build.sh && account/deploy/docker_build.sh

push

account/deploy/docker_push.sh

#!/bin/bash
DOCKER_IMAGE_HOST="registry.cn-shenzhen.aliyuncs.com"

DOCKER_IMAGE_NAMESPACE="go_micro"

DOCKER_IMAGE_HUB="account"

IMAGE_TAG="v1.0"

# 推送
docker push ${DOCKER_IMAGE_HOST}/${DOCKER_IMAGE_NAMESPACE}/${DOCKER_IMAGE_HUB}:${IMAGE_TAG}

echo -e "\033[32m镜像推送完成: \033[0m ${DOCKER_IMAGE_HOST}/${DOCKER_IMAGE_NAMESPACE}/${DOCKER_IMAGE_HUB}:${IMAGE_TAG} \n"

DOCKER_IMAGE_NAMESPACE 请自行修改为自己的阿里云容器镜像服务的命名空间

然后我们执行如下命令,进行account的镜像推送

chmod a+x account/deploy/docker_push.sh && account/deploy/docker_push.sh

apigateway

build

apigateway/deploy/docker_build.sh

#!/bin/bash
DOCKER_IMAGE_HOST="registry.cn-shenzhen.aliyuncs.com"

DOCKER_IMAGE_NAMESPACE="go_micro"

DOCKER_IMAGE_HUB="apigw"

IMAGE_TAG="v1.0"

WORK_PATH=$(dirname $0)

# 当前位置跳到脚本位置
cd ./${WORK_PATH}

# 取到脚本目录
WORK_PATH=$(pwd)

mkdir bin

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct

# 跨平台 Mac编译Linux 需要交叉编译
# CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ${WORK_PATH}/bin/ ${WORK_PATH}/../
go build -o ${WORK_PATH}/bin/ ${WORK_PATH}/../

echo -e "\033[32m编译完成: \033[0m ${WORK_PATH}/bin/"

# 容器制作
docker build -t ${DOCKER_IMAGE_HOST}/${DOCKER_IMAGE_NAMESPACE}/${DOCKER_IMAGE_HUB}:${IMAGE_TAG} -f ./Dockerfile .

echo -e "\033[32m镜像打包完成,请推送: \033[0m ${DOCKER_IMAGE_HOST}/${DOCKER_IMAGE_NAMESPACE}/${DOCKER_IMAGE_HUB}:${IMAGE_TAG}\n"

# 删除原二进制文件以及所在目录
rm -rf bin

echo -e "\033[32m残留二进制文件清理成功"

DOCKER_IMAGE_NAMESPACE 请自行修改为自己的阿里云容器镜像服务的命名空间

然后我们执行如下命令,进行apigw的镜像制作

chmod a+x account/deploy/docker_build.sh && account/deploy/docker_build.sh

push

apigateway/deploy/docker_push.sh

#!/bin/bash
DOCKER_IMAGE_HOST="registry.cn-shenzhen.aliyuncs.com"

DOCKER_IMAGE_NAMESPACE="go_micro"

DOCKER_IMAGE_HUB="apigw"

IMAGE_TAG="v1.0"

# 推送
docker push ${DOCKER_IMAGE_HOST}/${DOCKER_IMAGE_NAMESPACE}/${DOCKER_IMAGE_HUB}:${IMAGE_TAG}

echo -e "\033[32m镜像推送完成: \033[0m ${DOCKER_IMAGE_HOST}/${DOCKER_IMAGE_NAMESPACE}/${DOCKER_IMAGE_HUB}:${IMAGE_TAG} \n"

DOCKER_IMAGE_NAMESPACE 请自行修改为自己的阿里云容器镜像服务的命名空间

然后我们执行如下命令,进行apigw的镜像推送

chmod a+x account/deploy/docker_push.sh && account/deploy/docker_push.sh

代码仓库

最终的代码和部署文件,已经传至github,欢迎star。

github.com/guaosi/go-micro-build

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~