はじめに
本記事では初めてDockerを触る方を対象に
「コンテナ上でテスト環境を用意する」流れを説明しています。また、その流れでよく使うコマンドも紹介しています。
以下がイメージ図です。
Dockerで用意するのはホスト上に影響を与えないテスト環境のため、好き勝手にいじることがき、不要になればサクッと削除できます。
dockerのインストールに関しては環境毎に方法が異なるので事前にお願いします。
コマンド実行環境
ホスト環境 | Red Hat Enterprise Linux Server 7.6 |
---|
Docker Hands-On
準備確認
Dockerの起動確認を行い、activeであることを確認します。
# systemctl status docker.service ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since XXX UTC; 4 days ago Docs: http://docs.docker.com ...
docker infoコマンドにてコンテナ数、イメージ 数を確認します。
# docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 1.13.1 ...
既に起動したコンテナ等があればこちらにその数が表示されます。
ubuntuを用意しテスト環境とする
コンテナの作成とイメージ/コンテナの確認
コンテナを作成するべくdocker runコマンドを実行してみます。
構文は「docker run ubuntu (コンテナ上で発行したいコマンド)」です。
# docker run ubuntu hostname Unable to find image 'ubuntu:latest' locally Trying to pull repository registry.access.redhat.com/ubuntu ... ... Status: Downloaded newer image for docker.io/ubuntu:latest ba95f4f47622
初回起動時はubuntuのイメージが存在しないため、リポジトリに探しに行きます。
ダウンロードが完了した後、hostnameコマンドの結果である「ba95f4f47622」が表示されています。
再度docker infoコマンドを打つと変化が確認できます。
# docker info Containers: 1 Running: 0 Paused: 0 Stopped: 1 Images: 1 ...
イメージ数が増え、コンテナが終了した状態で1つ増えています。
イメージの情報が見たければdocker images
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu latest d131e0fa2585 2 days ago 102 MB
コンテナの情報が見たければdocker ps -aコマンドを押下します。
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ba95f4f47622 ubuntu "hostname" 3 minutes ago Exited (0) 3 minutes ago dreamy_volhard
-aをつけなければ起動中のコンテナしか表示されない点も合わせて覚えておくと良いです。
コンテナとホストでカーネルを共有していることを確認
カーネルを共有していることを確認するためuname -rコマンドをホストとコンテナ上で実行してみてください。
# uname -r 3.10.0-957.10.1.el7.x86_64 # docker run ubuntu uname -r 3.10.0-957.10.1.el7.x86_64
ホスト上で実行したコマンドとコンテナ上で実行したコマンドの結果が一致していることがわかります。
なお、今回は既にイメージが手元にあるのでインストール作業が行われません。
もう一度docker infoを行うと
# docker info Containers: 2 Running: 0 Paused: 0 Stopped: 2 Images: 1 ...
イメージ数は変わらず、コンテナ数が増えています。
コンテナの状態を確認しても二つになっています。
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 56f018c00caf ubuntu "uname -r" 2 minutes ago Exited (0) 2 minutes ago silly_sammet ba95f4f47622 ubuntu "hostname" 7 minutes ago Exited (0) 7 minutes ago dreamy_volhard
コンテナが終了した際に自動的に削除する場合はdocker run --rm としてください。
# docker run --rm ubuntu whoami root # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 56f018c00caf ubuntu "uname -r" 3 minutes ago Exited (0) 3 minutes ago silly_sammet ba95f4f47622 ubuntu "hostname" 9 minutes ago Exited (0) 9 minutes ago dreamy_volhard
上のように新たに追加されず、停止しているコンテナ数は変わっていません。
コンテナを削除する
停止しているコンテナはdocker rmで削除可能です。
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 56f018c00caf ubuntu "uname -r" 7 minutes ago Exited (0) 52 seconds ago silly_sammet ba95f4f47622 ubuntu "hostname" 13 minutes ago Exited (0) About a minute ago dreamy_volhard # docker rm 56f018c00caf 56f018c00caf # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ba95f4f47622 ubuntu "hostname" 13 minutes ago Exited (0) About a minute ago dreamy_volhard # docker rm ba95f4f47622 ba95f4f47622 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ちなみに、イメージに紐づく全てのコンテナを削除するとdocker rmi IMAGEID でimageも削除可能です。
コンテナ環境にログインしたままにする
これまではコマンド発行後は終了していました。
docker run -t -i とすることで対話形式としてコンテナ上にログインしたままとなります。
また、ホストに戻ってくる場合はexitコマンドにてコンテナを終了させることができます。
# docker run -t -i ubuntu root@a0b8fce71874:/# root@a0b8fce71874:/# exit exit #
ちなみにexitコマンドで終了するとコンテナが停止してしまいますが「CTRL-p CTRL-q」を押すとコンテナを起動させたままでコンテナを抜けることができます。
そうすればdocker psコマンドを押下にて起動しているコンテナ情報として確認できます。
また、停止しているコンテナに再接続を行う場合はdocker startにてコンテナを起動し、docker attachにて再ログインします。
コンテナ内に加えた変更はもちろんそのまま反映されています。
試しにhogeという空ファイルを作成してみました。
# docker start a0b8fce71874 a0b8fce71874 # docker attach a0b8fce71874 root@a0b8fce71874:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@a0b8fce71874:/# touch hoge root@a0b8fce71874:/# exit exit # docker start a0b8fce71874 a0b8fce71874 # docker attach a0b8fce71874 root@a0b8fce71874:/# ls bin boot dev etc hoge home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
該当ファイルが一度停止した後に再接続しても存在しています。
終わりに
Dockerは、ハイパーバイザ型と比較すると容易かつ高速に仮想環境を準備できることが実感できたと思います。
本記事の内容はDockerの初歩の動きの確認ですが、それでもDockerの便利さが伝われば幸いです。
以上、コンテナを用いてホストの上にテスト環境を用意するハンズオンでした。