Docker下搭建gogs+artifactory+jenkins

最近组内新购入了一台Mac mini,主要用来当打包机和服务器,考虑到原先的iMac性能不足,所以在采购之初,iOS组同事就将Mac mini的处理器配置到顶格,但无奈内存还是8G,一点点小遗憾,拿到这机器后,我们搁置了一周,后来商量决定还是直接上Docker,以免后续再换新机器又得一堆折腾的事情,所以由我来先折腾安装Docker和在上部署Android所需要的环境。

安装 Docker

macOS上最好用的安装方式还是Homebrew,如何安装Homebrew,参考我之前的博文《终端使用小技巧》

Homebrew 的 Cask 已经支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 来进行安装:

$ brew cask install docker
//最后会显示安装成功 ↓↓↓↓
🍺  docker was successfully installed!

当然也可以手动下载,就和其他macOS软件一样,是个dmg文件,直接把小鲸鱼拖到Applications里面即可。

安装完以后,从应用中找到 Docker 图标并点击,运行之后,会在右上角菜单栏看到多了一个可爱的鲸鱼图标,这个图标表明了 Docker 的运行状态。

安装 gogs

既然安装好Docker,肯定是为了使用Docker Hub上的gogs镜像创建容器。

步骤

1、拉取gogs镜像

$ docker pull gogs/gogs

2、创建数据挂载目录并设置1000权限

$ sudo mkdir -p ~/Data/Gogs
$ sudo chown 1000 ~/Data/Gogs -R

3、使用run命令绑定端口和挂载目录映射

$ docker run --name gogs -d -p 22:22 -p 3000:3000 -v ~/Data/Gogs:/data gogs/gogs
备注:
--name 容器命名,不能与已存在的重名
-d 将容器跑到后台
-p 用来配置外置端口:内置端口映射关系
-v 用来配置外置目录:内置目录映射关系

4、配置自己的gogs

此处主要就是傻瓜化的页面参数配置,略

5、将配置好的容器打包成镜像

打包镜像比较简单,先找到容器的CONTAINER ID,然后根据CONTAINER ID将容器commit并取个新的镜像名。

//获取[CONTAINER ID]
$ docker ps
//打包成镜像
$ docker commit -m  ""   -a  ""   [CONTAINER ID]  [新镜像名]

以自定义镜像部署

上面提到了gogs的容器打包成自定义镜像,artifactory和jenkins的方式基本类似,我在本地已经全部打包成带-local的自定义镜像,下面的代码显示了如何轻松部署自定义镜像。

$ docker images
REPOSITORY                                TAG                 IMAGE ID            CREATED             SIZE
jenkins-local                             latest              7e534022aff8        7 minutes ago       712MB
maven-local                               latest              f14f7278269b        8 minutes ago       1.03GB
gogs-local                                latest              6af3a7b9a547        About an hour ago   156MB
docker.bintray.io/jfrog/artifactory-oss   latest              b87d8f746026        6 days ago          907MB
gogs/gogs                                 latest              d5b9815c59e1        13 days ago         96.5MB
registry.docker-cn.com/jenkins/jenkins    lts                 806f56c84444        3 weeks ago         703MB
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES
03805c16bd1d        e945e5b0afdb        "/entrypoint-artifac…"   2 hours ago         Up 2 hours          0.0.0.0:8081->8081/tcp                       artifactory
d83c9d67e9ec        gogs/gogs           "/app/gogs/docker/st…"   9 hours ago         Up 3 hours          0.0.0.0:22->22/tcp, 0.0.0.0:3000->3000/tcp   gogs
$ docker run --name jenkins -d -p 8080:8080 -p 50000:50000 -v /Users/sungrow/Data/Jenkins:/var/jenkins_home jenkins-local
846200d6f0a184c7f96b94bb9d92d548c5b6e2993dedf60cf9bb36957d733507
$ docker run --name maven -d -p 8081:8081 -v /Users/sungrow/Data/Artifactory:/var/opt/jfrog/artifactory maven-local
1e00e1a243a2119b4ae399e05fe63fa5b7bed1f97299a71c63c7afcdbd26d7bf
$ docker run --name gogs -d -p 22:22 -p 3000:3000 -v /Users/sungrow/Data/Gogs:/data gogs-local
71eeffa65a574b64258cacdfa9948c8c51022fe28af80ed2b5e8b6ecabf63548

时区问题

Docker时区使用的是默认的UTC时间,与我们机器的时间不一致,所以需要对容器内的时间进行同步

//获取[CONTAINER ID]
$ docker ps
//复制宿主时区
$ docker cp /etc/localtime [CONTAINER ID或者CONTAINER NAME]:/etc/localtime

Jenkins由于使用的是openjdk,还需要额外设置下,打开【系统管理】->【脚本命令行】运行下面的命令:

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

标签:maven, jenkins, gogs, docker, artifactory