使用gogs时会提示初次配置请先查看相关文档,遂翻译此文档。原文地址(gogs/docker at main · gogs/gogs (github.com))
访问 Docker Hub 以查看所有可用镜像及标签
使用
如果你用了树莓派(Raspberry Pis),请使用gogs/gogs-rpi
为了将你的数据置于 Docker 容器外部,我们可以在这里使用卷映射进行处理(/var/gogs → /data)。当然你可以基于你自己的情况做不同的处理。
# 从 Docker Hub 拉取镜像
$ docker pull gogs/gogs
# 为卷映射创建本地目录
$ mkdir -p /var/gogs
# 使用 `docker run` 初次创建容器
# 22 对应 ssh 端口 3000 对应 http 端口
$ docker run --name=gogs -p 10022:22 -p 10880:3000 -v /var/gogs:/data gogs/gogs
# 如果你停止了容器可以使用 `docker start` 启动
$ docker start gogs
Note: 在初次设置 Gogs 时,将 Gogs ssh 服务从容器中映射到主机上并且配置一个合适的 SSH 端口与 URI 是至关重要的。如果你想按照上述方式访问或克隆 Gogs git 仓库,你可以像这段代码一样:git clone ssh://git@hostname:10022/username/myrepo.git
在当前示例中文件会被储存到 /var/gogs 这个本地目录下
git 仓库与 gogs 的数据都将被存放于 /var/gogs中:
/var/gogs
|-- git
| |-- gogs-repositories
|-- ssh
| |-- # 用于gogs的ssh私钥/密钥
|-- gogs
|-- conf
|-- data
|-- log
自定义目录
在 Docker 环境中,“自定义”目录并不明显。/var/gogs/gogs(主机内)和/data/gogs(容器内)目录已经属于“自定义”目录所以你无需再创建其他层级,仅需要对该目录下的相应文件进行编辑即可。
映射数据容器
如果将数据挂载到数据容器上对你来讲会更习惯的话,那你第一次执行命令时的代码会像下面这行代码一样:
# 创建数据容器
docker run --name=gogs-data --entrypoint /bin/true gogs/gogs
# 初次使用`docker run`运行
docker run --name=gogs --volumes-from gogs-data -p 10022:22 -p 10880:3000 gogs/gogs
使用 Docker 1.9 卷映射命令
# 创建docker卷
$ docker volume create --name gogs-data
# 初次使用`docker run`运行
$ docker run --name=gogs -p 10022:22 -p 10880:3000 -v gogs-data:/data gogs/gogs
设置
应用
大多数设置都是浅显易懂的,但是当 Gogs 运行在 Docker 中时也有一些设置会比较容易混淆:
- Repository Root Path: 保留默认值
/home/git/gogs-repositories,因为start.sh已经帮助你设置了符号链接(软链接)。 - Run User: 保留默认值
git,因为finalize.sh已经安装了一个名为git的用户。 - Domain: 填写 Docker 容器的 IP地址(如:
192.168.99.100)。但如果你想通过物理机访问 Gogs 实例,请填写 Docker 宿主机的主机名或IP地址。 - SSH Port: 使用已经从 Docker 容器中暴露出的端口。比如说,在 Docker 中你的 SSH 服务监听
22端口,但你通过10022:22将其暴露,那么这时你就需要将10022作为这个属性的值。不建议在 Docker 容器内使用内建 SSH 服务 - -HTTP Port: 使用一个你期望 Gogs 在 Docker 容器内部监听的端口。比如说,你的 Gogs 在 Docker 内部监听
3000,并且你希望通过10880:3000暴露出去,但是你依然使用3000作为当前项的值。 - Application URL: 将 Domain 与 exposed HTTP Port 的值结合使用(如:
http://192.168.999.100:10880/)。
可以从这里查看应用设置相关的全部文档
容器配置
此容器有一些可以通过环境变量配置的可选选项,它们具有协助管理当前容器的功能:
-
SOCAT_LINK:
- 可选值:
true,false,1,0 - 默认值:
true - 作用: 使用 socat 将 Docker 容器绑定到本地主机 socket。从链接容器中导出的全部端口都将被绑定到对应的本地主机端口上。
- 声明: 由于当前选项依赖于链接容器时 Docker 所创建的环境变量,因此应在 Rancher 或 K8s 等托管环境中禁用当前选项(设置为 0 或 false)
- 可选值:
-
RUN_CROND:
- 可选值:
true,false,1,0 - 默认值:
false - 作用: 请求将 crond 运行在容器内部。其默认配置将会定期运行
/etc/periodic/${period}中的全部脚本,不过你可以在/var/spool/cron/crontabs/中添加自定义 crontabs。 - 注:cron 为 linux 下的定时执行工具,其中可以使用 crond 进行进程守护。可以通过 crontab 对 cron 服务进行设置,其中包括但不限于查看 cron 任务列表 、增删改查等操作。
- 可选值:
-
BACKUP_INTERVAL:
- 可用值:
3h,7d,3M - 默认值:
null - 作用: 将
RUN_CROND设置为true后可设置, 启用备份系统。细节参考后续备份系统
- 可用值:
-
BACKUP_RETENTION:
- 可用值:
360m,7d,...m/d - 默认值:
7d - 作用: 用于备份系统。定期删除存储时间长于表达式中指定时间的备份。细节参考后续备份系统
- 可用值:
-
BACKUP_ARG_CONFIG:
- 可用值:
/app/gogs/example/custom/config - 默认值:
null - 作用: 用于备份系统。
- Used by backup system. If defined, supplies
-configargument togogs backup.See: Backup System
- 可用值:
-
BACKUP_ARG_EXCLUDE_REPOS:
- Possible value:
test-repo1,test-repo2 - Default:
null - Action: Used by backup system. If defined, supplies
-exclude-reposargument togogs backup.See: Backup System
- Possible value:
备份系统
根据保留策略自动备份:
BACKUP_INTERVAL(备份存储间隔)支持以小时(h),天(d),月份(M)为间隔设定备份工作的间隔时间,比如3h,7d,3M。支持的最小间隔为一小时(1h)BACKUP_RETENTION(备份保留时间)支持分钟(m)和天(d)的表达式,例如360m,2d。支持的最小值为60分钟(60m)
升级
❗❗❗请确保你在 Docker 容器外部拥有映射卷数据❗❗❗
通过 Docker 升级 Gogs 的步骤:
docker pull gogs/gogsdocker stop gogsdocker rm gogs- 最后在初次使用时创建一个容器,同时不要忘记使用相同的卷映射以及端口映射
已知问题
- 目前无法在Raspberry 1(armv6l)上构建当前 docker 容器,因为我们的基础镜像
alpine没有适用于此平台的go软件包。
Useful Links
- Share port 22 between Gogs inside Docker & the local system(此文章过段时间应该会进行翻译,翻译后会将翻译完的文章链接附在此处)