Dockerを勉強してみる

今年の年末年始休みはDockerを勉強してみることにした。

仕事ではずっとMAMPを使って環境構築をしてきた。 簡単に環境も構築できるし、特に問題も出てこなかったので愛用してきた。

だけど、最近サーバーでは動くけど、ローカルでは動かないということがたまに出てくるようになった。 合わせて、同僚に環境を構築してもらうとき、MAMPのバージョン(MySQLのバージョン)によってうまくインストールができないということが出てきた。

ここは最近デファクトとなったDockerを勉強したらこれらの問題が解決するのでは?ということで勉強してみることにした。

参考にしたもの

とりあえず、ざっくり概要が知りたかったので、以下の本を参考にした。

Dockerに手を出そうとして挫折した「プログラマ」は、まず最低限触ってみるところからリスタートしてみよう

それじゃ、いってみよう。

Dockerとは?

  • 仮想環境の一種
  • 古くからあるVMwareなどに比べて軽量、カスタマイズ性が高い
  • 環境を共有しやすい

ふむふむ。とりあえず、軽くて共有しやすい仮想環境って感じでおぼえておけばいいのかな。(よくない)

コンテナとイメージ

コンテナ

  • 仮想環境の単位
  • この「コンテナ」単位でデータやプログラムを管理する
  • 用途に応じて複数作成する

イメージ

  • コンテナを作るテンプレート
  • https://hub.docker.com/で管理していて、ダウンロードして利用する

なるほど。大体わかった。

コンテナを作る

# Docker Hubから「httpd」というapacheのイメージをダウンロードして、バックグラウンド(-d)で実行
$ docker container run --name myContainer -d -p 8080:80 httpd
0977ed7a06349576e1eaaa1c8ed3a275c49e61ed1c4e356b85e876872fad9eb5

# 起動確認
$ docker container ls
CONTAINER ID   IMAGE                   COMMAND                  CREATED          STATUS          PORTS                    NAMES
0977ed7a0634   httpd                   "httpd-foreground"       41 minutes ago   Up 41 minutes   0.0.0.0:8080->80/tcp     myContainer

# 以下のコマンドで起動していないコンテナを含めて確認できる
$ docker container ls -a

# docker container ls は以下のコマンドでも確認OK
$ docker ps 

# コンテナを停止
$ docker container stop myContainer

# 停止確認。STATUS列が「Exited」となっていればOK
$ docker ps -a
CONTAINER ID   IMAGE                   COMMAND                  CREATED          STATUS                      PORTS                    NAMES
0977ed7a0634   httpd                   "httpd-foreground"       46 minutes ago   Exited (0) 2 seconds ago                             myContainer

コンテナ・イメージを削除

# 削除
$ docker container rm myContainer

# 確認
$ docker ps -a
CONTAINER ID   IMAGE                   COMMAND                  CREATED          STATUS                      PORTS                    NAMES

# イメージの削除
$ docker rmi httpd

# 確認
$ docker images
REPOSITORY              TAG          IMAGE ID       CREATED         SIZE

なるほど。コマンドは大体わかった。

Dockerfileとは?

  • 予め必要なパッケージ、アプリケーション、各種設定を盛り込んだイメージを作るための設計図。

Docker Composeとは?

  • docker container runの集合体みたいなもの。
  • httpd, DBなど複数のコンテナで構成されるシステムを扱う場合に使う。

Kubernetesとは?

  • コンテナのオーケストレーションツール
    • システム、アプリケーション、サービスの設定/運用管理の自動化のこと。
  • 複数のコンテナを一度に管理できるものくらいの認識で今はOK(多分)

最後に

とりあえず、ざっくり概要はわかった。 明日はもうちょっと詳しく使い方を勉強して、実際のプロジェクトに導入して行ってみよう。