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。