📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の1版が非表示)
434行目: 434行目:
*# Dockerデーモンの設定を有効化する。
*# Dockerデーモンの設定を有効化する。
*#: <code>sudo systemctl daemon-reload</code>
*#: <code>sudo systemctl daemon-reload</code>
<br><br>
== Dockerコマンド ==
==== Dockerイメージの検索 ====
[https://hub.docker.com/ Docker Hub]からイメージを検索およびダウンロードすることもできる。<br>
sudo docker search <イメージ名>
<br>
==== Dockerイメージのダウンロード ====
sudo docker pull <イメージ名>
<br>
==== Dockerイメージの一覧表示 ====
sudo docker image ls
または
sudo docker image ls -a  または  sudo docker image ls --all
<br>
==== Dockerイメージの削除 ====
<イメージ名>は上述の"イメージの一覧表示"で確認できる。<br>
<code>-f</code>オプションを付加することにより、使用中のイメージおよびコンテナであっても削除することができる。<br>
sudo docker rmi -f <イメージ名>
<br>
==== Dockerイメージの実行 ====
<イメージ名>はイメージの名前であり、<COMMAND>はDockerコンテナ上で実行するコマンドである。<br>
sudo docker run <イメージ名> <COMMAND>
<br>
実行コマンドが、/bin/bashのような対話型(インタラクティブ)なコマンドの場合は、<code>-it</code>オプションを指定する。<br>
<code>-i</code>オプションはコンテナの標準入力を有効化、<code>-t</code>オプションはttyを有効化するためのオプションである。<br>
sudo docker run –it <イメージ名> /bin/bash
<br>
detachedモード(バックグラウンドモード)で実行する場合は、<code>–d</code>オプションを指定する。<br>
sudo docker run -d dockersamples/static-site
<br>
==== 実行中のDockerコンテナの一覧表示 ====
sudo docker ps
または
sudo docker container ls
<br>
==== 全てのDockerコンテナの一覧表示 ====
sudo docker ps -a
または
sudo docker ps --all
または
sudo docker container ls –a
または
sudo docker container ls –-all
<br>
==== Dockerコンテナの削除 ====
<CONTAINER ID>を指定する。<br>
<CONTAINER ID>は上述の"コンテナの一覧表示"で確認できる。<br>
sudo docker rm <CONTAINER ID>
または
sudo docker countainer rm <CONTAINER ID>
<br>
==== Dockerコンテナの停止 ====
sudo docker stop <CONTAINER ID>
sudo docker container stop <CONTAINER ID>
<br>
コンテナの停止と削除を同時に実施する。<br>
sudo docker rm –f <CONTAINER ID>
sudo docker container rm -f <CONTAINER ID>
<br>
==== Dockerコンテナに任意の名前を付ける ====
これは、<CONTAINER ID>の代わりに指定できる。<br>
sudo docker run --name <任意のコンテナ名> <イメージ名>
<br>
==== ポートマッピング ====
<code>run</code>コマンドにおいて、<code>-p</code>オプションを使用すると、コンテナのポートをマッピングするホストのポートを指定できる。<br>
以下の例では、ホストPCの12345番ポートをコンテナの80番ポートにマッピングしている。<br>
sudo docker run -it -p 12345:80 <イメージ名> /bin/bash
<br>
<code>-P</code>オプションを指定すると、コンテナが使うポートがランダムにホストのポートにマッピングされる。<br>
sudo docker run -it -P <イメージ名>
<br>
どのポートにマッピングされたかは、<code>sudo docker ps</code>コマンドまたは<code>sudo docker port <CONTAINER ID></code>で確認できる。<br>
sudo docker port <CONTAINER ID>
# 出力例
443/tcp -> 0.0.0.0:32770
80/tcp -> 0.0.0.0:32771
<br>
==== ディレクトリの共有 ====
<code>run</code>コマンドにおいて、<code>-v</code>オプションまたは<code>–-volume</code>オプションを指定することにより、<br>
コンテナ内のボリュームとローカル環境のボリュームを接続することができる。<br>
sudo docker run -d -p 12345:80 -v /home/user/htdocs:/var/www/html <イメージ名>
<br>
==== バックグラウンドでの実行 ====
<code>run</code>コマンドにおいて、<code>-d</code>オプションまたは<code>-–detach</code>を指定することにより、コンテナをバックグラウンドを実行することができる。<br>
実行直後にコンテナIDが表示される。<br>
sudo docker run -d <イメージ名>
<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>
==== Dokerイメージのエクスポートおよびインポート ====
まず、Dockerコンテナを停止する。<br>
sudo docker container stop <Dockerコンテナ名またはDockerコンテナのID名>
# または
sudo docker stop <Dockerコンテナ名またはDockerコンテナのID名>
<br>
必要であれば、Dockerコンテナでの変更をDockerイメージに反映する。<br>
sudo docker commit <Dockerコンテナ名またはDockerコンテナのID名> <イメージのリポジトリ名>:<イメージのタグ名>
<br>
Dockerイメージに付随するレイヤの情報(メタ情報)等を含めたイメージを保存する。<br>
sudo docker save <オプション> <イメージ名> > <保存するファイル名>
# または
sudo docker save <オプション> <イメージ名> -o <保存するファイル名>
# 例. Dockerイメージのsample-imageをsample-image.tarとして保存する
sudo docker save sample-image > sample-image.tar
<br>
エクスポートしたDockerイメージファイルをインポートする場合は、<code>load</code>コマンドを使用する。<br>
sudo docker load < <エクスポートしたDockerのファイル名>
# 例. エクスポートしたファイルであるsample-image.tarファイルをインポートする
sudo docker load < sample-image.tar
<br>
==== Dokerコンテナのエクスポートおよびインポート ====
まず、Dockerコンテナを停止する。<br>
sudo docker container stop <コンテナ名またはコンテナID>
# または
sudo docker stop <コンテナ名またはコンテナID>
<br>
必要であれば、Dockerコンテナでの変更をDockerイメージに反映する。<br>
sudo docker commit <Dockerコンテナ名またはDockerコンテナのID名> <イメージのリポジトリ名>:<イメージのタグ名>
<br>
コンテナのメタ情報等は保存されず、ファイルシステムのコピーがそのまま保存される。<br>
sudo docker export <オプション> <コンテナ名またはコンテナID> > <保存するファイル名>
# 例. Dockerコンテナのsample-containerをsample-container.tarとして保存する
sudo docker export sample-container > sample-container.tar
<br>
エクスポートしたDockerコンテナファイルをインポートする場合は、<code>import</code>コマンドを使用する。<br>
sudo docker import <エクスポートしたコンテナファイル名> - <リポジトリ名>:<タグ名>
# 例. エクスポートしたsample-container.tarファイルをインポートする
sudo docker import < sample-container.tar - sample-container:latest
# または
cat sample-container.tar | sudo docker import - sample-container:latest
<br><br>
<br><br>


632行目: 484行目:
yumの処理は、ユーザに対して"yes or no"を訊ねる場合があるので、自動的にyesと答えないと途中でイメージ作成が止まるので、以下のように記述する。<br>
yumの処理は、ユーザに対して"yes or no"を訊ねる場合があるので、自動的にyesと答えないと途中でイメージ作成が止まるので、以下のように記述する。<br>
  CMD yum update –y
  CMD yum update –y
<br><br>
== Dockerfileの基礎 ==
==== Dockerfileの概要 ====
Dockerfileは、Dockerイメージの設計図のようなものである。
Dockerfileを作成することにより、任意のDockerイメージを作成できる。
<br>
DockerfileからDockerイメージを作成するには、Dockerfileが存在するディレクトリで以下のコマンドを実行する。<br>
# イメージ名およびタグ名、Dockerファイル名を指定する場合
sudo docker build -t <イメージ名>:<タグ名> -f <Dockerファイル名> .
# イメージ名およびタグ名、Dockerファイル名(Dockerファイル名が<u>'''dockerfile'''</u>の場合のみ)は省略できる
sudo docker build .
<br>
Dockerfileで使用するコマンドを、以下に示す。<br>
* FROM
* RUN
* CMD
* ENTRYPOINT
* COPY
* ADD
* ENV
* WORKDIR
<br>
==== Dockerfileの作成手順 ====
* FROM
*: ベースとなるイメージを決定するコマンドである。
*: Dockerfileの先頭に記述する。
*: FROMの後には、基本的にOSを記述する。
<br>
例1. FROM centos7:latest
例2. FROM ruby:2.5
<br>
* RUN
*: FROMで記述したOSに対応するコマンドを実行するコマンドである。
*: RUNごとにLayerが作成される。(Dockerイメージは、レイヤーを積み重ねていくように作成される)
*: <br>
*: 以下の例では、Dockerイメージには、centos7のレイヤーにtouch /usr/bin/testのレイヤーが追加作成される。<br>
*: (/usr/bin/testファイルを作成するDockerイメージを作成している)<br>
例. FROM centos7:latest
    RUN ["touch", "/usr/bin/test"]
:: <br>
:: 以下の例では、Dockerイメージには、centos7のレイヤーにcurlとnginxという2つのパッケージをインストールするレイヤーが追加作成される。<br>
:: (yum updateはインストールするパッケージを新しいものにするために記述して、yum install -yはパッケージをインストールするために記述している)<br>
例. FROM centos7:latest
    RUN yum update && yum install -y curl nginx
:: <br>
:: DockerfileからDockerイメージを1度作成したものはキャッシュされるため、RUNを複数記述することにより、ビルドの時間を短くすることができる。<br>
:: ただし、レイヤー数は少ない方が望ましいため、&&や\を使用して、RUNの記述を少なくする。<br>
<br>
* CMD
*: コンテナの実行コマンドを指定するコマンドである。
*: Dockerfileの最後に記述する。
*: <br>
*: 以下の例では、DockerfileからDockerイメージを作成、docker runコマンドによりコンテナを作成した後、/bin/bashを実行している。<br>
例. FROM centos7:latest
    RUN yum update && yum install -y curl nginx
    CMD ["/bin/bash"]
<br>
* ENTRYPOINT
*: CMDに近い役割を持つコマンドである。
*: CMDは、Dockerコンテナを作成・実行する時(docker runコマンド)、コマンドを上書きできるが、
*: (例. docker run lsコマンドを実行する場合、上記のCMDの例ではbashではなく、lsが実行される)
*: ENTRYPOINTを使用する場合、コマンドは上書きできなくなり、CMDはENTRYPOINTのオプションを記述する形となる。
*: <br>
*: 以下の例では、<code>ENTRYPOINT</code>に<code>ls</code>コマンドを記述することにより、コンテナ実行時(<code>docker run</code>コマンド)に、<code>ls</code>以外のコマンドが実行できなくなる。<br>
*: なお、<code>CMD</code>では、<code>--help</code>オプションを指定している。<br>
例. FROM centos7:latest
    RUN yum update && yum install -y curl nginx
    ENTRYPOINT ["ls"]
    CMD ["--help"]
<br>
* COPY
*: Dockerfileが存在するディレクトリ(BuildContextという)にあるファイルを、Dockerイメージにコピーするコマンドである。
*: DockerfileをビルドしてDockerイメージからコンテナを作成した後、コンテナにNewDirディレクトリを作成して、Test.txtファイルをコピーしている。
*: この時、Dockerイメージのレイヤーが追加・作成される。
例. FROM ubuntu:latest
    RUN mkdir /NewDir
    COPY Test.txt /NewDir
    CMD ["/bin/bash"]
<br>
* ADD
*: COPYのコマンドと似ていて、同じくコピーができるインストラクションです。
*: <br>
*: ADDとCOPYとの違い
*: ADDは圧縮ファイルをコピーした際、コピーと解凍の両方を行います。
*: COPYは単純なコピーのみです。
*: 圧縮ファイルをコピー・解凍する時にはADD、圧縮ファイルが関係ない単純なコピーにはCOPYを使います。
*: <br>
*: 以下の例では、Dockerfileをbuildした際、DockerImageにsample.tarを/(ルート直下)にコピー・解凍するLayerを作成されます。
*: コンテナを作成した際に、コンテナのルート直下にsample.tarが解凍されたものが作成されています。
例. FROM ubuntu:latest
    ADD sample.tar /
    CMD ["/bin/bash"]
<br>
* ENV
*: 環境変数を設定するインストラクションです。
*: <br>
*: 以下の例では、コンテナ作成時にkey1=valueという環境変数が設定されるDockerImageが作成されます。
例. FROM ubuntu:latest
    ENV key1 value
    CMD ["/bin/bash"]
<br>
* WORKDIR
*: インストラクションの実行ディレクトリを変更するインストラクションです。
*: <br>
*: 以下の例では、sample_folderというディレクトリを作り、sample_folder内でsample_fileを作成するLayerとなります。
*: (WORKDIRを使ったことで、コンテナ内に作成した/sample_folderの中でRUNの実行ができます。)
例. FROM ubuntu:latest
    RUN mkdir sample_folder
    WORKDIR /sample_folder
    RUN touch sample_file
<br><br>
<br><br>