Windows
Linux
MacOSX
RaspberryPi
docker

Dockerインストールメモ

インストール

Explore - Docker Storeで各OSとAWS、Azureのようなクラウドサービス向けのインストール方法が紹介されていますので、目的のdockerのインストールページを参照してください。

Windows

Docker Community Edition for Windows - Docker Storeからインストーラをダウンロードできます。
ただ、Docker CEは、バックエンドがHyper-Vなので、VMWare Playerと共存ができないので要注意です。
Hyper-Vを使えない環境ではDocker Toolboxを利用すると、バックエンドがVirtualBoxなのでいいらしいですが、使ったことがないので使用感が分かりません...

Mac

Docker Community Edition for Mac - Docker Storeからdmgファイルをダウンロードできます。
2017年11月現在、macOSではDocker用仮想ネットワークに母艦となるmacOSが接続できない制限があるらしいです。macOSに詳しければその制限を乗り越えられるのかもしれませんが、私には無理でした...

Linux

詳しくは、Get Docker CE for Debian | Docker Documentationを参照してください。

Raspbian(RaspberryPi 2 and 3)

$ sudo apt-get update
$ sudo apt-get install --yes \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg2 \
  software-properties-common
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ echo "deb [arch=armhf] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list
$ sudo apt-get update
$ sudo apt-get install --yes docker-ce
$ sudo usermod pi -G 100,27,docker

Dockerインストール後、既存のユーザをdockerグループに所属させるかdockerグループ所属のユーザを追加します。

Docker Hubで公開されているコンテナは、基本的にx86_32/64でARM/ARM64は少ないです。Docker Registry入れてプライベートDocker Hubみたいな用途で使ってます。

Ubuntu Linux

$ sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get -y install docker-ce

CentOS7

  • dockerリポジトリの追加
$ sudo yum install -y yum-utils
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • yumのパッケージインデックスの更新(おまじない)
$ sudo yum makecache fast
  • インストール

    • 最新版のインストール
    $ sudo yum install docker-ce
    
    • バージョン指定
    $ yum list docker-ce.x86_64 --showduplicates | sort -r
    

    でバージョンを確認して、

    $ sudo yum install docker-ce-18.03.0.ce-1.el7.centos
    

    のような感じでインストール。

dockerユーザーの管理

Dockerインストール後、既存のユーザをdockerグループに所属させるかdockerグループ所属のユーザを追加します。

dockerグループへの参加は、

$ sudo adduser $USER -G docker

または、

$ sudo usermod -aG docker $USER

のような感じで行います。直接、/etc/groupを編集するというのも、個人的にはアリです。

ユーザにグループ追加した後は、一回ログアウトして、再ログインします。
再ログイン後、groupsコマンドを実行すると「docker」が追加されていればdockerグループに参加しています。

$ groups
adm cdrom sudo dip plugdev lpadmin sambashare docker

dockerデーモンの起動制御

  • 起動
    $ sudo systemctl start docker

  • 停止
    $ sudo systemctl stop docker

  • 自動起動
    $ sudo systemctl enable docker

動作確認

$ docker run hello-worldを実行して、

・・・
Hello from Docker!
This message shows that your installation appears to be working correctly.
・・・

が表示されれば、正しくインストールできています。

実際の「docker run hello-world」は、下記のように、結構たくさんのメッセージが表示されます。

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
5b0f327be733: Pull complete
Digest: sha256:07d5f7800dfe37b8c2196c7b1c524c33808ce2e0f74e7aa00e603295ca9a0972
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

基本的な使い方

コンテナの起動と停止

コンテナの起動

起動方式としては、起動と同時にコンテナのプロンプトに入るインタラクティブ起動と、Dockerホストのバックグラウンドで起動するバックグラウンド起動の2パターンがあります。
と言っても、コンテナ起動直後のプロンプトがコンテナ側かDockerホスト側かの違いだけです。

インタラクティブ起動(Debian:latestの例)

$ docker run -i -t debian /bin/bash
root@ea6e3a0da093:/#
root@ea6e3a0da093:/# cat /etc/debian_version
9.2
root@ea6e3a0da093:/# 

コンテナからは[Ctrl+p Ctrl+q]で抜けます。コンテナにもどる方法はバックグラウンドで起動してコンテナに入る時と同じです。

バックグラウンド起動(Debian:latestの例)

$ docker run -d -i -t debian /bin/bash
6a00bf7d180013246f04648d78c8cd5e25b397fe517a2507230ffb3702e61c7a

「-d」を付けるとバックグラウンドで起動します。

コンテナのプロンプトに入る方法

$ docker psコマンドで起動中のコンテナのIDを調べて、$ docker attach Container_IDでコンテナのプロンプトに入ります。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
6a00bf7d1800        debian              "/bin/bash"         18 seconds ago      Up 17 seconds                           adoring_engelbart
$ docker attach 6a00bf7d1800
root@6a00bf7d1800:~# cat /etc/debian_version
9.2
root@6a00bf7d1800:~# [Ctrl+p Ctrl+q]、または、「exit」コマンドでコンテナを抜け、dockerホストのプロンプトに戻る

コンテナの停止

  • コンテナの中から止める
    root@6a00bf7d1800:~# exit
  • コンテナの外から止める
    $ docker psコマンドで対象のコンテナIDを調べ、$ docker stop Container_IDで止めます。

停止中のコンテナの再開

$ docker start Container_IDで再開します。  
$ docker run ...ではないので注意です。

ちなみに停止中のコンテナのコンテナIDは$ docker ps -aで調べられます。

起動中・停止中のコンテナから別のコンテナを作成する

$ docker commit Container_ID 作成するコンテナ名

コンテナの削除

コンテナ本体は、

$ docker rmi Container_ID

で削除します。コンテナから起動したインスタンス?の削除は、

$ docker rm Container_ID

で削除します。

コンテナのバックアップとリストア

  • バックアップ
    $ docker save -o backup.tar.gz
  • リストア
    $ docker load -i backup.tar.gz

参考サイト