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')