OSS Fan ~OSSでLinuxサーバ構築~

作成日: 2015/11/13

OSSでLinuxサーバ構築

Docker 1.8.2でイメージやコンテナの操作を試す

トップページOSSでLinuxサーバ構築 > 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コンテナは 何度も使い回すことができます。

プロフィール

らのっち

損害保険会社のIT企画部に勤務するSEです。OSSを勉強中です。

<所属>
日本PostgreSQLユーザ会とくしまOSS普及協議会


第000414号