Docker基礎 - 必要なことだけメモ①
Docker Engineの構成
・Docker Engineは一般的なクライアント/サーバーシステムとして動作する
・コンテナーの管理をDockerサーバーが、サーバーの操作をDockerクライアントが担う
・Dockerクライアント、サーバーの状態はdocker versionコマンドでバージョンと共に確認できる
$ sudo docker version
Dockerのコンテナー管理のライフサイクル
・Dockerコンテナーは、元となるDockerイメージというテンプレートから作成する
・Dockerコンテナーは実行中と停止の状態があり、コンテナーで実行するプロセスの状態と連動する
・Dockerコンテナーの管理はコンテナーの実行/停止と新たなイメージ作成の繰り返し
・Dockerコンテナーの変更とDockerイメージの作成は、Dockerfileというテキストファイルに変更内容を記述して「docker build」コマンドでバッチ的に行うことが可能
Dockerイメージをダウンロードする「docker pull」コマンド
・Dockerイメージは、コンテナーを実行するために必要な全てのディレクトリ/ファイルを含むアーカイブと、コンテナーのメタ情報を持つ
・多くのベースイメージはDocker Hub Registryで公開されていますので、そこからダウンロードするのが一般的
・DockerレジストリからのDockerイメージのダウンロードは、docker pullコマンドを実行する
-- どのイメージにするかは、引数で{イメージ名}(Repository)と{タグ名}(Tag)で選択
-- {タグ名}はGitなどと同様、Dockerイメージのバージョンを示す
$ docker pull {イメージ名}:{タグ名}
・初期設定では、Dockerレジストリとして「Docker Hub Registry」にアクセスするようになっており、Docker Hub Registryで公開されている多くのベースイメージには、最新版(latest)のタグが設定されている
・{イメージ名}はDocker Hub Registryで好みのイメージを検索し、{タグ名}は特別な要件がなければ、latestを指定する
・ダウンロードしたDockerイメージは、レジストリのイメージと区別するために「ローカルキャッシュ」と呼ぶこともある。このローカルキャッシュからDockerコンテナーを実行する。
ダウンロードしたDockerイメージの一覧を確認する「docker images」コマンド
・ダウンロードしたDockerイメージ(ローカルキャッシュ)の一覧は、docker imagesコマンドで確認する
$ docker images
Dockerコンテナーを作成・実行する「docker run」コマンド
・DockerイメージからDockerコンテナーを作成、実行してみる。docker runコマンドで、コンテナーの新規作成と実行の両方を行う。
$ docker run [オプション] [--name {コンテナー名}] {イメージ名}[:{タグ名}] [コンテナーで実行するコマンド] [引数]
・タグ名は省略可能。--nameオプションおよびコンテナー名を省略すると、英単語を組み合わせたランダムなコンテナー名がDockerコンテナーに設定される。
▼ 主なオプション
-d:バックグラウンドで実行する(後述)。既定では、コンテナーをフォアグラウンドで実行するため、Webサーバーやアプリケーションサーバーなど常時実行するコンテナーで指定
-i:コンテナーの標準入力を開く。/bin/bashなどでコンテナーを操作する際に指定
-t:tty(端末デバイス)を確保する。/bin/bashなどでコンテナーを操作する際に指定
-p {ホストのポート番号}:{コンテナーのポート番号}:Dockerサーバーのホストとポートマッピングを構成
▼お試し作業
ubuntuイメージからubuntu1コンテナーを作成、端末を開きbashを実行し、nginx」をコンテナーにインストール
$ docker run -it --name ubuntu1 ubuntu /bin/bash root@f66e8ee71dab:/# root@f66e8ee71dab:/# apt-get install -y nginx :(略) root@f66e8ee71dab:/# dpkg -l nginx Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-=================================-=====================-=====================-======================================================================= ii nginx 1.4.6-1ubuntu3 all small, powerful, scalable web/proxy server root@f66e8ee71dab:/#
・一通り操作したら、[Ctrl]+[d]キーでbashプロセスを終了する。プロセスの終了とコンテナーの停止は連動するので、コンテナも停止状態になる。
Dockerコンテナーの一覧を取得する「docker ps」コマンド
・Dockerコンテナーの一覧は、docker psで確認する
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f66e8ee71dab ubuntu:latest /bin/bash 37 minutes ago Exit 0 ubuntu1
-- docker psコマンドでは実行中のコンテナーのみ表示されますが、「-a」オプションを付加すると、停止中のコンテナーも表示される。
-- コンテナーの状態はSTATUS列で判断でき、「Up {実行時間}」の場合は実行中、Exit 「{終了コード}」の場合は停止となる。
Dockerイメージを作成する「docker commit」コマンド
・Dockerコンテナーから新しいDockerイメージを作成するために、docker commitを実行
$ docker commit {コンテナー名}|{コンテナーID} [{ユーザー名}/]{イメージ名}
-- ubuntu1コンテナーではnginxをインストールしたので、任意の{ユーザー名}(test)と{イメージ名}(nginx)としてイメージを作成してみる
$ docker commit ubuntu1 test/nginx 7fed60d6cc60de39ea80d8fba729e9abbb9899af6bf5c7ebb0a4627aacd36ed4 $
Dockerコンテナーを停止する「docker stop」コマンド
・バックグラウンドで実行中のDockerコンテナーは、docker stopで停止する
$ docker stop {コンテナー名}|{コンテナーID}
Dockerコンテナーを削除する「docker rm」コマンド、イメージを削除する「docker rmi」コマンド
使い終わったDockerコンテナーはdocker rm、Dockerイメージはdocker rmiで削除する
$ docker rm {コンテナー名}|{コンテナーID} $ docker rmi {イメージ名}|{イメージID}
Dockerコンテナーを再実行する「docker start」コマンド
・停止しているコンテナーは、docker startで再実行する
$ docker start [-i] {コンテナー名}|{コンテナーID}