はじめに
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
レポジトリの一覧。
今ローカル環境に存在するイメージを知りたい!
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