Docker installからGoでHelloWorldまで(2)

おはようございます。

間違えて記事を消してしまい時系列がおかしいことになっているかもしれませんが気にしないでください。

続きやります。前回の記事はこちら

ken-memo.hatenablog.com

Docker基本操作

 Dockerを運用する流れとしては

  1. Dockerイメージを入手
  2. イメージからコンテナを起動
  3. 運用・開発・変更など
  4. 変更を加えたコンテナをCommitして新たなイメージを作成

こんな感じです。

この手順がどう生きるかは、インミュータブル・インフラストラクチャでググってみてください。

試しに、CentOSイメージの入手からCommitまでやってみます。

 

CentOSイメージの入手

イメージの入手は下記コマンドを使用します。

latestで最新版を入手できます。versionを指定したいときは2つ目のコマンドのように指定します。

# docker image pull centos:latest
# docker image pull centos:7.5.1804

 下記コマンドで今あるイメージを一覧表示します。-aはすべて表示です。つけてもつけなくてもあんま変わりません。

# docker image ls -a

f:id:ken_memo:20200116215159p:plain

 コンテナの生成と起動

docker container run コマンドでdockerを生成・起動します。

昔はdocker runコマンドだったらしいですが最近docker containerコマンドにいろいろ集約されたみたいです。(docker runでも動きます)

runのオプションは無限にあるのでここでは書いたものを説明します。(基本 -it は付ければいいと思います。) 

  • -i : dockerコンテナ起動時に標準入力を受け付ける
  • -t : 仮想端末(pseudo-TTY)をコンテナに割り当てる
  • -h : hostnameを指定します。デフォルトはコンテナIDです。(コンテナなのでブートがないため内部で/etc/hostnameを変更しても反映されません)
  • --name : コンテナの名前を指定します。
  • "centos:latest" : 起動したいイメージを指定します。
  • "/bin/bash" : PID=1のプロセスを指定します。(例えば "/sbin/init"のようにすれば通常のVMのように扱えます)
# docker container run -i -t -h test01 --name test01 centos:latest /bin/bash

 起動したらプロンプトが切り替わりコンテナに入ります。

(test02になってるのは気にしないでください)

f:id:ken_memo:20200116224142p:plain

何か適当に変更を加えます。

# mkdir /home/$HOSTNAME

 そしたら、exitでコンテナから抜けましょう

# exit

 exitしたコンテナは停止(stop)状態になっているので再度接続するためには起動(start)させる必要があります。

以下のような流れになります。

(container)# exit
(host)# docker container start <コンテナ名>
(host)# docker container attach <コンテナ名>
(container)#

 コンテナを停止せず抜けるにはexitではなく「ctrl+p → ctrl+q」という手順を踏むか、attachではなくexecを使います。runしたときは前者じゃないといけない気がしますが。

qiita.com

変更したコンテナをCommitして新たなイメージにする

一応生成したコンテナがあるか確認しましょう。

こっちの -a に関しては意味があって、停止しているコンテナも表示してくれます。

# docker container ls -a

 ではCommitしましょう。コミット...コミット...

 

以下のように指定します。コンテナIDは上のコマンドで見れます。<リポジトリ名>:<タグ>は任意でわかりやすいものをつけましょう

# docker container commit <コンテナID> <リポジトリ名>:<タグ>
# docker container commit 227500f9fdd1 centos:docker001

# docker image ls -a

 

以上で完了です。DockerイメージはDocker hubと言われるリポジトリに先人が構築してイメージにしてくれたものが上がっています。そこから欲しいものをとってきてコンテナにしましょう。

https://hub.docker.com/

 

Goコンテナイメージの入手とHelloWorld

なんでGoなの?っていうとDockerやKubernetesではGoがアツいからです。

て言っても筆者はゴーのごの字も知らないのでこれから勉強します。すいません。

Goのイメージは以下でとってこれます。Ubuntuベースです。

# docker image pull golang:latest

 runします

# docker container run -it -h gotest --name gotest01 golang:latest /bin/bash

 めんどくさくなってきたのでHello.goの作成まで一気に書きます。

# apt update
# apt-get install vim
# mkdir /home/$HOSTNAME
# cd $HOSTNAME
# vim Hello.go
package main

import (
    "fmt"
)

func main() {
    fmt.Println("hello world")
} 
# go fmt Hello.go
# go run Hello.go

f:id:ken_memo:20200116234838p:plain

 オッケー終わり!

各自Commitしてイメージを保存してくださいね。

 

 

ではでは、おやすみなさいませ