使用docker运行gogs服务

Wed, Feb 13, 2019 阅读时间 1 分钟

学习使用 gogs 搭建自己的 git 托管服务,但是不想在安装 gogs 时创建系统用户污染当前的 Mac 系统环境,决定使用 docker 启动该服务,同时学习一些基础的 docker 命令。

目标

  • 使用 docker 和 docker-compose 运行并管理 gogs 服务

  • 使用 caddy 为 gogs 搭建反向代理

  • 简单配置 caddy 与 gogs 容器的 docker 网络

工具与组件

  • docker for Mac:Mac环境下的 docker 服务版本,提供 docker 环境以及 docker-compose等命令
  • gogs : 一个 go 语言实现的简单快速的git代码托管服务,类似于 github 和 gitlab
  • caddy: go 语言实现的简单的web服务器,可进行反向代理,类似于 nginx

创建caddy配置

创建caddy文件夹,并在文件夹下创建文件Caddyfile

localhost {
    proxy / gogs:3000 {
        header_upstream Host {host}
        header_upstream X-Real-IP {remote}
        header_upstream X-Forwarded-For {remote}
        header_upstream X-Forwarded-Proto {scheme}
    }
    log /var/log/caddy.log
    gzip
    #tls name@domain.com # 你的邮箱
}

使用 docker-compose 编排服务

创建docker-compose.yml配置文件

version: '3'
services:
  caddy:
    container_name: caddy
    image: abiosoft/caddy
    volumes:
      - "/home/caddy/Caddyfile:/etc/Caddyfile" 
    ports:
      - "8081:2015"
#    links:
#      - gogs
    restart: always
  gogs:
    container_name: gogs
    image: gogs/gogs
    volumes:
      - /home/gogs/data:/data
    ports:
      - "3022:22"
    restart: always

docker-compose 启动服务

docker-compose.yml所在文件夹下运行命令

docker-compose up -d

查看运行的容器,使用

docker-compose ps

或者

docker ps

其中 gogs 服务会使用3000端口,但是没有进行端口绑定,无法从外部访问。caddy 使用2015端口,并对外绑定8081端口,该访问通过Caddyfile配置文件转发到了 gogs 机器的3000端口。docker-compose 可以自动发现主机名称的地址,无需通过IP。通过如下地址访问 gogs 服务:

http://127.0.0.1:8081

查看容器详细状态

docker inspect gogs

也可以进入正在运行的容器进行系统的状态、文件查看等操作

docker exec -it gogs /bin/bash
docker exec -it caddy /bin/sh

关闭服务

docker-compose stop

正常情况下关闭服务时容器不会被删除,重新启动时如果容器存在则不会再创建。docker-compose.yml有修改时旧的容器不会自动更新,需要关闭服务并删除容器,然后重新创建容器启动

docker-compose down
docker-compose up -d

或者直接强制重新创建容器启动

docker-compose up -d --force-recreate

网络配置固定IP

也可以自定义网络,然后给 gogs 和 caddy 容器分配固定的ip。

查看当前的docker网络

docker network ls

docker-compose.yml配置网络

version: '3'
services:
  caddy:
    container_name: caddy
    image: abiosoft/caddy
    volumes:
      - "/home/caddy/Caddyfile:/etc/Caddyfile" 
    ports:
      - "8081:2015"
    networks:
        default:
            ipv4_address: 172.18.0.23
#    links:
#      - gogs
    restart: always
  gogs:
    container_name: gogs
    image: gogs/gogs
    volumes:
      - /home/gogs/data:/data
    ports:
      - "3022:22"
    networks:
        default:
            ipv4_address: 172.18.0.25
    restart: always

networks:
  default:
    ipam:
      config:
        - subnet: 172.18.0.0/16
#          gateway: 172.18.0.1
#          ip_range: 172.18.0.0/24

查看网络配置详情

docker network inspect gogs_default

docker-compose down命令会同时移除网络。也可以手动移除网络:

docker network rm gogs_default