翻译|在docker中使用gogs

924 阅读5分钟

使用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:Domainexposed HTTP Port 的值结合使用(如: http://192.168.999.100:10880/)。

可以从这里查看应用设置相关的全部文档

容器配置

此容器有一些可以通过环境变量配置的可选选项,它们具有协助管理当前容器的功能:

  • SOCAT_LINK:

    • 可选值: truefalse10
    • 默认值: true
    • 作用: 使用 socat 将 Docker 容器绑定到本地主机 socket。从链接容器中导出的全部端口都将被绑定到对应的本地主机端口上。
    • 声明: 由于当前选项依赖于链接容器时 Docker 所创建的环境变量,因此应在 Rancher 或 K8s 等托管环境中禁用当前选项(设置为 0 或 false)
  • RUN_CROND:

    • 可选值: truefalse10
    • 默认值: false
    • 作用: 请求将 crond 运行在容器内部。其默认配置将会定期运行/etc/periodic/${period}中的全部脚本,不过你可以在/var/spool/cron/crontabs/中添加自定义 crontabs。
    • 注:cron 为 linux 下的定时执行工具,其中可以使用 crond 进行进程守护。可以通过 crontab 对 cron 服务进行设置,其中包括但不限于查看 cron 任务列表 、增删改查等操作。
  • BACKUP_INTERVAL:

    • 可用值: 3h7d3M
    • 默认值: null
    • 作用: 将 RUN_CROND 设置为 true 后可设置, 启用备份系统。细节参考后续备份系统
  • BACKUP_RETENTION:

    • 可用值: 360m7d...m/d
    • 默认值: 7d
    • 作用: 用于备份系统。定期删除存储时间长于表达式中指定时间的备份。细节参考后续备份系统
  • BACKUP_ARG_CONFIG:

    • 可用值: /app/gogs/example/custom/config
    • 默认值: null
    • 作用: 用于备份系统。
    • Used by backup system. If defined, supplies -config argument to gogs backup.See: Backup System
  • BACKUP_ARG_EXCLUDE_REPOS:

    • Possible value: test-repo1test-repo2
    • Default: null
    • Action: Used by backup system. If defined, supplies -exclude-repos argument to gogs backup.See: Backup System

备份系统

根据保留策略自动备份:

  • BACKUP_INTERVAL (备份存储间隔)支持以小时(h),天(d),月份(M)为间隔设定备份工作的间隔时间,比如3h, 7d, 3M。支持的最小间隔为一小时(1h)
  • BACKUP_RETENTION (备份保留时间)支持分钟(m)和天(d)的表达式,例如360m, 2d。支持的最小值为60分钟(60m)

升级

❗❗❗请确保你在 Docker 容器外部拥有映射卷数据❗❗❗

通过 Docker 升级 Gogs 的步骤:

  • docker pull gogs/gogs
  • docker stop gogs
  • docker rm gogs
  • 最后在初次使用时创建一个容器,同时不要忘记使用相同的卷映射以及端口映射

已知问题

  • 目前无法在Raspberry 1(armv6l)上构建当前 docker 容器,因为我们的基础镜像alpine没有适用于此平台的go软件包。

Useful Links