前段时间,公司意外断电,导致内网服务器硬盘数据损坏, 之前纯手工打造的内网环境全跪了。欲哭无泪,于是就不哭了,借这个机会体验一把 docker
, 这里记录一下使用中遇到的一些状况。
原来的内网环境中,包含了
CI
maven
仓库的托管 亿华
出品,用于内网dns解析 以及内网的文件服务器,上传服务器等
去年8月份,公司刚成立,一个人瞎倒腾了3-4天才大致搞定了这些。
docker pull
docker run
以 jenkins
为例,找了一个 docker image
docker pull jenkins docker run -d -p 49001:8080 -v $PWD/jenkins:/var/jenkins_home -t jenkins
done!
docker-compose
我使用的是这种方式
, 示例的 compose file 如下:
version: '2' services: oss: restart: always image: jfrog-docker-reg2.bintray.io/jfrog/artifactory-oss:latest volumes: - /var/opt/jfrog/artifactory/backup:/var/opt/jfrog/artifactory/backup:Z - /var/opt/jfrog/artifactory/logs:/var/opt/jfrog/artifactory/logs:Z - /var/opt/jfrog/artifactory/data:/var/opt/jfrog/artifactory/data:Z - /var/opt/jfrog/artifactory/etc:/var/opt/jfrog/artifactory/etc:Z ports: - "10081:8081"
一共花了 半天 时间,完成了 gitlab
, gitlab-runner
, spark
, artifactory
的搭建, 主要的时间还是花在了下载 docker image
的过程中。
没有 image
和 container
的概念
第一次接触,对于其中的概念没有理解清楚就开始用,直接导致了后面的问题。
容器的数据没有持久化
部署的容器完全以搜索到的介绍为准,让我 mount
数据目录的,我就操作。没让我 mount
的,我就直接启动。于是,在一次重启之后, artifactory
内下载下来的所有 jar
包都丢了。
权限
mount
进去的数据文件的权限默认是 root
( 其实和使用的image相关,看它是怎么设置目录权限的,如果没有管你mount进去的文件,就默认为root
), 如果想手工调整,看该镜像是否提供了 entry point
用于修改。或者自己可以基于该 image
重编一个符合自己需求的镜像。
环境变量
在安装完成 gitlab-runner
(类似于 jenkins
的一个 ci
工具), 我希望以我指定的 java
和 maven
来执行打包等操作。于是将这些文件 mount
进去之后, 需要设定一下环境变量来使用指定路径下的软件。 compose file
中有一个 directive
叫 environments
可以完成。
指定host的解析
由于我们的mvn, ci都是在内网,并且手动绑定host来指定到某个ip, 所以也需要手工设置容器内的host。通过 compose file
中的 extra_hosts
即可制定。
作为其他防御措施,还搭了 raid-1
, 脚本每天备份,备份数据文件夹以及对应的 docker compose file
传到某个云服务器上。以后
再重新搭建应该更快了.
搭建,部署,启动 docker
真的都是 好快 , 好快 , 好快 ...