Docker入門

はじめに

Dockerはあなたの生活を豊かにします。
実態がなんなのか。なんでそんなことができるのか。
そんなことにはあまり触れずに、Docker 一通り使えればいい人向けに記事を書きます。

Docker って何?

システム構築やシステム運用でこれまで人手で行っていた作業を自動化し、テスト済みの安全なアプリケーションを継続的に提供するためのプラットフォームです。

コンテナベースのアプリケーションを仮想化したもの。軽量なVMの様に見えるがこれまでの(VirtualBoxなど)VMでは実現が難しい、不可能であったユースケースを解決してくれます。

実際にできることとしては、

  • OSの内部に独立したアプリケーションの実行環境(=コンテナ)を生成することができる。
  • コンテナで分離していればファイルやバージョンの競合や、設定やポートの競合が回避できる。
  • リソース消費量が非常に少なく1台に物理サーバに多くのコンテナを稼働させられる

なんかが挙げられます。

メリット

使用するにあたって、以下のようなメリットが挙げられます。

  • ゲストOS はホストの Kernel を直接使うためオーバーヘッドが小さくて高速
  • ゲストOS がそれぞれに Kernel を持たないため、Memory 消費量や Disk 消費量を節約できる
  • 必要とする資源が少ないため、多くのゲストOSを立ち上げることが可能
  • Kernel を新しく起動する必要がないため、ゲストOSの起動が速い

いいことだらけですね。

デメリット

デメリットはほとんどないです。 強いて言うなら、

  • 提供できるホストの種類が少ない
  • 使用するにはDockerを導入する必要がある(当たり前だけど)

くらい。

継続的インテグレーション(Continuous Integration)を加速する

継続的インテグレーション、最近巷でよく聞きますね。CIと略されます。 ソフトウェアの品質向上を目的として考えられた開発プロセスであり、Docker はCIを効果的に行うためのツールなのです。

ex)

  • Jenkinsのコンテナを使ってDockerコンテナのCIを回す
  • プロジェクトに変更がpushされたタイミングでJenkinsがリポジトリのチェックアウト・イメージのビルド・テストの実行を行う

Docker コマンド

これだけ知っておけばとりあえずコンテナを使えます。

公開されているDocker イメージを使いたい!

docker image pull コマンドでは、Docker hubで公開されているイメージをダウンロードします。
dockerイメージは、イメージ名 [:タグ名]で指定します。
使い方:docker image pull [イメージ名 [:タグ名]]

centos6のイメージをDocker hubからpull

$ docker image pull centos:6

Docker hub上では 基本タグ名はバージョン名と対応しています。
以下はcentosレポジトリの一覧。
image.png (61.5 kB)

今ローカル環境に存在するイメージを知りたい!

docker image lsコマンドで自分の環境内に存在するdockerイメージを一覧表示することができます。
使い方:docker image ls

$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              6                   b5e5ffb5cdea        8 weeks ago         194MB

コンテナを生成して起動したい!

コンテナは、イメージから生成されます。コンテナを生成するには、docker runコマンドを使用します。
使い方:docker run [コンテナID] [起動後、実行するコマンド]

コンテナを作成するだけのdocker container createコマンドもありますが、コンテナは起動して使うため、一般的には起動まで行うdocker runコマンドが使用されます。
docker runコマンドでは、-it-d--nameオプションが良く使われます。

オプション名 説明
-it インタラクティブに起動する。(i : コンテナの標準出力を開く。t : tty(端末デバイス)を確保する。 )
-d 起動後、デタッチする。
--name 起動したコンテナに名前を付ける。
$ docker run --name centos6 -itd b5e5ffb5cdea /bin/bash

起動しているコンテナを見たい!

オプションなしだと、起動しているコンテナのみが表示されます。
停止したコンテナも含め、全部見たいときは-aを指定します。
使い方:docker ps [-a]

$ docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS               NAMES
a7005dbebc46        b5e5ffb5cdea         "/bin/bash"              4 seconds ago       Up 3 seconds                            centos6 

コンテナ内に入りたい!

docker execコマンドでコンテナに入れます。

使い方:docker exec -it [コンテナ名]

$ docker exec -it centos6 /bin/bash
[root@2dcf427022eb /]#
[root@2dcf427022eb /]# ls
bin  etc   lib    lost+found  mnt  proc  sbin     srv  tmp  var
dev  home  lib64  media       opt  root  selinux  sys  usr

ローカル環境内にあるファイルをdocker コンテナ内で使用したい!

docker cpコマンドを使えば、dockerコンテナ内にファイルをコピーすることができます。

使い方①:docker cp [ホスト内のファイルパス] [コンテナ識別子]:[コンテナ内のファイルパス]
使い方②:docker cp [コンテナ識別子]:[コンテナ内のファイルパス] [ホスト内のファイルパス]

$ docker cp test.py centos6:/
$ docker exec -it centos6
[root@2dcf427022eb /]# ls
bin  etc   lib    lost+found  mnt  proc  sbin     srv  test.py  usr
dev  home  lib64  media       opt  root  selinux  sys  tmp      var

しっかりtest.pyがコンテナ内の/にコピーされてます。

docker コンテナを止めたい!

コンテナを消すには、まず止める必要があります。 使い方:docker stop [コンテナ名]

$ docker stop centos6
centos6

dockerコンテナ消したい!

用済みのdockerコンテナは定期的に削除しましょう。ストレージが圧迫されます。
使い方:docker rm [コンテナ名]

$ docker rm centos6
centos6

docker イメージ消したい!

用済みのdockerイメージは定期的に削除しましょう。ストレージが圧迫されます。
使い方①:docker image rm [イメージID]
使い方②:docker rmi [イメージID]

$ docker rmi -f b5e5ffb5cdea
Untagged: centos:6
Untagged: centos@sha256:b358c4a16ef77db3a07eaaaf62c707f51aa15bca820489392cc9d97046bc483a
Deleted: sha256:b5e5ffb5cdea24c637511e05e1bbe2c92207ae954559d4c7b32e36433035c368

トラブルシューティング

消そうとしたイメージが停止したコンテナに依存している

$ docker image rm 8f8ceadaff21
Error response from daemon: conflict: unable to delete 8f8ceadaff21 (must be forced) - image is being used by stopped container 15c9cbab8acb

-f を付ければ強制的に削除することができます。

$ docker image rm -f 8f8ceadaff21
Untagged: kimoton/ssh:centos7
Deleted: sha256:8f8ceadaff21063ce0c75e95acfaae123d85259e7ca4c9326b64f9618d0301be
Deleted: sha256:12ccdf5625c847b79aa6eacface0d59329f0eda40c8caf16a69a5c651bc5fda2
Deleted: sha256:f91389902d2a10ace1a88b29865f96879c73be421c1ac9c42a5b379bed247ba5
Deleted: sha256:cfc0bf9d106bee0aec12a6eaaa0522f85642ce9ee8e68f2f9ed0e6a03f61abb6
Deleted: sha256:916364d038ac95746693a1879f2cd68966cc46c01d181946059fb7c8a5cb74ff
Deleted: sha256:28105f3c62ddcef6274db51297be531b0dca07cc6371e4c3832394fbfc333743
Deleted: sha256:9a734a017c5f6190cc3cf90a5769af835b23181ffbf57d66b33e56295e302275
Deleted: sha256:fc482b9cd9aa63b83682a4391172fcfc02834760d3986044751dd957b3f73c4c
Deleted: sha256:2d90e9337a252c7ed775b1757d0592b55ac3f52279513d21313704f8ae8316a3
Deleted: sha256:fd877ecb2b721a6457937ddb5c836df42f9b4008316f82c62482f490292b5702
Deleted: sha256:0ffdc1765f0cd3980d2bcf982764c34059db6708eaa6b868b08eb5c5605fe883
Deleted: sha256:92595fca023555fb4554088a2861fb4ad3f1c08142204363c29644caa2b8c84f
Deleted: sha256:5a9d7807eaac7a51580af674c250515bfba9b6e848c01033cc65bd23360ca7eb
Deleted: sha256:da0d1dfa81432931d894038755401ab1fa8df0887d2e3c368f30e67364bfcb69
Deleted: sha256:fae9ce13f6c9a84dc94b40594769b48bfb9604f48c90d7e0a8fdf155b82c7184
Deleted: sha256:5e4d303dc896c8c01a8bc5050bc2c4c761d0d40808d14ce5099b9df0b160a1bd
Deleted: sha256:d09ef3f3d5fc2798e28e79031944bc05ec407e747684bc0dc449cc59c250843e
Deleted: sha256:d80ce60f093c31f2de14ffe5e3bf6a85b5eb9d6fe4bf1f22b5a33e6dfbab2fb3
Deleted: sha256:8306154412c8694cc64baf29e3998046bb34e85d9fccb31fe9ec3c3e41acb658
Deleted: sha256:75315284549aacde3654effd99c1563f605ff39e8eb5e14df836dba4edc46a35
Deleted: sha256:5182e96772bf11f4b912658e265dfe0db8bd314475443b6434ea708784192892