docker swarm集群的使用

序 咱们书接上回,我搞定了golang程序的编译,搞定了docker镜像的打包,搞定了流水线。现在项目部署与热更新成了我要面对的问题。 受制于公司提供的部署环境(只提供给我一台主机,主机上有docker),我暂时没有k8s集群可用,但又希望能完成基于流水线的自动部署、热更新和不停机更新。所以返现了下面要说的docker swarm 什么是 swarm mode Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具。具体内容可以参见:基本概念,这里不再详细解释。 集群创建 docker swarm init Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \ 192.168.99.100:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. 使用docker swarm init命令,创建一个集群,本机的docker就会变成一个单节点的集群。

2022/09/30 · mangk

使用alpine构建Docker镜像

序 最近的工作中,我使用Golang开发了一个web项目,并准备通过流水线的方式做持续集成与发布。在这是用过程中遇到了一些技术与问题包括:通过make构建golang程序、dockerfile不能访问父级目录、使用Alpine作为基础来制作我的容器镜像 通过Makefile打包Golang程序 什么是Makefile 代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(build)。Make是最常用的构建工具,诞生于1977年,主要用于C语言的项目。但是实际上,任何只要某个文件有变化,就要重新构建的项目,都可以用Make构建。 关于make命令这里不做深入介绍,引用链接提供介绍清晰明了的直通车(让我们感谢大神🙏) 阮一峰的网络日志-Make命令教程 Golang项目使用Makefile 我对makefile文件的理解是它有点像时一个命令的集合,通过一个个target<目标>可以按照顺序快速的执行多条命令而不用再手动一条条输入。if else与变量的加入让这个流程变得更加丰富和多变。省去了命令输入的同时也让代码运行的流程更加清楚。 示例代码 .PHONY: build clean run # golang 打包可执行文件的运行环境 (可以在运行make命令时传入:make OS=windows) OS=linux BUILD_DOCKER_IMAGE=0 all: build run: go run ./cmd/main.go build: # 下面的GOOS=$(OS)使用了上面定义的OS变量 @GO111MODULE=on GOPROXY=https://goproxy.cn,direct CGO_ENABLED=0 go mod tidy && GOOS=$(OS) go build -o app main.go # if判断中同样可以使用变量 ifeq ($(BUILD_DOCKER_IMAGE),1) @cd deploy && docker build -t . endif clean: # 命令前加@会让命令执行但不在控制台输出,这里没有@命令执行时会输出到终端 rm app ifeq ($(BUILD_DOCKER_IMAGE),1) @docker rmi recommend_photo endif Dockerfile不能访问父级目录 项目汇中我使用Dockerfile作为构架docker镜像的基础。通过docker build -t image_name ....

2022/09/27 · mangk