「インストール - Docker CE」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
161行目: 161行目:


== Dockerコマンド ==
== Dockerコマンド ==
イメージの検索<br>
==== Dockerイメージの検索 ====
[https://hub.docker.com/ Docker Hub]からイメージを検索およびダウンロードすることもできる。<br>
[https://hub.docker.com/ Docker Hub]からイメージを検索およびダウンロードすることもできる。<br>
  sudo docker search <イメージ名>
  sudo docker search <イメージ名>
<br>
<br>
イメージのダウンロード<br>
==== Dockerイメージのダウンロード ====
  sudo docker pull <イメージ名>
  sudo docker pull <イメージ名>
<br>
<br>
イメージの一覧表示<br>
==== Dockerイメージの一覧表示 ====
  sudo docker image ls
  sudo docker image ls
  または
  または
  sudo docker image ls -a  または  sudo docker image ls --all
  sudo docker image ls -a  または  sudo docker image ls --all
<br>
<br>
イメージの削除(IMAGE IDを指定する。IMAGE IDは上述の"イメージの一覧表示"で確認可能)<br>
==== Dockerイメージの削除 ====
  sudo docker rmi -f <IMAGE ID>
<イメージ名>は上述の"イメージの一覧表示"で確認できる。<br>
<code>-f</code>オプションを付加することにより、使用中のイメージおよびコンテナであっても削除することができる。<br>
  sudo docker rmi -f <イメージ名>
<br>
<br>
イメージの実行(<IMAGE NAME>はイメージの名前であり、<COMMAND>はイメージ上で実行するコマンドである)<br>
==== Dockerイメージの実行 ====
  sudo docker run <IMAGE NAME> <COMMAND>
<イメージ名>はイメージの名前であり、<COMMAND>はDockerコンテナ上で実行するコマンドである。<br>
  sudo docker run <イメージ名> <COMMAND>
<br>
<br>
実行コマンドが、/bin/bashのような対話型(インタラクティブ)なコマンドの場合は、-itオプションを指定する。<br>
実行コマンドが、/bin/bashのような対話型(インタラクティブ)なコマンドの場合は、<code>-it</code>オプションを指定する。<br>
<code>-i</code>オプションはコンテナの標準入力を有効化、<code>-t</code>オプションはttyを有効化するためのオプションである。<br>
<code>-i</code>オプションはコンテナの標準入力を有効化、<code>-t</code>オプションはttyを有効化するためのオプションである。<br>
  sudo docker run –it <IMAGE NAME> /bin/bash
  sudo docker run –it <イメージ名> /bin/bash
<br>
<br>
detachedモード(バックグラウンドモード)で実行する場合は、–dオプションを指定する。<br>
detachedモード(バックグラウンドモード)で実行する場合は、<code>–d</code>オプションを指定する。<br>
  sudo docker run -d dockersamples/static-site
  sudo docker run -d dockersamples/static-site
<br>
<br>
実行中のコンテナの一覧表示<br>
==== 実行中のDockerコンテナの一覧表示 ====
  sudo docker ps
  sudo docker ps
または
  sudo docker container ls
  sudo docker container ls
<br>
<br>
全てのコンテナの一覧表示<br>
==== 全てのDockerコンテナの一覧表示 ====
  sudo docker ps -a           または  sudo docker ps --all
  sudo docker ps -a
  sudo docker container ls –a  または  sudo docker container ls –-all
または
  sudo docker ps --all
または
  sudo docker container ls –a
  または
  sudo docker container ls –-all
<br>
<br>
コンテナの削除(CONTAINER IDを指定する。CONTAINER IDは上述の"コンテナの一覧表示"で確認可能)<br>
==== Dockerコンテナの削除 ====
<CONTAINER ID>を指定する。<br>
<CONTAINER ID>は上述の"コンテナの一覧表示"で確認できる。<br>
  sudo docker rm <CONTAINER ID>
  sudo docker rm <CONTAINER ID>
または
  sudo docker countainer rm <CONTAINER ID>
  sudo docker countainer rm <CONTAINER ID>
<br>
<br>
コンテナの停止<br>
==== Dockerコンテナの停止 ====
  sudo docker stop <CONTAINER ID>
  sudo docker stop <CONTAINER ID>
  sudo docker container stop <CONTAINER ID>
  sudo docker container stop <CONTAINER ID>
206行目: 218行目:
  sudo docker container rm -f <CONTAINER ID>
  sudo docker container rm -f <CONTAINER ID>
<br>
<br>
コンテナに任意の名前を付ける。(CONTAINER IDの代わりに指定可能)<br>
==== Dockerコンテナに任意の名前を付ける ====
  sudo docker run --name <任意のコンテナ名> <IMAGE ID>
これは、<CONTAINER ID>の代わりに指定できる。<br>
<Br>
  sudo docker run --name <任意のコンテナ名> <イメージ名>
<code>-P</code>オプションを指定すると、コンテナが使うポートがランダムにホストのポートにマッピングされる。<br>
<br>
==== ポートマッピング ====
<code>run</code>コマンドにおいて、<code>-P</code>オプションを指定すると、コンテナが使うポートがランダムにホストのポートにマッピングされる。<br>
また、<code>-d</code>オプションを指定すると、コンテナIDを表示して、バックグラウンドでコンテナを実行される。<br>
また、<code>-d</code>オプションを指定すると、コンテナIDを表示して、バックグラウンドでコンテナを実行される。<br>
  sudo docker run -d -P dockersamples/static-site
  sudo docker run -d -P <イメージ名>
<br>
<br>
<code>-p</code>オプションを使用すると、コンテナのポートをマッピングするホストのポートを指定できる。(以下の例は、ホストの12345ポートをコンテナの80ポートにマッピングする)<br>
<code>-p</code>オプションを使用すると、コンテナのポートをマッピングするホストのポートを指定できる。<br>
  sudo docker run –p 12345:80 dockersamples/static-site
以下の例では、ホストPCの12345番ポートをコンテナの80番ポートにマッピングしている。<br>
  sudo docker run -it –p 12345:80 <イメージ名> /bin/bash
<br>
<br>
どのポートにマッピングされたかは<code>sudo docker ps</code>コマンドで確認できる。<br>
どのポートにマッピングされたかは、<code>sudo docker ps</code>コマンドまたは<code>sudo docker port <CONTAINER ID></code>で確認できる。<br>
また、以下のコマンドでも確認できる。<br>
  sudo docker port <CONTAINER ID>
  sudo docker port <CONTAINER ID>
   
   
223行目: 237行目:
  443/tcp -> 0.0.0.0:32770
  443/tcp -> 0.0.0.0:32770
  80/tcp -> 0.0.0.0:32771
  80/tcp -> 0.0.0.0:32771
<br>
==== DockerコンテナからDockerイメージを作成する ====
まず、Dockerコンテナを停止する。<br>
sudo docker container stop <CONTAINER IDまたはコンテナ名>
<br>
次に、停止したDockerコンテナからDockerイメージを作成する。<br>
sudo docker commit <CONTAINER IDまたはコンテナ名> <イメージのリポジトリ名>:<イメージのタグ名>
<br>
作成したDcockerイメージを確認する。<br>
sudo docker images
<br>
作成したDockerイメージからDockerコンテナを作成する。<br>
sudo docker run -it --name <CONTAINER IDまたはコンテナ名> <イメージのリポジトリ名>:<イメージのタグ名> /bin/bash
<br><br>
<br><br>



2021年8月28日 (土) 19:55時点における版

概要

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

コンテナは、Linuxの通常のプロセスとほぼ同じものであるが、利用できる名前空間やリソースが他のプロセスやコンテナからは隔離され、それぞれ固有の設定を持てるようになっている。
そのため、コンテナ内のアプリケーションから見ると、独立したコンピュータ上で動作しているように振る舞う。
コンテナを管理するコストは、プロセスを管理するコストとほぼ変わらず、仮想マシンを管理するコストと比較すると非常に軽い。

  • 名前空間の隔離機能
    ファイルシステムやコンピュータ名、ユーザー名(ユーザーID)、グループ名(グループID)、プロセスID、ネットワーク機能などを、コンテナごとに独自に設定できるようにする機能。
  • リソースの隔離機能
    CPUやメモリ、ディスク入出力など、コンテナ内で利用するリソースを他のコンテナから隔離したり、設定に基づいて振り分けたりする機能。


様々な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?


次に、systemdユニットファイルを作成する。
パッケージ管理システムを使用せずにバイナリファイルをインストールする場合、Dockerとsystemdを手動で統合する。

以下のGitHubにアクセスして、docker.serviceファイルとdocker.socketファイルを/etc/systemd/systemディレクトリに配置する。
https://github.com/moby/moby/tree/master/contrib/init/systemd

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

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 (SLE and openSUSE 15)
type=rpm-md
baseurl=http://download.opensuse.org/repositories/Virtualization:/containers/SLE_xx_SPx/          # SLEの場合
baseurl=http://download.opensuse.org/repositories/Virtualization:/containers/openSUSE_Leap_xx.x/  # openSUSEの場合
gpgcheck=1
gpgkey=http://download.opensuse.org/repositories/Virtualization:/containers/SLE_xx_SPx/repodata/repomd.xml.key  # SLEの場合
gpgkey=http://download.opensuse.org/repositories/Virtualization:/containers/openSUSE_Leap_xx.x/repodata/repomd.xml.key  # openSUSEの場合
enabled=1


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

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


または、SLEの場合は、以下の手順を行うこともできる。

  1. YaSTを起動して、[ソフトウェア] - [ソフトウェアリポジトリ]を選択する。
  2. [ソフトウェアリポジトリ]画面から、[追加]ボタンを押下する。
  3. [Extensions and Module from Registration Server]を選択して、[次へ]ボタンを押下する。
  4. [利用可能なextensionsとmodules]から、[Container Module]を選択して、[次へ]ボタンを押下する。
    この時、containerモジュールとリポジトリがシステムに追加される。
  5. Subscription Management Toolを使用している場合、SMTサーバのリポジトリリストを更新する。
    または、以下のコマンドを実行する。
    sudo SUSEConnect -p sle-module-containers/15/x86_64 -r
    または
    sudo SUSEConnect -p sle-module-containers/15/x86_64



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クライアントは各自のターミナルに送信する。



設定

~/.profileファイルまたは~/.bashrcファイル等に、以下の設定を追記する。

vi ~/.profile


export DOCKER_HOST='tcp://localhost:2375'


Dockerのイメージおよびコンテナの保存先は、/var/lib/dockerディレクトリに保存される。
もし、保存先を変更する場合は、以下の手順を実施する。

  1. Dockerデーモンの設定ファイルをバックアップする。
    sudo cp /usr/lib/systemd/system/docker.service /usr/lib/systemd/system/docker_org.service

  2. Dockerデーモンの設定ファイルにあるexecstart項目を、以下のように編集する。
    sudo vi /usr/lib/systemd/system/docker.service

    # 編集前
    ExecStart=/usr/bin/dockerd --add-runtime oci=/usr/sbin/docker-runc $DOCKER_NETWORK_OPTIONS $DOCKER_OPTS

    # 編集後
    ExecStart=/usr/bin/dockerd --add-runtime oci=/usr/sbin/docker-runc $DOCKER_NETWORK_OPTIONS $DOCKER_OPTS -g <Dockerの保存先のフルパス>

  3. Dockerデーモンの設定を有効にして起動する。
    sudo systemctl daemon-reload
    sudo systemctl start docker



Dockerコマンド

Dockerイメージの検索

Docker Hubからイメージを検索およびダウンロードすることもできる。

sudo docker search <イメージ名>


Dockerイメージのダウンロード

sudo docker pull <イメージ名>


Dockerイメージの一覧表示

sudo docker image ls
または
sudo docker image ls -a  または  sudo docker image ls --all


Dockerイメージの削除

<イメージ名>は上述の"イメージの一覧表示"で確認できる。
-fオプションを付加することにより、使用中のイメージおよびコンテナであっても削除することができる。

sudo docker rmi -f <イメージ名>


Dockerイメージの実行

<イメージ名>はイメージの名前であり、<COMMAND>はDockerコンテナ上で実行するコマンドである。

sudo docker run <イメージ名> <COMMAND>


実行コマンドが、/bin/bashのような対話型(インタラクティブ)なコマンドの場合は、-itオプションを指定する。
-iオプションはコンテナの標準入力を有効化、-tオプションはttyを有効化するためのオプションである。

sudo docker run –it <イメージ名> /bin/bash


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

sudo docker run -d dockersamples/static-site


実行中のDockerコンテナの一覧表示

sudo docker ps
または
sudo docker container ls


全てのDockerコンテナの一覧表示

sudo docker ps -a
または
sudo docker ps --all
または
sudo docker container ls –a
または
sudo docker container ls –-all


Dockerコンテナの削除

<CONTAINER ID>を指定する。
<CONTAINER ID>は上述の"コンテナの一覧表示"で確認できる。

sudo docker rm <CONTAINER ID>
または
sudo docker countainer rm <CONTAINER ID>


Dockerコンテナの停止

sudo docker stop <CONTAINER ID>
sudo docker container stop <CONTAINER ID>


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

sudo docker rm –f <CONTAINER ID>
sudo docker container rm -f <CONTAINER ID>


Dockerコンテナに任意の名前を付ける

これは、<CONTAINER ID>の代わりに指定できる。

sudo docker run --name <任意のコンテナ名> <イメージ名>


ポートマッピング

runコマンドにおいて、-Pオプションを指定すると、コンテナが使うポートがランダムにホストのポートにマッピングされる。
また、-dオプションを指定すると、コンテナIDを表示して、バックグラウンドでコンテナを実行される。

sudo docker run -d -P <イメージ名>


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

sudo docker run -it –p 12345:80 <イメージ名> /bin/bash


どのポートにマッピングされたかは、sudo docker psコマンドまたはsudo docker port <CONTAINER ID>で確認できる。

sudo docker port <CONTAINER ID>

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


DockerコンテナからDockerイメージを作成する

まず、Dockerコンテナを停止する。

sudo docker container stop <CONTAINER IDまたはコンテナ名>


次に、停止したDockerコンテナからDockerイメージを作成する。

sudo docker commit <CONTAINER IDまたはコンテナ名> <イメージのリポジトリ名>:<イメージのタグ名>


作成したDcockerイメージを確認する。

sudo docker images


作成したDockerイメージからDockerコンテナを作成する。

sudo docker run -it --name <CONTAINER IDまたはコンテナ名> <イメージのリポジトリ名>:<イメージのタグ名> /bin/bash



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