Docker私有仓库搭建&Go服务部署

简介: Docker私有仓库搭建&Go服务部署

前言


最近有个朋友在写一个新的项目, 想用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就直接打开配置改就行了

20200614190538878.png

这样私有镜像服务就搭好了


制作自己的服务镜像


服务端用的是golang, 包管理是go mod, 然后直接找官方发布的镜像就可以了, 下面都有官方打包实例


20200614183545983.png

然后需要注意一下时区问题, 这个我之前发过博文, 时区不同可能会存在差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

完结


这个只是搭个简单的测试服务, 生产环境的话还是建议用阿里云的镜像服务, 比较方便管理和服务部署监控


目录
相关文章
kde
|
1月前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
kde
655 4
|
30天前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
103 5
kde
|
1月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
kde
604 7
kde
|
1月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
kde
392 4
|
Java Go C++
GO语言、DOCKER 和新技术
作为 Go 语言的三位创始人之一,Unix 老牌黑客罗勃·派克(Rob Pike)在新文章“Go: Ten years and climbing”中,回顾了一下 Go 语言的发展过程。
2440 0
|
1月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
144 1
|
3月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
281 1
|
3月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
358 0
|
3月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
229 0