人生は勉強ブログ

https://github.com/dooooooooinggggg

今更dockerを使い始めた

タイトルの通り、今更dockerを使ってみた。今までは、vagrantだけでなんとかしてきた。完全に惰性で。

正直今まではそれでめっちゃ困った、という経験もなかったので、困ったらvagrantって感じで環境を構築していた。

昔からdockerがすごい、というのは聞いていたが、どうしても一歩を踏み出すのがめんどくさかった。

ただ、最近、どうしてもdockerを使わないと、とんでもない手間がかかる事象があり、

ついにdockerを初めてみることにした。

まずは、イメージを掴むために、

dockerとvagrantの違い言える?新人エンジニアでも分かった気になれる俺流まとめ

VagrantとDockerについて名前しか知らなかったので試した

この記事をざっと読んだ。

他にも色々聞いた感じ、dockerのイメージをまとめると、

「OSに直接刺さってる」

だから、色々早い。

とりあえず使ってみる

まずは、docker for macをインストール

そして、vagrantでいうbox、イメージを探しに行く。

https://hub.docker.com/

ここに、いっぱいあるそうなので、アカウント登録して、目当てのもの(今回は、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コマンド←この記事を参考にした。

  1. -itをつけることで、コンテナ内で操作できる。

  2. --nameをつけることで、dockerコマンドのコンテナ指定に、ここでつけた名前が使える。

  3. -dは、デーモン

  4. -p 8080:80のようにすることで、ホストのポート8080がコンテナの80にマップされる。

  5. -eで、環境変数を設定できる。これは後で考える

  6. --rmをつけることで、dockerを終了すると当時にコンテナを削除してくれる。

  7. -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