前言
最近有个朋友在写一个新的项目, 想用docker搭建一套测试服务, 问我有没有什么坑需要注意的…其实挺简单的, 也没啥坑, 注意一下时区问题和docker配置就好了
大体流程
搭建私有仓库
docker pull registry docker run -d -v /data/registry:/var/lib/registry -p 5000:5000 镜像Id
这样启动确认没问题就可以了, 然后就是配置的事, docker在1.3之后交互默认使用https, 比如你的机器ip是127.0.0.1, 那么你需要在客户端的docker配置里面信任这个私有仓库的地址, 配置文件地址linux是/etc/docker/daemon.json, 加上
{ "insecure-registries":["127.0.0.1:5000"]}
mac和windows就直接打开配置改就行了
这样私有镜像服务就搭好了
制作自己的服务镜像
服务端用的是golang, 包管理是go mod, 然后直接找官方发布的镜像就可以了, 下面都有官方打包实例
然后需要注意一下时区问题, 这个我之前发过博文, 时区不同可能会存在差8小时的问题, 下面给一个简单实例
Dockerfile
# 设置基础镜像 FROM golang:1.12.6-alpine # 作者描述信息 LABEL maintainer="飞啊飞" # 使用国内源 RUN echo -e http://mirrors.ustc.edu.cn/alpine/v3.7/main/ > /etc/apk/repositories # copy当前目录的文件到镜像里面的工作目录目录下 COPY ./config/test.json /demo/ // 配置文件 COPY server /demo/ // 打包的linux二进制文件 #设置东八区,北京时间 ENV TZ=Asia/Shanghai RUN apk add --no-cache tzdata && ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 指定路径 WORKDIR /demo/ # 执行命令 这里给文件增加执行权限 RUN ["chmod", "+x", "/demo/server"] # 容器入口, 执行命令 CMD ["./server", "-config", "test.json"]
打包命令
像这种能偷懒的事当然是写个脚本啦
mac和linux的话就写个shell脚本
#!/usr/bin/env bash Version=v1.0.1 serviceName="127.0.0.1:5000/server" // go打包成linux可执行文件 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o server // 制作镜像(千万别忽略最后的一个点) docker build -t ${serviceName}:${Version} . // 提交到私有仓库 docker push ${serviceName}:${Version}
window的就bat文件
@echo off chcp 65001 SET version=1.0.1 SET serviceName="127.0.0.1:5000/server" set GOARCH=amd64 set GOOS=linux go build -o server docker build -t %serviceName%:v%version% . docker push %serviceName%:v%version%
服务器部署
一样的shell脚本
#!/usr/bin/env bash serviceName="127.0.0.1:5000/server" echo "删除当前运行容器" docker rm -f demo_server echo "删除当前镜像" docker rmi $(docker images | grep "${serviceName}" | awk '{print $3}') echo "拉取镜像版本 $1" docker pull ${serviceName}:v$1 echo "启动新版本容器" docker run -d -p "8888:8888" --name=demo_server ${serviceName}:v$1 echo "启动完成"
这样就ok了, 大功告成
查看日志
docker logs -f --tail=20 demo_server
完结
这个只是搭个简单的测试服务, 生产环境的话还是建议用阿里云的镜像服务, 比较方便管理和服务部署监控