Docker 1.8.2でイメージやコンテナの操作を試す
目次
概要
サーバにDockerをインストールした後で、動作確認の意味も込めて Dockerイメージの入手からDockerコンテナの生成、削除など代表的な操作を一通り行います。 一通り操作して最終的に何かができあがる訳ではありませんが、 よく使うコマンドなので覚えておきましょう。
構成
サーバ構成
OSバージョン
Red Hat Enterprise Linux 7.1 x86_64
ソフトウェア・パッケージ一覧
以下のパッケージがインストール済みであることが前提です。
- docker-1.8.2-7.el7.x86_64.rpm
手順
レジストリからDockerイメージを検索する
DockerレジストリからCentOSのDockerイメージを検索します。 DockerレジストリとはDockerイメージを格納する場所(インターネット上のパブリックな場所)のことを指しており、 複数のDockerイメージが格納されています。 DockerイメージにはOSのみのイメージや、OSに特定のミドルウェアを導入したイメージなど さまざまなものがあります。 ここで目的のDockerイメージを検索し、必要なものを自由に入手して利用することができます。 今回はCentOSのイメージを検索します。
# docker search centos INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos The official build of CentOS. 1578 [OK] docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 60 [OK] docker.io docker.io/jdeathe/centos-ssh-apache-php CentOS-6 6.6 x86_64 / Apache / PHP / PHP m... 11 [OK] docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.6 x86_64 / EPEL/IUS Repos / Ope... 10 [OK] docker.io docker.io/blalor/centos Bare-bones base CentOS 6.5 image 9 [OK] docker.io docker.io/million12/centos-supervisor Base CentOS-7 with supervisord launcher, h... 7 [OK] docker.io docker.io/nimmis/java-centos This is docker images of CentOS 7 with dif... 7 [OK] docker.io docker.io/torusware/speedus-centos Always updated official CentOS docker imag... 7 [OK] docker.io docker.io/nathonfowlie/centos-jre Latest CentOS image with the JRE pre-insta... 3 [OK] docker.io docker.io/centos/mariadb55-centos7 2 [OK] docker.io docker.io/consol/sakuli-centos-xfce Sakuli end-2-end testing and monitoring co... 2 [OK] docker.io docker.io/tcnksm/centos-node Dockerfile for CentOS packaging node 2 [OK] docker.io docker.io/feduxorg/centos-postgresql Centos Image with postgres 1 [OK] docker.io docker.io/layerworx/centos CentOS container with etcd, etcdctl, confd... 1 [OK] docker.io docker.io/lighthopper/orientdb-centos A Dockerfile for creating an OrientDB imag... 1 [OK] docker.io docker.io/nathonfowlie/centos-jira JIRA running on the latest version of CentOS 1 [OK] docker.io docker.io/yajo/centos-epel CentOS with EPEL and fully updated 1 [OK] docker.io docker.io/blacklabelops/centos Blacklabelops Centos 7.1.503 base image wi... 0 [OK] docker.io docker.io/feduxorg/centos-geminabox Gem in a box on centos 0 [OK] docker.io docker.io/feduxorg/centos-rack Centos to run rack applications like Ruby ... 0 [OK] docker.io docker.io/jasonish/centos-suricata Suricata base image based on CentOS 7. 0 [OK] docker.io docker.io/jsmigel/centos-epel Docker base image of CentOS w/ EPEL installed 0 [OK] docker.io docker.io/lighthopper/openjdk-centos A Dockerfile for creating an OpenJDK image... 0 [OK] docker.io docker.io/pdericson/centos Docker image for CentOS 0 [OK] docker.io docker.io/timhughes/centos Centos with systemd installed and running 0 [OK]
『centos』という名前を含むDockerイメージを検索したところ、25個のイメージが見つかりました。 一覧で表示される名前は『docker.io/イメージの作者/イメージ名』という形式になっています。 中には『docker.io/イメージ名』という形式になっているものが含まれていますが、これは公式イメージです。
レジストリからDockerイメージを入手する
Dockerイメージの検索で見つかった中から、CentOSの公式イメージである『docker.io/centos』をダウンロードします。 ダウンロードする際に、イメージ名だけ指定すると最新のイメージがダウンロードされます。 特定のバージョンのイメージをダウンロードしたい場合は、『イメージ名:バージョン』と指定します。 今回は最新のCentOSイメージをダウンロードするので、バージョンは省略します。
# docker pull centos Using default tag: latest Trying to pull repository registry.access.redhat.com/centos ... not found Trying to pull repository docker.io/library/centos ... latest: Pulling from library/centos 47d44cb6f252: Pull complete 168a69b62202: Pull complete 812e9d9d677f: Pull complete 4234bfdd88f8: Pull complete ce20c473cd8a: Pull complete library/centos:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security. Digest: sha256:3aaab9f1297db9b013063c781cfe901e2aa6e7e334c1d1f4df12f25ce356f2e5 Status: Downloaded newer image for docker.io/centos:latest #
ダウンロードが完了したらDockerイメージの一覧を表示して確認します。
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE docker.io/centos latest ce20c473cd8a 3 weeks ago 172.3 MB
DockerイメージからDockerコンテナを生成する
ダウンロードしたDockerイメージからDockerコンテナを生成します。 今回使用するのはCentOSのみの、素のコンテナなので、起動してもコンテナに対して 外部から何のサービスを利用することもできません。 そこで、インタラクティブモードでbashを起動し、仮想端末を割り当てて接続します。 雰囲気的には、Dockerコンテナ(CentOSの仮想マシン)にsshで接続したような感じで コンテナ内でコマンドを実行することができます。(あくまでそういう雰囲気の操作という例えです)
# docker run -it centos:latest /bin/bash [root@a158dcb9d9f8 /]# cat /etc/redhat-release ←コンテナ内のCentOSで実行したコマンド CentOS Linux release 7.1.1503 (Core) [root@a158dcb9d9f8 /]# uname -r ←コンテナ内のCentOSで実行したコマンド 3.10.0-229.el7.x86_64 [root@a158dcb9d9f8 /]# ps -ef ←コンテナ内のCentOSで実行したコマンド UID PID PPID C STIME TTY TIME CMD root 1 0 0 01:00 ? 00:00:00 /bin/bash root 20 1 0 01:05 ? 00:00:00 ps -ef [root@a158dcb9d9f8 /]# exit ←コンテナ内のCentOSで実行したコマンド exit #
exitで仮想端末を終了すると、プロンプトがDockerコンテナ内のCentOSから ホストのOS(ここではRHEL 7.1)に戻ってきます。
Dockerコンテナの稼働状況を確認する
docker ps を実行すると稼働中のDockerコンテナのを確認することができます。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
確認するとなぜか何も表示されません。 Dockerコンテナはフォアグラウンドで何かプロセスが動いていないと、コンテナ自体が自動で停止してしまいます。 先ほどは /bin/bash プロセスが動いていたため、Dockerコンテナが稼働していましたが、 exitで抜けたためにフォアグラウンドの /bin/bash プロセスも停止し、コンテナ自体も停止してしまいました。 docker ps -a を実行すると停止したものも含め全てのDockerコンテナを確認することができます。
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a158dcb9d9f8 centos:latest "/bin/bash" 5 minutes ago Exited (0) 16 seconds ago drunk_kowalevski
Dockerコンテナを削除する
Dockerコンテナの稼働状況確認で表示されたDockerコンテナを削除します。 削除する際には、CONTAINER IDを指定します。
# docker rm a158dcb9d9f8 a158dcb9d9f8
Dockerコンテナ削除後に確認すると、コンテナがなくなったことが分かります。
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Dockerイメージを削除する
最後にCentOSのDockerイメージを削除します。 削除する際には、イメージ名、もしくはIMAGE IDを指定します。
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE docker.io/centos latest ce20c473cd8a 3 weeks ago 172.3 MB # docker rmi centos Untagged: centos:latest Deleted: ce20c473cd8ac1fab6601529ce6a075743f2cf7a8f4cfed2216f8cfcb53bfc4e Deleted: 4234bfdd88f8ed2bc4607bd2ebba2d41d61e2693ad0d184e7b05e1b57f8b8b33 Deleted: 812e9d9d677f15c39277b2edc8f9bc07354c899483409bb07d1c13c2b9c33ec8 Deleted: 168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d Deleted: 47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a
Dockerイメージ削除後に確認すると、イメージがなくなったことが分かります。
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
補足
今回はDockerイメージやDockerコンテナの操作方法を表すために ダウンロードから削除まで一通り行いましたが、 当然毎回削除する必要はありません。 一度ダウンロード・生成したDockerイメージやDockerコンテナは 何度も使い回すことができます。