タイトルの通り、今更dockerを使ってみた。今までは、vagrantだけでなんとかしてきた。完全に惰性で。
正直今まではそれでめっちゃ困った、という経験もなかったので、困ったらvagrantって感じで環境を構築していた。
昔からdockerがすごい、というのは聞いていたが、どうしても一歩を踏み出すのがめんどくさかった。
ただ、最近、どうしてもdockerを使わないと、とんでもない手間がかかる事象があり、
ついにdockerを初めてみることにした。
まずは、イメージを掴むために、
dockerとvagrantの違い言える?新人エンジニアでも分かった気になれる俺流まとめ
VagrantとDockerについて名前しか知らなかったので試した
この記事をざっと読んだ。
他にも色々聞いた感じ、dockerのイメージをまとめると、
「OSに直接刺さってる」
だから、色々早い。
とりあえず使ってみる
まずは、docker for macをインストール
そして、vagrantでいうbox、イメージを探しに行く。
ここに、いっぱいあるそうなので、アカウント登録して、目当てのもの(今回は、golang)のページに行く。
右のほうにある、docker pull golang
をコピペして、実行する。
➜ ~ docker pull golang # Using default tag: latest # latest: Pulling from library/golang # 3e17c6eae66c: Pull complete # 74d44b20f851: Pull complete # a156217f3fa4: Pull complete # 4a1ed13b6faa: Pull complete # dc8a629d8a36: Pull complete # 431925b1aca5: Pull complete # 2ac2306b8d4c: Pull complete # 84664a55d30a: Pull complete # Digest: sha256:f070a46c4bbb1f8486a64d1529ffc24113a5605ccaf29855b5d1cf6ef03daae2 # Status: Downloaded newer image for golang:latest
docker pull
というのが、イメージを持ってくるコマンドである。
ノリがgitと同じ感じ。
ついでに、かっこいいので、kali linux
も取ってくる。
➜ ~ docker pull kalilinux/kali-linux-docker # Using default tag: latest # latest: Pulling from kalilinux/kali-linux-docker # b2860afd831e: Pull complete # 340395ad18db: Pull complete # d4ecedcfaa73: Pull complete # 3f96326089c0: Pull complete # e5b4b7133863: Pull complete # 45f74187929d: Pull complete # 6e61dde25369: Pull complete # 96dd93da002c: Pull complete # dae364b40b0d: Pull complete # c680ef1373da: Pull complete # 261c33ef5c83: Pull complete # cb8b228855a6: Pull complete # c8f41032911e: Pull complete # Digest: sha256:2ebc75f51fa4937340a0d3b4fe903c60aad23866b8c9e1fae80ad7372e01b71d # Status: Downloaded newer image for kalilinux/kali-linux-docker:latest
pullしてきたイメージを、buildする
見出しの通りで、次は、このイメージを任意の場所でbuildする
その際に、Dockerfile
というファイルを作成する。
とりあえず、
FROM golang:1.9.1
これだけ書いた。
Dockerfile
は、そのプロジェクトの.git
があるところと同じ階層におく。
Dockerfile
がある場所で、docker build
を実行する。
docker build -t project_name .
こうすると、imageを素に、コンテナが作成される。
runする
こうして作成されたコンテナを、run
してみる。
その際に、よく使うDockerコマンド←この記事を参考にした。
-it
をつけることで、コンテナ内で操作できる。--name
をつけることで、dockerコマンドのコンテナ指定に、ここでつけた名前が使える。-d
は、デーモン-p 8080:80
のようにすることで、ホストのポート8080がコンテナの80にマップされる。-e
で、環境変数を設定できる。これは後で考える--rm
をつけることで、dockerを終了すると当時にコンテナを削除してくれる。-v
は、-v [ホストディレクトリの絶対パス]:[コンテナの絶対パス] [イメージ名] [コマンド]
でマウントすることができる
ざっとこんな感じで、一旦下のようなコマンドにすることにした。
docker run -it --rm -v [ホストディレクトリの絶対パス]:/opt/ --name my-running-server project_name /bin/bash
実行してみると、runすることができた。
また、作成したコンテナに戻りたい場合は、以下のコマンドで戻ることができる。
docker start my-running-server && docker exec -it my-running-server /bin/bash