https://github.com/heiwa4126/go-docker-clock
Qiitaにあったコードをそのままコピペして、サポートのスクリプトをつけたGoLangのDockerサンプル。だったのだがずいぶん変わってしまいました
https://github.com/heiwa4126/go-docker-clock
docker example golang
Last synced: about 2 months ago
JSON representation
Qiitaにあったコードをそのままコピペして、サポートのスクリプトをつけたGoLangのDockerサンプル。だったのだがずいぶん変わってしまいました
- Host: GitHub
- URL: https://github.com/heiwa4126/go-docker-clock
- Owner: heiwa4126
- Created: 2021-09-07T01:45:58.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2026-04-03T04:41:38.000Z (3 months ago)
- Last Synced: 2026-04-03T12:56:21.428Z (3 months ago)
- Topics: docker, example, golang
- Language: Go
- Homepage:
- Size: 27.3 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# go-docker-clock
[FROM scratch から始める軽量 Docker image for Go \- Qiita](https://qiita.com/Saint1991/items/dcd6a92e5074bd10f75a)
にあったコードをそのままコピペして、lint が通るようにしてサポートのスクリプトをつけたもの。
時間を文字列で返すタイムサーバもどき。
Go 1.25 使用
## Docker image を GitHub Package に発行
semver の tag をつけて GitHub に push することで、
GitHub Package にイメージをパブリッシュします。
発行先:
[Package go-docker-clock](https://github.com/heiwa4126/go-docker-clock/pkgs/container/go-docker-clock)
使い方は
```sh
docker run --rm -d -p 8080:8080 ghcr.io/heiwa4126/go-docker-clock:latest
curl "localhost:8080/time?tz=Asia/Tokyo"
```
**重要**: push の前に `task` (引数なし)を実行しよう。linter が動きます
## 開発準備
linter などは CI/CD できるよう
[aquaproj/aqua](https://github.com/aquaproj/aqua)
で管理しています。
プロジェクトルートで
```sh
aqua i
```
でインストール。
(Go 自体は入ってないです。必要なら `aqua i golang/go`)
## 開発
```sh
# 普通に実行
task start
./smoke-test.sh
task stop
# lintとauditとformat
task audit
task test
task lint
task fmt
task # 全部まとめて (default action)
# ビルドして実行
task build-go
task start-go
./smoke-test.sh
task kill
# コンテナ作って実行
task build-docker
task start-docker
./smoke-test.sh
task stop-docker
```
## 出力例
```console
$ ./go-docker-clock &
$ curl http://localhost:8080/time
2021-09-07 01:47:04 UTC
```
## バイナリも Docker image も 2MB 強
```console
$ docker images go-docker-clock
REPOSITORY TAG IMAGE ID CREATED SIZE
go-docker-clock latest e9161e29eb40 16 minutes ago 2.16MB
```
→ いろいろ考えて UPX やめました。それでも8MB
## zoneinfo.zip 式をやめる
Dockerfileの
```dockerfile
FROM scratch
ADD https://github.com/golang/go/raw/master/lib/time/zoneinfo.zip /zoneinfo.zip
ENV ZONEINFO=/zoneinfo.zip
# ...
```
をやめて、ビルド時に `-tags timetzdata` をつける式にした。Go 1.15から使えるらしい。[Go 1.15 Release Notes - The Go Programming Language](https://go.dev/doc/go1.15#time_tzdata)
※ もう1つの方法は `import _ "time/tzdata"`
もう1つ
```sh
task build-docker-distroless
```
も作ってみた。
## おまけ - docker imageをローカルファイルにsave/load
セーブ
```sh
docker save go-docker-clock | gzip -9 > go-docker-clock.tar.gz
```
ロード
```sh
zcat go-docker-clock.tar.gz | docker load
```