しおブロ!

ITの知見や備忘録、レビューなど。しおぽん(shiopon01)のブログ

Dockerのインストールと利用手順

目次

概要

Dockerとは、仮想化技術「コンテナ」を利用したOS仮想化ツールだ。
VMWareなどのホスト型(OSに土台となるソフトウェアをインストールしてその上で仮想OSを立ち上げる)とは違い、OSの一部のみを仮想化して利用するため、非常に軽量に扱える。
さらに、各コンテナはアクセスできるリソースや権限を制限/分離したホストOSの「プロセス」として扱われるため、コンテナを管理するコストはプロセス管理とほとんど変わらない。
コンテナはホストOSのLinuxカーネルを共有するので、カーネルとコンテナの関係はJVMとJarに近い。(Docker for Windowsでは、LinuxカーネルHyper-Vで動かしているっぽく、少し手間。Linux系での利用を推奨)

Dockerのインストール方法

おおまかなインストール手順は以下の通り。ふつう、Docker Community Edition (CE)を利用する。

Install Docker | Docker Documentation

Windows

Docker for Windowsをインストールする。
基本的にはインストール手順に従っていけば良いが、WindowsではHyper-Vを有効にしなければならない。

Install Docker for Windows | Docker Documentation

Mac

Docker for Macをインストールする。
ほんとうにそれだけで動いたと思う。

Install Docker for Mac | Docker Documentation

Linux

これも公式のドキュメントにあるやつでだいたいOK。
しかし、そのままだとdockerコマンドの利用にsudoが必要になるので、ユーザーをdockerグループに入れてあげる。

Ubuntuだと、こんなかんじで。

sudo apt -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt -y install docker-ce
sudo groupadd docker
sudo usermod -aG docker $USER

Get Docker CE for Ubuntu | Docker Documentation

利用手順

とりあえず利用してみるのが一番早い。

Dockerでコンテナを作成するためには、まずコンテナを作成するための型であるイメージが必要だ。イメージがたい焼き器なら、コンテナがたい焼きという認識で問題ない。

イメージはDockerHubという公式のイメージ共有サービスからダウンロードすることができる。まず、目的のイメージを検索する。今回は練習で、ubuntuのイメージをダウンロードして使ってみる。検索する時はdocker searchが使える。

(イメージはブラウザのDockerHubで探したほうが楽)

https://hub.docker.com/

docker search ubuntu

今回はOFFICIALの、公式が出しているubuntuイメージを利用する。
DockerHubのイメージをローカルに落としてきたい場合はdocker pull [イメージ名]が使える。この時、ubuntu:17.04のようにタグを指定すれば、指定のタグのバージョンを手に入れる事ができる。何も付けなければ、latest (最新)のイメージが手に入る。

docker pull ubuntu

今までにダウンロードしたイメージはdocker imagesで確認できる。この時に表示されるREPOSITORYIMAGE IDを指定して、イメージの削除も可能。

docker images
docker rmi [指定イメージ]

コンテナの生成と起動はdocker run [イメージ名]で行う。しかし、役目を終えたdockerのコンテナすぐに消えてしまうので、このままでは何も起こらない。イメージ名の後に、実行したいコマンドが必要になる。例えば、さっきダウンロードしたubuntu:latestecho 1を実行する場合。

docker run ubuntu echo 1

コマンドを指定するとubuntu1を出力して、消えてしまう。消えると言っても実際は消滅しているわけではなく、コンテナのステータスがExitedになって寝ているだけだ。その様子は、docker ps -aで確認できる。この時に表示されるCONTAINER IDを指定して、コンテナの削除が可能。

Exitedのコンテナがたまっていくのは嫌なので、コンテナの終了時にコンテナは削除したい。その時は、runコマンドの--rmオプションが利用できる。

docker run --rm ubuntu echo 1

また、起動したコンテナの中に入って作業をしたいという場合もある。この場合、-itオプションが利用できる。

  • -i 対話モードでコンテナを起動
  • -t 疑似ターミナルでコンテナを起動
docker run -it --rm ubuntu echo 1

この時に表示される1は、dockerの疑似ターミナル内で表示される1になる。しかし、役目を終えたコンテナはすぐに消滅してしまう。ほんとうに中で作業をしたいなら、bashなどのshellを起動しよう。
exitなどでshellを抜けることで終了できる。

docker run -it --rm ubuntu bash

docker runのオプション

  • -d デタッチドモード(デーモン)でコンテナを起動
  • -i 対話モードでコンテナを起動
  • -t 疑似ターミナルでコンテナを起動
  • -v Data Volumeの指定(所謂、フォルダ共有)
  • -w 開始ディレクトリの指定(デフォルトはルート)
  • --name [名前] : コンテナに名前をつける:
  • --rm コンテナの終了時にコンテナをクリーンアップし、ファイルシステムを削除する
  • --reset [ポリシー] : 再起動ポリシーを設定(no, always, など)
  • -p ポートのバインド(例: 80:8080ならホスト80番でコンテナ8080番)
  • -e 環境変数設定(RAILS_ENV=development)

普通にdockerコマンドで利用するくらいなら、-it --rmくらいしか使わない(たぶん)。
その他はほとんど、docker-compose(後述)の設定ファイルで設定する。

よく使うコマンド

先述した、疑似ターミナルの対話モードでbashを起動など。
停止しない状態で元のターミナルに戻りたい(コンテナからデタッチ)なら Ctrl + P + Qを押せば良いらしい。

docker run -it --rm [image] bash

コンテナが増えた場合、このコマンドで全コンテナを削除できる。

docker rm $(docker ps -aq)