CentOS7にdocker環境を作る

7上にdocker環境を構築

過去にdocker環境を作ったことがありましたが、ディスク容量があまりない環境に作ってしまったので、新たにCentOS7上にdocker環境を作りたいと思います。
docker

CentOS7は7.5(1804)を使用します

CentOS7は7.5(1804)をminimalでインストールしたものを使用します。

# cat /etc/centos-release
CentOS  release 7.5.1804 (Core)

dockerをインストール

dockerはyumコマンドでインストールします。

  1. dockerを確認します
  2. # yum info 
    読み込んだプラグイン:fastestmirror
    Loading mirror speeds from cached hostfile
     * base: download.nus.edu.sg
     * extras: ftp-srv2.kddilabs.jp
     * updates: ftp-srv2.kddilabs.jp
    利用可能なパッケージ
    名前                : 
    アーキテクチャー    : x86_64
    エポック            : 2
    バージョン          : 1.13.1
    リリース            : 68.gitdded712.el7.centos
    容量                : 16 M
    リポジトリー        : extras/7/x86_64
    要約                : Automates deployment of containerized applications
    URL                 : https://github.com//docker
    ライセンス          : ASL 2.0
    説明                :  is an open-source engine that automates the deployment of any
                        : application as a lightweight, portable, self-sufficient container that will
                        : run virtually anywhere.
                        :
                        :  containers can encapsulate any payload, and will run consistently on
                        : and between virtually any server. The same container that a developer builds
                        : and tests on a laptop will run at scale, in production*, on VMs, bare-metal
                        : servers, OpenStack clusters, public instances, or combinations of the above.
    
  3. cockerをインストールします
  4. # yum install -y docker
    読み込んだプラグイン:fastestmirror
    Loading mirror speeds from cached hostfile
     * base: download.nus.edu.sg
     * extras: ftp-srv2.kddilabs.jp
     * updates: ftp-srv2.kddilabs.jp
    base                                                                         | 3.6 kB  00:00:00
    extras                                                                       | 3.4 kB  00:00:00
    updates                                                                      | 3.4 kB  00:00:00
    依存性の解決をしています
    --> トランザクションの確認を実行しています。
    ---> パッケージ docker.x86_64 2:1.13.1-68.gitdded712.el7.centos を 
    
    ***長いので途中略***
    
    :
      docker.x86_64 2:1.13.1-68.gitdded712.el7.centos
    
    依存性関連をインストールしました:
      audit-libs-python.x86_64 0:2.8.1-3.el7
      checkpolicy.x86_64 0:2.5-6.el7
      container-selinux.noarch 2:2.66-1.el7
      container-storage-setup.noarch 0:0.10.0-1.gitdf0dcd5.el7
      device-mapper-event.x86_64 7:1.02.146-4.el7
      device-mapper-event-libs.x86_64 7:1.02.146-4.el7
      device-mapper-persistent-data.x86_64 0:0.7.3-3.el7
      docker-client.x86_64 2:1.13.1-68.gitdded712.el7.centos
      docker-common.x86_64 2:1.13.1-68.gitdded712.el7.centos
      libaio.x86_64 0:0.3.109-13.el7
      libcgroup.x86_64 0:0.41-15.el7
      libsemanage-python.x86_64 0:2.5-11.el7
      lvm2.x86_64 7:2.02.177-4.el7
      lvm2-libs.x86_64 7:2.02.177-4.el7
      oci-register-machine.x86_64 1:0-6.git2b44233.el7
      oci-systemd-hook.x86_64 1:0.1.16-1.git05bd9a0.el7
      oci-umount.x86_64 2:2.3.3-3.gite3c9055.el7
      policycoreutils-python.x86_64 0:2.5-22.el7
      python-IPy.noarch 0:0.75-6.el7
      setools-libs.x86_64 0:3.3.8-2.el7
      skopeo-containers.x86_64 1:0.1.31-1.dev.gitae64ff7.el7.centos
      yajl.x86_64 0:2.0.4-4.el7
    
    完了しました!
    
  5. バージョンを確認します
  6. # docker -v
    Docker version 1.13.1, build dded712/1.13.1
    
  7. dockerサービスの開始と起動設定を変更します
  8. # systemctl start docker
    # systemctl enable docker
    Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
    # systemctl status docker
    ● docker.service - Docker Application Container Engine
       Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
       Active: active (running) since 火 2018-07-24 11:23:13 JST; 10s ago
         Docs: http://docs.docker.com
     Main PID: 1489 (dockerd-current)
       CGroup: /system.slice/docker.service
               tq1489 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-r...
               mq1493 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/dock...
    

dockerのproxy設定

もし、使っているネットワーク環境がProxyを経由する環境の場合は、/etc/sysconfig/dockerにproxy設定を追加します。

export http_proxy=http://ProxyServer:Port/
export https_proxy=http://ProxyServer:Port/

docker hub上のイメージを検索

dockerは、自分でイメージを作成することもできますが、docker hub上にコンテナが公開されています。docker hub上に公開されているコンテナを検索するには、dockerコマンドにsearchオプションを付けます。

例:CentOSのコンテナを検索する

# docker search centos

INDEX       NAME                                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/centos                             The official build of CentOS.                   4419      [OK]       
docker.io   docker.io/ansible/centos7-ansible            Ansible on Centos7                              114                  [OK]
docker.io   docker.io/jdeathe/centos-ssh                 CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8...   98                   [OK]
docker.io   docker.io/consol/centos-xfce-vnc             Centos container with "headless" VNC sessi...   57                   [OK]
docker.io   docker.io/imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              43                   [OK]
docker.io   docker.io/tutum/centos                       Simple CentOS docker image with SSH access      43                   
docker.io   docker.io/gluster/gluster-centos             Official GlusterFS Image [ CentOS-7 +  Glu...   32                   [OK]
docker.io   docker.io/centos/mysql-57-centos7            MySQL 5.7 SQL database server                   31                   
docker.io   docker.io/openshift/base-centos7             A Centos7 derived base image for Source-To...   29                   
docker.io   docker.io/centos/python-35-centos7           Platform for building and running Python 3...   26                   
docker.io   docker.io/centos/postgresql-96-centos7       PostgreSQL is an advanced Object-Relationa...   23                   
docker.io   docker.io/kinogmt/centos-ssh                 CentOS with SSH                                 21                   [OK]
docker.io   docker.io/openshift/jenkins-2-centos7        A Centos7 based Jenkins v2.x image for use...   13                   
docker.io   docker.io/openshift/mysql-55-centos7         DEPRECATED: A Centos7 based MySQL v5.5 ima...   6                    
docker.io   docker.io/pivotaldata/centos-gpdb-dev        CentOS image for GPDB development. Tag nam...   5                    
docker.io   docker.io/openshift/jenkins-1-centos7        DEPRECATED: A Centos7 based Jenkins v1.x i...   4                    
docker.io   docker.io/darksheer/centos                   Base Centos Image -- Updated hourly             3                    [OK]
docker.io   docker.io/openshift/wildfly-101-centos7      A Centos7 based WildFly v10.1 image for us...   3                    
docker.io   docker.io/pivotaldata/centos                 Base centos, freshened up a little with a ...   2                    
docker.io   docker.io/blacklabelops/centos               CentOS Base Image! Built and Updates Daily!     1                    [OK]
docker.io   docker.io/openshift/wildfly-100-centos7      A Centos7 based WildFly v10.0 image for us...   1                    
docker.io   docker.io/pivotaldata/centos-mingw           Using the mingw toolchain to cross-compile...   1                    
docker.io   docker.io/jameseckersall/sonarr-centos       Sonarr on CentOS 7                              0                    [OK]
docker.io   docker.io/pivotaldata/centos-gcc-toolchain   CentOS with a toolchain, but unaffiliated ...   0                    
docker.io   docker.io/smartentry/centos                  centos with smartentry                          0                    [OK]

例:Ubuntuのコンテナを検索する

# docker search ubuntu

INDEX       NAME                                                                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/ubuntu                                                    Ubuntu is a Debian-based Linux operating s...   8060      [OK]       
docker.io   docker.io/dorowu/ubuntu-desktop-lxde-vnc                            Ubuntu with openssh-server and NoVNC            201                  [OK]
docker.io   docker.io/rastasheep/ubuntu-sshd                                    Dockerized SSH service, built on top of of...   156                  [OK]
docker.io   docker.io/ansible/ubuntu14.04-ansible                               Ubuntu 14.04 LTS with ansible                   94                   [OK]
docker.io   docker.io/ubuntu-upstart                                            Upstart is an event-based replacement for ...   87        [OK]       
docker.io   docker.io/neurodebian                                               NeuroDebian provides neuroscience research...   50        [OK]       
docker.io   docker.io/ubuntu-debootstrap                                        debootstrap --variant=minbase --components...   39        [OK]       
docker.io   docker.io/1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5      ubuntu-16-nginx-php-phpmyadmin-mysql-5          38                   [OK]
docker.io   docker.io/nuagebec/ubuntu                                           Simple always updated Ubuntu docker images...   23                   [OK]
docker.io   docker.io/tutum/ubuntu                                              Simple Ubuntu docker images with SSH access     18                   
docker.io   docker.io/i386/ubuntu                                               Ubuntu is a Debian-based Linux operating s...   13                   
docker.io   docker.io/1and1internet/ubuntu-16-apache-php-7.0                    ubuntu-16-apache-php-7.0                        12                   [OK]
docker.io   docker.io/ppc64le/ubuntu                                            Ubuntu is a Debian-based Linux operating s...   12                   
docker.io   docker.io/1and1internet/ubuntu-16-nginx-php-phpmyadmin-mariadb-10   ubuntu-16-nginx-php-phpmyadmin-mariadb-10       7                    [OK]
docker.io   docker.io/eclipse/ubuntu_jdk8                                       Ubuntu, JDK8, Maven 3, git, curl, nmap, mc...   6                    [OK]
docker.io   docker.io/codenvy/ubuntu_jdk8                                       Ubuntu, JDK8, Maven 3, git, curl, nmap, mc...   4                    [OK]
docker.io   docker.io/darksheer/ubuntu                                          Base Ubuntu Image -- Updated hourly             4                    [OK]
docker.io   docker.io/1and1internet/ubuntu-16-apache                            ubuntu-16-apache                                3                    [OK]
docker.io   docker.io/1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4         ubuntu-16-nginx-php-5.6-wordpress-4             3                    [OK]
docker.io   docker.io/1and1internet/ubuntu-16-sshd                              ubuntu-16-sshd                                  1                    [OK]
docker.io   docker.io/pivotaldata/ubuntu                                        A quick freshening-up of the base Ubuntu d...   1                    
docker.io   docker.io/1and1internet/ubuntu-16-healthcheck                       ubuntu-16-healthcheck                           0                    [OK]
docker.io   docker.io/ossobv/ubuntu                                             Custom ubuntu image from scratch (based on...   0                    
docker.io   docker.io/pivotaldata/ubuntu-gpdb-dev                               Ubuntu images for GPDB development              0                    
docker.io   docker.io/smartentry/ubuntu                                         ubuntu with smartentry                          0                    [OK]

dockerコンテナをダウンロード

dockerのコンテナイメージをダウンロードするには、docker pullコマンドにオプションを付けて、ダウンロードするコンテナイメージを指定します。

# docker pull <イメージ名:タグ>

例:CentOS7のコンテナイメージをダウンロード

次の例では、CentOS7のコンテナイメージをダウンロードします。

# docker pull イメージ名

# docker pull centos:7
Trying to pull repository docker.io/library/centos ... 
7: Pulling from docker.io/library/centos
7dc0dca2b151: Pull complete 
Digest: sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322
Status: Downloaded newer image for docker.io/centos:7

ダウンロードしたイメージをリスト

ダウンロードしたコンテナイメージをリストするにはdocker imagesコマンドにオプションを付けます。

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    7                   49f7960eb7e4        7 weeks ago         200 MB

ダウンロードしたイメージの詳細を確認

ダウンロードしたコンテナイメージの詳細を確認するにはdocker inspectコマンドにオプションを付けて、コンテナ識別子を指定します。

# docker inspect コンテナ識別子

# docker inspect 49f7960eb7e4
[
    {
        "Id": "sha256:49f7960eb7e4cb46f1a02c1f8174c6fac07ebf1eb6d8deffbcb5c695f1c9edd5",
        "RepoTags": [
            "docker.io/centos:7"
        ],
        "RepoDigests": [
            "docker.io/centos@sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2018-06-04T22:19:34.475342266Z",
        "Container": "ef04c6fb40e53318c38014531a0bb5647e2d659dbe8a5e375374d4bbac57a02d",
        "ContainerConfig": {
            "Hostname": "ef04c6fb40e5",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:40ef8420eda09fa48ca36df234cb2b68387b5e13abb352e6390da642afe0351d",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.schema-version": "= 1.0     org.label-schema.name=CentOS Base Image     org.label-schema.vendor=CentOS     org.label-schema.license=GPLv2     org.label-schema.build-date=20180531"
            }
        },
        "DockerVersion": "17.06.2-ce",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:40ef8420eda09fa48ca36df234cb2b68387b5e13abb352e6390da642afe0351d",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.schema-version": "= 1.0     org.label-schema.name=CentOS Base Image     org.label-schema.vendor=CentOS     org.label-schema.license=GPLv2     org.label-schema.build-date=20180531"
            }
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 199678471,
        "VirtualSize": 199678471,
        "GraphDriver": {
            "Name": "overlay2",
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/38a5c8bb504ff83959fa3aea77ffad3ec826a94454dd5617a27c51fb0a008874/merged",
                "UpperDir": "/var/lib/docker/overlay2/38a5c8bb504ff83959fa3aea77ffad3ec826a94454dd5617a27c51fb0a008874/diff",
                "WorkDir": "/var/lib/docker/overlay2/38a5c8bb504ff83959fa3aea77ffad3ec826a94454dd5617a27c51fb0a008874/work"
            }
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:bcc97fbfc9e1a709f0eb78c1da59caeb65f43dc32cd5deeb12b8c1784e5b8237"
            ]
        }
    }
]

dockerコンテナの実行

dockerコンテナを実行するには、docker runコマンドにオプションを付けて、イメージ名を指定します。

# docker run <オプション> <イメージID>

# docker run -it 49f7960eb7e4 

[root@36a702604797 /]# ls
bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

すでにコンテナの操作ができるようになっています。
オプションで使っている -it は、iがコンテナの標準入力を開く、tがコンテナのtty端末を確保するもので、-itを付けることで、ターミナル上で操作ができるようになります。

コンテナから抜けるには

コンテナから抜けてホスト上に戻るには[Ctrl]+[q]を押します。

コンテナの状態を確認

コンテナの状態を確認するには、docker psコマンドを使用します。-aオプションを付けると停止しているコンテナも表示します。

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
36a702604797        49f7960eb7e4        "/bin/bash"         9 minutes ago       Up 9 minutes                            admiring_yalow

コンテナを停止

コンテナを停止するには、docker stopコマンドを使用します。

# docker stop <コンテナID>

# docker stop 36a702604797
36a702604797

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
36a702604797        49f7960eb7e4        "/bin/bash"         11 minutes ago      Exited (137) 17 seconds ago                       admiring_yalow

docker psコマンドでExitedとなっているのが確認できます。

コンテナを削除

コンテナを削除するには、docker rmコマンドを使用します。ここではdocker rm <コンテナID>としていますが、<コンテナ名>でも指定できます。

# docker rm <コンテナID>

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
36a702604797        49f7960eb7e4        "/bin/bash"         14 minutes ago      Exited (137) 3 minutes ago                       admiring_yalow

# docker rm 36a702604797
36a702604797

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

イメージの削除

コンテナを削除してもイメージは残っています。イメージを削除するにはdocker rmコマンドを使用します。

# docker rmi <イメージID>

# docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    7                   49f7960eb7e4        7 weeks ago         200 MB

# docker rmi 49f7960eb7e4 
Untagged: docker.io/centos:7
Untagged: docker.io/centos@sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322
Deleted: sha256:49f7960eb7e4cb46f1a02c1f8174c6fac07ebf1eb6d8deffbcb5c695f1c9edd5
Deleted: sha256:bcc97fbfc9e1a709f0eb78c1da59caeb65f43dc32cd5deeb12b8c1784e5b8237