社区主页 文章详情

嘿群辉 篇四:docker固定ip,抛弃端口映射吧  -- 通过搭建gitlab看看如何使用

啥破狼 11-27 17:37 + 关注

小编注:此篇文章来自#原创新人#活动,成功参与活动将获得额外100金币奖励。

0. 什么是docker

抛开win和mac外,在linux系统下(包括群辉),docker是容器,方便部署和资源隔离、限制。

通过docker部署程序和普通直接部署程序相比较,仅仅会多占用一些磁盘空间。所以大家可以放心大胆的使用docker。

注册表: 相当于应用商城,可以选择下载不同的应用。

镜像: 就是下载的应用、软件包,大家下载的都是绿色软件,几乎不需要安装的,可能需要我们简单配置下。

容器: 相当于我们安装好的软件,同一个镜像可以启动多次,创建多个一样的容器。

很多套件是我们安装的是一些服务,比如数据库、gitlab、homeassistant等。群辉上的docker套件,每次重启容器的ip会发生变化,通过端口映射的方式来找到对应的服务。开始我也是采用这种方式,后面发现容器一多,端口就乱78遭的。

那么就得想个办法固定ip,这样直接通过ip+端口的形式访问服务,没有必要进行端口映射了。

本文内容需要开启ssh,使用终端进行。

1. 创建网络

原有的网络不支持固定ip,只能新建一个了:

sudo docker network create --subnet=172.18.0.0/16 fixbridge

默认的网段是172.17.0.0/16,我们使用相邻的,具体的随意即可。fixbridge 是网络的名称,后续需要通过这个名字指定网络。

创建的网络创建的网络

创建的网络也可以通过界面查看


2. 创建容器

我们不能直接通过群辉的界面创建,只能通过终端创建容器。 创建的容器,界面也可以看到和操作。我们以'sameersbn/gitlab:latest'为例子,创建一个gitlab服务。

2.1 创建redis容器

https://hub.docker.com/r/sameersbn/redis/

提供的命令是多行的,后面的表示该条命令没有结束。直接复制到终端即可。

sudo docker run --name redis_101 -itd --net fixbridge --ip 172.18.0.101 --restart always
--volume /volume1/docker/redis/data:/var/lib/redis
--volume /volume1/docker/redis/log:/var/log/redis
--env 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
--env 'REDIS_VERSION=4.0.9'
--env 'REDIS_USER=redis'
--env 'REDIS_DATA_DIR=/var/lib/redis'
--env 'REDIS_LOG_DIR=/var/log/redis'
sameersbn/redis:latest

--name 容器的名称, 我起的名字里面带ip,方便查看

--net 我们创建的网络名称,写你的网络名字哦

--ip 指定的ip。除了该参数界面无法配置外,其他参数界面均可配置。

--restart always 不当关机时,会尝试重启

--volume 指定路径映射, :前面是宿主的路径,该路径你需要在群辉里面创建的。 :后面是映射到容器内部的路径。

--env 环境变量

sameersbn/redis:latest 下载的镜像和版本,和自己下载的镜像对应哦。

嘿群辉 篇四:docker固定ip,抛弃端口映射吧  -- 通过搭建gitlab看看如何使用

我们选择镜像--启动---高级设置

--env 就是环境选项卡,全部拷贝到命令行里面,这些参数目的是让我们改的,一般默认就行

--volume 对应的是卷,哪些路径需要映射呢? 基本都是env指定的。

如果不知道怎么填写可以启动一下,看看默认是什么内容。或者通过介绍页面查看帮助。

2.2 postgresql容器

https://hub.docker.com/r/sameersbn/postgresql

postgresql这个数据库,和mysql一样出名,gitlab支持较好。使用mysql也不错,但是gitlab无法使用子group,

sudo docker run --name postgresql_102 -itd --net fixbridge --ip 172.18.0.102 --restart always
--volume /volume1/docker/postgresql/certs:/etc/postgresql/certs
--volume /volume1/docker/postgresql/data:/var/lib/postgresql
--volume /volume1/docker/postgresql/log:/var/log/postgresql
--env "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
--env "PG_APP_HOME=/etc/docker-postgresql"
--env "PG_VERSION=10"
--env "PG_USER=postgres"
--env "PG_HOME=/var/lib/postgresql"
--env "PG_RUNDIR=/run/postgresql"
--env "PG_LOGDIR=/var/log/postgresql"
--env "PG_CERTDIR=/etc/postgresql/certs"
--env "PG_BINDIR=/usr/lib/postgresql/10/bin"
--env "PG_DATADIR=/var/lib/postgresql/10/main"
--env 'DB_NAME=gitlabhq_production' # 创建数据库
--env 'DB_USER=gitlab' # 创建用户,该用户具备访问上面的数据库的权限
--env 'DB_PASS=XXXXXX' # 用户密码
--env 'DB_EXTENSION=pg_trgm'
sameersbn/postgresql:latest

注释的三行表示创建个数据库以及用户给gitlab使用。

2.3 gitlab容器

https://hub.docker.com/r/sameersbn/gitlab#postgresql

sudo docker run --name gitlab_103 -itd --net fixbridge --ip 172.18.0.103
--publish 10022:22 # 映射端口号,22端口比较特殊需要映射出来
--volume /volume1/docker/gitlab/config:/home/git/gitlab/config:rw # 后面的rw表示可以读写,默认rw,之前很多没加
--volume /volume1/docker/gitlab/log:/var/log/gitlab:rw
--volume /volume1/docker/gitlab/data:/home/git/data:rw
--env "GITLAB_SSH_PORT=10022" # 和端口映射的端口一样哦,这三个配置会展示都网页提供clone地址用的
--env "GITLAB_SSH_HOST=git.xxx.xxx" # 你想采用的域名
--env "GITLAB_HOST=git.XXX.xxx" # 同上,可以不同
--env "DEBUG=true"
--env "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
--env "GITLAB_VERSION=11.11.3"
--env "RUBY_VERSION=2.5"
--env "GOLANG_VERSION=1.12.6"
--env "GITLAB_SHELL_VERSION=9.1.0"
--env "GITLAB_WORKHORSE_VERSION=8.7.0"
--env "GITLAB_PAGES_VERSION=1.5.0"
--env "GITALY_SERVER_VERSION=1.42.4"
--env "GITLAB_USER=git"
--env "GITLAB_HOME=/home/git"
--env "GITLAB_LOG_DIR=/var/log/gitlab"
--env "GITLAB_CACHE_DIR=/etc/docker-gitlab"
--env "RAILS_ENV=production"
--env "NODE_ENV=production"
--env "GITLAB_INSTALL_DIR=/home/git/gitlab"
--env "GITLAB_SHELL_INSTALL_DIR=/home/git/gitlab-shell"
--env "GITLAB_GITALY_INSTALL_DIR=/home/git/gitaly"
--env "GITLAB_DATA_DIR=/home/git/data"
--env "GITLAB_BUILD_DIR=/etc/docker-gitlab/build"
--env "GITLAB_RUNTIME_DIR=/etc/docker-gitlab/runtime"
--env "REDIS_PORT=6379" # 刚才redis的端口号
--env "REDIS_HOST=172.18.0.101" # redis的ip
--env "DB_ADAPTER=postgresql" # 使用postgresql数据库
--env "DB_HOST=172.18.0.102" # 使用postgresql数据库ip
--env "DB_PORT=5432" # 使用postgresql数据库端口
--env "DB_PASS=XXXXXXXX" # 使用postgresql数据库密码,这三个参数和之前启动数据库时的一样
--env "DB_USER=gitlab" # 使用postgresql数据库用户名
--env "DB_NAME=gitlabhq_production" # 使用postgresql数据库数据库名称
--env "GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string3-xx1" # 随机的字符串,加密用,
--env "GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string2-yy" # 字符串不同加密的内容也不同,随机填写和其他人区分
--env "GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string1-z22z" # 这三个参数全部替换掉,采用不一样的字符串
sameersbn/gitlab:latest

命令比较长,需要配置的几个后面使用#进行注释说明

GITLAB_HOST,GITLAB_SSH_HOST,GITLAB_SSH_PORT 这三个参数使用见下图

嘿群辉 篇四:docker固定ip,抛弃端口映射吧  -- 通过搭建gitlab看看如何使用

这个容器内部包括一个nginx,我们后面做映射的使用没有使用nginx的端口,可以将nginx剔除掉。


3. 映射域名

3.1 群辉反向代理

控制面板 --- 应用程序门户 --- 反向代理设置 --- 新增

嘿群辉 篇四:docker固定ip,抛弃端口映射吧  -- 通过搭建gitlab看看如何使用

按图填写即可:

3.2 路由端口映射

此处不再展开, 需要把群辉映射出去。

3.3 ddns

将域名绑定到ip上,也可以使用通配符

嘿群辉 篇四:docker固定ip,抛弃端口映射吧  -- 通过搭建gitlab看看如何使用

本人使用通配符,这样就方便随时配置域名。

4. 总结

volume 参数的目的是让程序的数据能够保留到我们的群辉中,即使升级版本也能保留。不信你删除掉容器,重新run一个出来看看是不是完全一样的。大家可以百度下“稳定版白群晖升级数据丢失,官方回复说与他们无关”,本人不对事件做任何评论,大家珍惜自己的数据。特别是小公司,一定要舍得花钱招人,有招兼职的也可以联系我哦。

env参数的作用,是让我们对容器的程序进行定制,目的就是让我们能够按照我们的口味用着顺心。

文章可能有遗漏之处,如果有问题大家留言区见嘿群辉 篇四:docker固定ip,抛弃端口映射吧  -- 通过搭建gitlab看看如何使用 ,大家多多收藏、多多点赞支持,要准备高产了~

完~

展开阅读全文

打开App,查看更多好文内容
全部评论 (16)
啥破狼
0
12-04 23:14
Y1sMe: 为啥重启容器ip会变化 1

你没让他固定,他就按照启动顺序分配。和DHCP类似

Y1sMe
0
12-04 23:08

为啥重启容器ip会变化

gengmingming
0
12-04 21:48

硬,太硬核了[皱眉]

youer
0
11-29 00:32
youer: 对gitlab不熟,应用场景不说说? 1
寂寞的解药: 一般用不到的,除非你是很大的技术部门,很多小组可以在上面交流 2
展开隐藏评论
youer: 很大的技术部门用消费级的产品和解决方案? 3
寂寞的解药: gitlab是开源项目,版本控制工具,不明白你说的你说消费产品什么意思? 4

消费级产品就是面对普通消费者的产品咯,对应的是商用产品,譬如服务器是商用产品,PC是消费级产品;我们生产环境一般不会用NAS,更加不可能用群晖这种解决方案<更别说黑群晖),生产环境应该用SAN走FC协议,特别搭建数据库。当然,现在界限可能越来越模糊,也见过用PC充当服务器的企业

寂寞的解药
0
11-28 21:05
youer: 对gitlab不熟,应用场景不说说? 1
寂寞的解药: 一般用不到的,除非你是很大的技术部门,很多小组可以在上面交流 2
展开隐藏评论
youer: 很大的技术部门用消费级的产品和解决方案? 3

gitlab是开源项目,版本控制工具,不明白你说的你说消费产品什么意思?

打开App,查看更多好文和评论
猜你喜欢
编辑精选
21
189
16
你已经点过赞了
新浪微博 QQ空间 微信好友 豆瓣
当前为触屏版
热门搜索