Docker / Go言語 — docker コンテナに自動付与されるデフォルト名を直接生成してみる

"names generator" が コンテナにランダムなデフォルト名を与えていそう。

## 忙しい人のために

Github Gistにバイナリをアップしてあるので、こちらで動作確認可能。

```
$ git clone https://gist.github.com/YumaInaura/0c8de43e3342db53059584661d0b491e names-generator
```

```
$ ./names-generator/names-generator
affectionate_matsumoto
$ ./names-generator/names-generator
recursing_vaughan
```

( ref [moby/LICENSE at master · moby/moby](https://github.com/moby/moby/blob/master/LICENSE) )


## 「ランダムなデフォルト名」とは

次のように自動で付与される名前のこと。

- quizzical_payne
- sharp_pike
- optimistic_kepler

```
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
dbd46a366aa3        alpine              "sleep 100"         2 seconds ago       Up 1 second                             optimistic_kepler
454ee02db352        alpine              "sleep 100"         3 seconds ago       Up 2 seconds                            sharp_pike
1d19cef9660b        alpine              "sleep 100"         4 seconds ago       Up 3 seconds                            quizzical_payne
```

## "names generator" はGo言語製

docker 自体、ほとんどGoで作られているらしいので、それと同じく。

[Dockerコードベースの90％以上を占めるGo言語の概要と特徴 | tracpath:Works](http://tracpath.com/works/development/the_go_programming_language/)

よく見るとコードジョークも入っている。

```go
...
// GetRandomName generates a random name from the list of adjectives and surnames in this package
// formatted as "adjective_surname". For example 'focused_turing'. If retry is non-zero, a random
// integer between 0 and 10 will be added to the end of the name, e.g `focused_turing3`
func GetRandomName(retry int) string {
begin:
	name := fmt.Sprintf("%s_%s", left[rand.Intn(len(left))], right[rand.Intn(len(right))])
	if name == "boring_wozniak" /* Steve Wozniak is not boring */ {
		goto begin
	}

	if retry > 0 {
		name = fmt.Sprintf("%s%d", name, rand.Intn(10))
	}
	return name
}
```

- [moby/names-generator.go at master · moby/moby](https://github.com/moby/moby/blob/master/pkg/namesgenerator/names-generator.go)
- [moby/names-generator.go at 1fd7e4c28d3a4a21c3540f03a045f96a4190b527 · moby/moby](https://github.com/moby/moby/blob/1fd7e4c28d3a4a21c3540f03a045f96a4190b527/pkg/namesgenerator/names-generator.go)


## 利用例

### インストール

`docker/docker` レポジトリが巨大なのでわりと時間がかかる。

```sh
$ go get -v github.com/docker/docker/
github.com/docker/docker (download)
```

### ディレクトリを移動

```sh
$ cd $(go env GOPATH)/src/github.com/docker/docker/pkg/namesgenerator/
```

### 実行

```
$ go run cmd/names-generator/main.go
hungry_mccarthy
```

```
$ go run cmd/names-generator/main.go
mystifying_bhaskara
```

### ビルドして実行

```
$ go build -o ~/tmp/names-generator cmd/names-generator/main.go
```

```
$ ~/tmp/names-generator
quirky_lederberg
```

```
$ ~/tmp/names-generator
zen_torvalds
```

## Versions

- Docker version 18.06.0-ce, build 0ffa825
- go version go1.10.3 darwin/amd64

## Ref

- [How does Docker generate default container names? • my2cents](https://frightanic.com/computers/docker-default-container-names/)
- [alco/gostart: A getting started guide for Go newcomers](https://github.com/alco/gostart)
- [Go言語 — GOPATHを表示するコマンド ( $ go env GOPATH ) - Qiita](https://qiita.com/YumaInaura/items/3372186e2c11a45c65d8)

## Links

- [Gist](https://gist.github.com/YumaInaura/0c8de43e3342db53059584661d0b491e)
- [Medium—imported](https://medium.com/supersonic-generation/docker-use-names-generator-made-by-golang-like-docker-container-default-randomized-name-2b5c860bca36)








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->