インストール - Docker CE

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2020年7月4日 (土) 23:44時点におけるWiki (トーク | 投稿記録)による版 (→‎概要)
ナビゲーションに移動 検索に移動

概要

Dockerとは、軽量なコンテナ型のアプリケーション実行環境である。dotCloud社(現Docker社)が開発し、2013年にオープンソースのプロジェクトとして公開された。
ソフトウェアの高速な配布・実行、容易なイメージのカスタマイズ、導入運用の手軽さ、豊富なプレビルドイメージの提供などの理由により、当初はソフトウェアの開発やテスト段階における利用が多かったが、
現在ではパブリッククラウドからオンプレミスシステムまで、さまざまなシーンで急速に普及しつつある。

様々なDockerイメージは下記のWebサイトよりダウンロードできる。
https://hub.docker.com


Docker公式サイトからバイナリをインストールする

サポート外のプラットフォーム用の手順として、バイナリインストールの手順が以下にある。
Install Docker CE from binaries | Docker Documentation
最新版をインスールする場合はこの手順が推奨される。

バイナリは以下のWebサイトから選択する。
https://download.docker.com/linux/static/stable/x86_64/
(stable以外のedgeやtestは好みで選択する)

wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz
tar zxvf docker-18.06.3-ce.tgz
sudo cp docker/* /usr/local/bin


正常にインストールできたか確認する。

docker version

# 結果
Client:
Version:      18.06.3-ce
API version:  ****
Go version:   *******
Git commit:   *******
Built:        **************
OS/Arch:      linux/amd64
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?



リポジトリを追加してインストール

Dockerのリポジトリを追加してインストールする場合は、こちらの手順を用いる。
ただし、リポジトリに含まれるDocker CEの更新が遅い場合があるので注意すること。

CentOSの場合

まず、Docker CEをインストールするために、依存関係のライブラリをインストールする。

sudo yum install yum-utils device-mapper-persistent-data lvm2


続いて、Docker CEをインストールする。

sudo yum install docker-ce


※注意
Docker CEの最新バージョンを使用する場合は、標準設定では無効になっているリポジトリを有効にする必要がある。

sudo yum-config-manager --enable docker-ce-edge
sudo yum-config-manager --enable docker-ce-test


SUSEの場合

まず、Dockerのリポジトリを追加するため、以下のファイルを任意のエディタで作成する。

sudo vi /etc/zypp/repos.d/docker.repo

# 追記
[Virtualization_containers]
name=Virtualization:containers (openSUSE_Leap_15.1)
type=rpm-md
baseurl=http://download.opensuse.org/repositories/Virtualization:/containers/openSUSE_Leap_15.1/
gpgcheck=1
gpgkey=http://download.opensuse.org/repositories/Virtualization:/containers/openSUSE_Leap_15.1/repodata/repomd.xml.key
enabled=1


ファイル作成後、リポジトリの更新とdockerのインストールを行う。

sudo zypper --gpg-auto-import-keys refresh
sudo zypper install docker docker-compose



Docker CEの設定

正常にインストールできたか確認する。

docker version

# 結果
Client:
Version:      18.06.3-ce
API version:  ****
Go version:   *******
Git commit:   *******
Built:        **************
OS/Arch:      linux/amd64
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?


インストールが正常に完了したら、Dockerサービスを開始する。

sudo systemctl start docker


また、システムの起動後すぐにDockerを実行する場合、以下のコマンドを実行する。

sudo systemctl enable docker


また、管理者権限不要でDockerを使用する場合は、以下のコマンドを実行する。

sudo usermod -aG docker $(whoami)



Docker CEの動作確認

最後に、Docker CEが正常に動作するか確認する。
これを行うには、以下のように、Dockerのテストイメージを使用する。

sudo docker run --rm hello-world

# 出力
Hello from Docker!


上記のメッセージは、インストールが正常に動作していることを示す。

また、上記のメッセージを生成するために、Dockerは以下の手順を実行している。

  1. Dockerクライアントが、Dockerデーモンに接続される。
  2. Dockerデーモンが、Docker Hubから"hello-world"イメージをプルする。
  3. Dockerデーモンが、実行可能な"hello-world"イメージから、現在読み込んでいる出力を生成する新しいコンテナを作成する。
  4. Dockerデーモンは、Dockerクライアントにその出力をストリーミングして、Dockerクライアントは各自のターミナルに送信する。



設定

パスを.bashrcなどに追記する。

vi ~/.bashrc

# 追記
export DOCKER_HOST='tcp://localhost:2375'



Dockerコマンド

ここでは、Dockerのコマンドを記載する。

イメージの一覧表示

sudo docker image ls


イメージの削除(IMAGE IDを指定する。IMAGE IDは上述の「イメージの一覧表示」で確認可能)

sudo docker rmi -f <IMAGE ID>


コンテナの一覧表示

sudo docker container ls
sudo docker container ls –all


イメージの実行(<IMAGE NAME>はイメージの名前であり、<COMMAND>はイメージ上で実行するコマンドである)

sudo docker run <IMAGE NAME> <COMMAND>


実行コマンドが、/bin/bashのような対話型(インタラクティブ)なコマンドの場合は、-itオプションを指定する。

sudo docker run –it <IMAGE NAME> /bin/bash


detachedモード(バックグラウンドモード)で実行する場合は、–dオプションを指定する。

sudo docker run -d dockersamples/static-site


実行中のコンテナの一覧を表示する。

sudo docker ps


コンテナの停止

sudo docker stop <コンテナID>


コンテナの削除

sudo docker rm <コンテナID>


コンテナの停止と削除を同時に実施する。

sudo docker rm –f <コンテナID>


コンテナに名前をつける。(コンテナIDの代わりに指定可能)

sudo docker run --name static-site -d dockersamples/static-site


-Pオプションを指定すると、コンテナが使うポートがランダムにホストのポートにマッピングされる。

sudo docker run -d -P dockersamples/static-site


-pオプションを使用すると、コンテナのポートをマッピングするホストのポートを指定できる。(以下の例は、ホストの12345ポートをコンテナの80ポートにマッピングする)

sudo docker run –p 12345:80 dockersamples/static-site


どのポートにマッピングされたかはdocker psコマンドで確認できる。
また、以下のコマンドでも確認できる。

sudo docker port <コンテナID>

# 出力例
443/tcp -> 0.0.0.0:32770
80/tcp -> 0.0.0.0:32771



Dockerイメージの作成

Dockerイメージを作成するには、まず、Dockerfileを記述する必要がある。(Dockerfileはテキストファイルである)
このDockerfileに、インストールするOSやライブラリを指定して、最後に、コンテナで実行したいソフトウェアを指定する。

まず、Dockerfileでは、Base Imageを指定する。(例えば、OSのImageはBase Imageの一種である)
Base Imageは"FROM"で指定する。以下の例は、CentOS 7を指定する例である。

FROM centos:centos7


次に、コンテナが必要とするソフトウェアのインストール等を行う。(各OSのパッケージ管理システムを使用すると簡単である)
CentOSであればyum、Ubuntuならaptを使用する。(yumやapt等のコマンドの実行は、RUNで行う)

RUN yum install xxxx


特定のファイルをコンテナに埋め込むには、"COPY"を使用する。コンテナのどこにファイルを埋め込むのかを指定する。

COPY <File Name> /home/xxx


コンテナが実行するソフトウェアが通信を行う場合、そのソフトウェアは特定のポート番号を使用する。(例えば、Webサーバであれば80番や443番を使用する)
そのポート番号を、ホストOSのポート番号とマッピングする必要がある。
マッピングは、コンテナを実行する際に使用するが、そのためには、コンテナのポート番号を公開する必要がある。
それを行うには、"EXPOSE"を使用する。

EXPOSE 80


コンテナが実行するソフトウェアは、"CMD"で指定する。
CMDは、Dockerfileに1個だけである。諸々の準備の完了後、最後にCMDを指定する。

CMD ["python", "/usr/src/app/app.py"]


以下の例では、pythonがコマンドで、その後は、コマンドに対する引数である。つまり、上記の例は、以下のコマンドをコンテナ上で実行することを意味する。

python /usr/src/app/app.py


Dockerfileが完成したら、イメージを作成する。
-tオプションを使用してイメージの名前を指定する。
その後ろの"."は、Dockerfileがあるディレクトリのパスである。Dockerfileと同じディレクトリであれば、"."でoである。
Dockerfileの内容が正しければ、イメージが作成される。

sudo docker build -t xxxx/yyyy .


プロキシ配下でbuildする場合は、プロキシを設定する必要がある。
例えば、コンテナ上でyumやaptを使用する場合は、プロキシの設定が必要である。
環境変数は、"ENV"で指定できる。

ENV https_proxy "http://proxy.hoge.server:8080/"
ENV http_proxy "http:// proxy.hoge.server:8080/"


※注意(yum関連のエラー)
yumのリポジトリが見つからないというエラーが表示される場合がある。
標準のリポジトリではなく、特定のレポジトリを指定する場合、そのリポジトリを記載した設定ファイル(CentOS-Base.repoなど)をCOPYするように、
Dockerfileに記載しておけばよい。

COPY CentOS-Base.repo /etc/yum.repos.d/


yumの処理は、ユーザに対して"yes or no"を訊ねる場合があるので、自動的にyesと答えないと途中でイメージ作成が止まるので、以下のように記述する。

CMD yum update –y