Skip to content

Go

golang で docker サブコマンドを実装する

docker-compose 当初 Python で書かれていましたが、v2 からは golang で書き直され、使い方も (v1 の docker-compose では無く) docker compose 〜 といった具合に利用するように変更されました。 docker コマンドのサブコマンドとして動作しているように見えますが、これは cobra を使って実装されているようです。 以下は cobra の公式ページからの引用です。

Cobra is both a library for creating powerful modern CLI applications as well as a program to generate applications and command files.

docker サブコマンドとしての実装例は下記が参考になります。

  • https://github.com/docker/cli/blob/master/cli-plugins/examples/helloworld/main.go
  • https://github.com/docker/compose/blob/v2/cmd/main.go

上記を参考に、更にダイエットして「最小の docker サブコマンド」をメモしておきます。

CentOS8 に Go 1.13.3 をインストールする

CentOS8 標準リポジトリ上の Go は 1.11.6 と古いです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# dnf info golang
Last metadata expiration check: 0:40:22 ago on Sun Oct 27 20:00:43 2019.
Available Packages
Name         : golang
Version      : 1.11.6
Release      : 1.module_el8.0.0+192+8b12aa21
Arch         : x86_64
Size         : 637 k
Source       : golang-1.11.6-1.module_el8.0.0+192+8b12aa21.src.rpm
Repo         : AppStream
Summary      : The Go Programming Language
URL          : http://golang.org/
License      : BSD and Public Domain
Description  : The Go Programming Language.

そこで今回は手動で最新の Go をインストールします。 インストールは簡単で、以下のように実行するだけです。

1
2
3
4
5
curl -LO https://dl.google.com/go/go1.13.3.linux-amd64.tar.gz
tar zxvf go1.13.3.linux-amd64.tar.gz -C /usr/local/
echo 'export GOROOT=/usr/local/go' >> ~/.bashrc
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source /etc/profile

go-setlock で多重起動を防止する

setlock を golang に移植した go-setlock を使うと「同じプログラムを連続実行する際、前回分の実行が完了していない場合は次分を実行しない」という制御が可能です。今回は Amazon Linux 上に go-setlock をセットアップするところから使い方までをメモしておきます。