こんにちはヤク学長です。
本記事の目的は、「基本的なDockerの使い方を理解する」ことを目的としています。
【本記事のもくじ】
まず、「Docker」に真剣に取り組むための概要を解説します。
下記の方法で、簡単に概要を抑えることができます。
- 1.3分で学ぶDocker
- 2.Dockerのインストール
- 3.Docker Hub アカウントの取得
- 4.Docker loginの方法
- 5.Docker基本コマンド
- 6.コンテナストレージの永続化の方法
- 7.Dockerfile
- 8.DockerでMySQLを作る方法
- 9.Docker-Compose
それでは、上から順番に見ていきます。
なお、本上記の方法を抑えれば成果が出ます。
今回からは「Dockerを全体的に学ぶ」として機能や特徴を学んでいきましょう。
基本的な機能や仕組みを理解し、Dockerについて理解していきましょう。
記事の内容は「転載 & 引用OK」問題ありません。
- 1 1.3分で学ぶDocker
- 2 2.Dockerのインストール
- 3 3.Docker Hub アカウントの取得
- 4 4.Docker loginの方法
- 5 5.基本コマンド
- 6 6.コンテナストレージの永続化の方法
- 7 7.Dockerfile
- 8 8.DockerでMySQLを作る方法
- 9 9.Docker -Compose
1.3分で学ぶDocker
Dockerとは
Dockerは、コンテナ型の仮想化技術です。
アプリケーションとその依存関係をパッケージ化することができ、このパッケージを「Dockerイメージ」と呼んでいます。
これはOS上で動作するアプリケーションとそのライブラリを含んでいて、仮想環境を構築することなく、実行することができます。
Dockerは、開発者と運用者が同じ環境を利用することができるとともに、アプリケーションを移植することが容易な点などから、業界で広く利用されています。
Dockerが必要な理由
Dockerは、アプリケーションを開発、テスト、デプロイするために利用されるコンテナ技術です。
Dockerは下記の理由から必要とされています。
- リソースの効率的な利用: Dockerコンテナは、独自のOSレベルで動作しますので、仮想マシンよりもリソース効率が良いです。
- 環境の統一: Dockerを使用することで、開発者と運用者が同じ環境を利用することができます。
- スピード: Dockerは、仮想マシンと比較してスピードが速いので、アプリケーションの開発やデプロイが迅速に行えます。
- スケーラビリティ: Dockerは、アプリケーションを簡単にスケールアップすることができます。
- 保守性: Dockerは、アプリケーションとその依存関係をパッケージ化することができます。これにより、アプリケーションを保守する際に環境の統一性が維持されます。
これまでの仮想環境とDockerの違い
仮想環境とDockerは、異なるアプローチをとっています。仮想環境は、仮想マシンを作成し、その仮想マシン上でOSレベルで動作するアプリケーションを実行するものです。一方、Dockerは、アプリケーションをパッケージ化して、実行するためのコンテナ技術です。
主な相違は、
- リソース使用量: Dockerは、仮想マシンよりもリソース使用量が少ないため、効率的な利用が可能です。
- 環境統一性: Dockerは、アプリケーションとその依存関係をパッケージ化することができます。これにより、開発者と運用者が同じ環境を利用することができます。一方、仮想環境は、仮想マシンを作成することで環境統一性を確保することができます。
- スピード: Dockerは、仮想マシンと比較してスピードが速いため、アプリケーションの開発やデプロイが迅速に行えます。
- 移植性: Dockerは、異なるプラットフォーム間で移植性が高いため、アプリケーションを移植することが容易です。一方、仮想環境は、異なるプラットフォーム間で移植することが困難な場合があります。
- デプロイメント: Dockerは、Dockerイメージを使用することで、簡単にデプロイメントを行うことができます。一方、仮想環境は、仮想マシンイメージを作成することでデプロイメントを行うことができますが、Dockerに比べると複雑です。
そもそもコンテナとは
コンテナとは、アプリケーションとその依存関係を一つの単位としてパッケージ化する仕組みです。
コンテナは、仮想環境を構築することなく、アプリケーションを実行することができます。これにより、アプリケーションを実行するために必要な環境(OS・ライブラリ・設定など)を含めて、他のシステムと分離された状態で実行することができます。
このため、コンテナは、アプリケーションを開発・テスト・実行するための環境を一貫性のあるものにすることができます。また、コンテナは、同じアプリケーションを複数のシステムで実行することができます。これにより、アプリケーションのポータビリティ・スケーラビリティが向上します。
従来の方法とコンテナを使った方法の大きな違い
従来の方法とコンテナを使った方法の違いは、以下のような点があります。
- アプリケーションの環境: 従来の方法では、アプリケーションを実行するためには、環境を構築しなければなりません。このため、異なるシステムに同じアプリケーションを実行するためには、異なる環境を構築する必要があります。一方、コンテナを使った方法では、アプリケーションとその依存関係を一つの単位としてパッケージ化するため、環境を構築することなくアプリケーションを実行することができます。
- スケーラビリティ: 従来の方法では、アプリケーションをスケールするためには、各々のシステムを手動で構築しなければなりません。一方、コンテナを使った方法では、コンテナを実行するためのリソースを自動的に割り当てることができます。このため、アプリケーションをスケールするためには、新しいコンテナインスタンスを追加するだけで済みます。
- ポータビリティ: 従来の方法では、アプリケーションを異なるシステムで実行するためには、各々の環境を構築する必要があります。一方、コンテナを使った方法では、アプリケーションとその依存関係を一つの単位としてパッケージ化するため、同じアプリケーションを複数のシステムで実行することができます。
以上のような特長から、コンテナを使った方法は、アプリケーションの開発・テスト・実行・スケール・デプロイメントの作業を効率化することができます。
また、コンテナはアプリケーションとその依存関係を隔離することができるため、アプリケーション間の相互作用の問題を回避することができます。
さらに、従来の方法では、システムの変更やアップグレードに伴い、アプリケーションが正常に動作しない場合がありましたが、コンテナを使った方法では、各アプリケーションのコンテナを独立した環境で実行するため、このような問題を回避することができます。
要するに、Docker最大のメリットは?
最大のメリットは「インフラのコード化」だと考えています。
「インフラのコード化」とは、インフラストラクチャをコード化することを指します。これにより、インフラストラクチャを自動化して構築・運用することができるようになります。
例えば、Infrastructure as Code (IaC) ツールを使用することで、サーバー構成やネットワーク構成などの設定をコード化して管理することができます。これにより、以下のようなメリットがあります。
- 設定の標準化
- 設定のバージョニング
- 設定の自動化
- 設定のドキュメンテーション
Dockerは、アプリケーションのコンテナ化を支援するツールとして、インフラのコード化にも利用することができます。Docker Composeなどのツールを使用することで、アプリケーションとインフラストラクチャを同時に自動化することができます。
DockerfileとDockerイメージを使ってコンテナを作成する
DockerfileとDockerイメージは、Dockerにおいて重要な概念です。
- Dockerfile: Dockerイメージを作成するための設定ファイルです。Dockerfileには、OSのベースイメージやアプリケーションのインストールなどの設定が記述されており、これを元にDockerイメージが作成されます。
- Dockerイメージ: Dockerfileを元に作成された、OSとアプリケーションのパッケージのことです。Dockerイメージは、Docker Hubなどのレジストリに保存されており、他のユーザーからも利用することができます。Dockerを使用することで、Dockerイメージをもとにコンテナを作成・実行することができます。
Dockerfileは、Dockerイメージを作成するための設定ファイルであり、Dockerイメージは、Dockerfileを元に作成されたアプリケーションとOSのパッケージです。Dockerイメージを作成するには、まずDockerfileを作成する必要があります。
Dockerイメージタグ
※タグは必ず指定しましょう
Dockerイメージタグは、Dockerイメージを識別する名前のことです。Dockerイメージタグは、イメージ名とともに使用され、Dockerイメージを一意に識別するために使用されます。
Dockerイメージタグは、複数のバージョンやリリースのDockerイメージを管理する際に役立ちます。例えば、最新のバージョンのDockerイメージを示す “latest” タグや、特定のバージョンを示す “1.0” タグなどがあります。
Dockerイメージタグは、Dockerfileをビルドして作成されたDockerイメージに設定することができます。Dockerイメージタグを使用することで、Dockerイメージを一意に識別し、管理することができます。
タグを指定する重要性
Dockerイメージタグは、Dockerイメージを一意に識別するために重要な役割を果たします。タグを指定することで、複数のバージョンやリリースのDockerイメージを管理することができます。
また、Dockerイメージタグは、Dockerコンテナを実行する際に使用されます。特定のタグを指定してDockerイメージを実行することで、指定したバージョンのDockerイメージを使用することができます。
さらに、Dockerイメージタグは、CI/CDパイプラインなどでも使用されます。特定のタグを指定してDockerイメージをビルドして、自動的にデプロイすることができます。これにより、開発・テスト・本番環境などで異なるバージョンのDockerイメージを使用することができます。
しかしながら、タグを指定しない場合、Dockerイメージを識別することが困難になり、管理することが難しくなります。また、自動的なデプロイなどができなくなります。
すべてを踏まえて、Dockerイメージタグを適切に指定することは、Dockerイメージを正確に識別し、効率的に管理するために重要です。
Dockerでアプリケーション環境を作る方法
Dockerを使用してアプリケーション環境を作る方法は以下の通りです:
- Dockerイメージを作成する:Dockerfileを使用してDockerイメージを作成します。Dockerfileには、アプリケーションに必要なソフトウェアやライブラリなどを含む基本イメージを指定します。
- Dockerコンテナを作成する:DockerイメージからDockerコンテナを作成します。Dockerコンテナは、Dockerイメージを実際に実行するためのランタイム環境です。
- アプリケーションを起動する:Dockerコンテナ内でアプリケーションを起動します。このとき、Dockerコンテナには、アプリケーションに必要な環境変数やポートマッピングなどを設定することもできます。
- アプリケーションを管理する:Dockerコンテナを管理することで、アプリケーションの状態を監視したり、再起動や削除などを行うことができます。
このように、Dockerを使用することで、アプリケーションを実行するための環境を作成し、管理することができます。Dockerにより、アプリケーション開発からデプロイまでの流れを効率化し、統一性を確保することができます。
2.Dockerのインストール
ここからは、実際にDockerをインストールしていきましょう。
※Windows 10またはWindows 7の64ビット版Homeユーザー向けの説明です。
まずは、Dockerをインストールする前に、VituralBoxをインストールします。
ダウンロード後に、インストールをしておきましょう。
続いて、Dockerのインストールです。
Windowsプロユーザーは「DOCKERツールボックス」を使用することを推奨します。Google検索で「Docker Toolbox GITHUB」と検索し、GitHub.com上で最新版をインストールします。
最新版をインストールするには、リリース履歴にある「.exe」の拡張子で終わっているものをダウンロードしてください。
ダウンロードが完了したら、インストールを開始して、不明なアカウントがデバイスに変更を加えることを許可するかの画面が表示されますので、許可を選択してください。
インストールウィザードに進めて、VIRTUALBOXを既にインストールしている場合は、VIRTUALBOXのチェックを外して次に進んでください。
残りの手順は簡単で、次をクリックしてインストールを進めてください。少し時間がかかりますので、しばらくお待ちください。
インストールが終了したら、「Quick Start Terminal」を開いて、Dockerのコマンドラインツールを使用することができます。
完了したか確認するために「docker version」というコマンドを入力することで確認ができます。
次のセクションから基本的なDockerコマンドの演習を行っていきましょう。
3.Docker Hub アカウントの取得
Docker Hub アカウントを作成するには次の手順を実行してください:
- Docker Hub のウェブサイト(https://hub.docker.com/)にアクセスする。
- “Sign Up” ボタンをクリックする。
- 必要な情報を入力し(名前、メールアドレス、パスワードなど)、”Sign Up” ボタンを再度クリックする。
- Docker Hub アカウントを確認するために送信された確認メールに従って手順を完了する。
これで Docker Hub アカウントが作成されます。
4.Docker loginの方法
Docker CLI の docker login
コマンドを使用することで、Docker Hub アカウントにログインすることができます。以下が実行方法です。
docker login
ログイン画面が表示されるので、Docker Hub アカウントのユーザー名とパスワードを入力してください。もしくは、以下のようにユーザー名とパスワードを指定して実行することもできます。
docker login -u <username> -p <password>
ログインに成功すると、以降、docker push
や docker pull
コマンドを使用して、Docker イメージを push または pull することができます。
5.基本コマンド
Docker run
Docker CLI の docker run
コマンドを使用することで、Docker イメージを実行することができます。次のような形式で実行します。
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
IMAGE
: 実行する Docker イメージの名前または ID。COMMAND
: Docker コンテナ内で実行するコマンド。省略された場合、Docker イメージに設定されているデフォルトのCMD
が実行されます。ARG
:COMMAND
の引数。
一般的に使用されるオプションには以下があります。
-d
: バックグラウンドで実行します。-p
: ホスト側のポートと Docker コンテナ内のポートをマッピングします。-v
: ホスト側のディレクトリまたはボリュームと Docker コンテナ内のディレクトリをマッピングします。--name
: Docker コンテナに名前を付けます。
例:
docker run -d -p 8080:80 --name my-web-app nginx
この例では、Docker イメージ nginx
をバックグラウンドで実行し、ホストのポート 8080 と Docker コンテナ内のポート 80 をマッピングします。また、この Docker コンテナに名前 my-web-app
を付けます。
Docker ps
Docker CLI の docker ps
コマンドを使用することで、現在実行中の Docker コンテナの一覧を表示することができます。以下が実行方法です。
docker ps
以下が出力されます。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0d3f08d3f9cd nginx "nginx -g 'daemon of…" 2 hours ago Up 2 hours 0.0.0.0:8080->80/tcp my-web-app
この例では、実行中の Docker コンテナが 1 つあり、CONTAINER ID
、IMAGE
、COMMAND
、CREATED
、STATUS
、PORTS
、NAMES
の情報が表示されます。
オプションとして、-a
を使用することで、停止している Docker コンテナも含めて一覧を表示することができます。
docker ps -a
Docker rm
Docker CLI の docker rm
コマンドを使用することで、Docker コンテナを削除することができます。次が実行方法です。
docker rm [OPTIONS] CONTAINER [CONTAINER...]
CONTAINER
: 削除する Docker コンテナの IDまたは名前。
一般的に使用されるオプションには以下があります。
-f
: 強制的に削除します。-v
: 関連付けられたボリュームも削除します。
例:
docker rm -f my-web-app
この例では、名前が my-web-app
の Docker コンテナを強制的に削除します。
Docker Start/stop/restart
Docker CLI を使用して、Docker コンテナを開始、停止、再起動する方法を以下に示します。
docker start
: Docker コンテナを開始します。
docker start [OPTIONS] CONTAINER [CONTAINER...]
CONTAINER
: 開始する Docker コンテナの ID または名前。
例:
docker start my-web-app
この例では、名前が my-web-app
の Docker コンテナを開始します。
docker stop
: Docker コンテナを停止します。
docker stop [OPTIONS] CONTAINER [CONTAINER...]
CONTAINER
: 停止する Docker コンテナの ID または名前。
例:
docker stop my-web-app
この例では、名前が my-web-app
の Docker コンテナを停止します。
docker restart
: Docker コンテナを再起動します。
docker restart [OPTIONS] CONTAINER [CONTAINER...]
CONTAINER
: 再起動する Docker コンテナの ID または名前。
例:
docker restart my-web-app
この例では、名前が my-web-app
の Docker コンテナを再起動します。
コンテナ指定の方法
Docker CLI で Docker コンテナを指定するには、次のようにします。
- ID: Docker コンテナの一意な ID。
- 名前: Docker コンテナに割り当てられた名前。
例:
docker <command> <container_id_or_name>
例えば、ID で Docker コンテナを指定するには:
docker start 5b972d9e6b13
名前で Docker コンテナを指定するには:
docker start my-web-app
-it
-it
オプションは、Docker CLI の docker
コマンドで使用されます。このオプションは、Docker コンテナ内でインタラクティブなセッションを実行することを意味します。
このオプションを使用すると、Docker コンテナ内でコマンドを実行すると同時に、入力と出力を直接行うことができます。
例:
docker exec -it my-web-app bash
この例では、名前が my-web-app
の Docker コンテナ内で、bash
シェルを実行してインタラクティブなセッションを開始します。
bashとは
Bash は Unix shell(コマンドラインインターフェース)の一種です。シェルは、OSに対するユーザー入力を受け付け、システムコマンドを実行するためのインターフェースを提供するものです。
Bash では、コマンドラインからシステムコマンドを実行したり、スクリプトを実行したりすることができます。シェルスクリプトは、複数のシステムコマンドを組み合わせて自動化タスクを実行するために使用されます。
Bash は、多くの Unix および Linux ディストリビューションで標準的なシェルとして使用されています。
Docker exec
Docker CLI で Docker コンテナ内でコマンドを実行するには、docker exec
コマンドを使用します。次の構文を使用します。
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
CONTAINER
: 実行するコマンドの Docker コンテナの ID または名前。COMMAND
: Docker コンテナ内で実行するコマンド。ARG
: コマンドに渡す引数。
例:
docker exec my-web-app ls /app
この例では、名前が my-web-app
の Docker コンテナ内で、ls /app
コマンドが実行されます。
cat etcの使い方
cat
コマンドは、テキストファイルの内容を表示するコマンドです。
使い方:
cat [OPTIONS] [FILENAME...]
OPTIONS
:cat
コマンドに付加するオプション。FILENAME
: 表示するテキストファイルのパス。
例:
cat /etc/passwd
この例では、/etc/passwd
ファイルの内容が表示されます。
注: /etc/passwd
ファイルは、システム上のユーザーアカウント情報を保存するファイルです。
Docker images
Docker imagesは、Dockerコンテナを作成するために使用されるテンプレートです。 Dockerイメージは、Docker Hubなどのレジストリからダウンロードするか、Dockerfileを使用して手動で作成することができます。
手動でDockerイメージを作成する方法:
- Dockerfileを作成する: Dockerfileには、Dockerイメージを作成するための構成とコマンドが記述されています。
- Dockerfileを使用してDockerイメージをビルドする:
docker build
コマンドを使用して、DockerfileからDockerイメージをビルドします。 - Dockerイメージをプッシュする: Docker HubなどのレジストリにDockerイメージをプッシュすることで、他のユーザーからアクセス可能になります。
Docker HubなどからDockerイメージをダウンロードする方法:
- Dockerイメージを検索する: Docker HubなどでDockerイメージを検索します。
- Dockerイメージをダウンロードする:
docker pull
コマンドを使用して、Dockerイメージをダウンロードします。
Docker rmi
Docker rmi
コマンドは、Dockerイメージを削除するために使用されます。
使い方:
docker rmi [OPTIONS] IMAGE [IMAGE...]
使用例:
docker rmi repository/image_name:tag
例えば、以下のような形式で使用できます:
docker rmi ubuntu:18.04
注意: 削除するDockerイメージが使用されている場合、削除する前にそのイメージを使用しているDockerコンテナを削除する必要があります。Stop→rmの後にimageを削除するイメージですね。
Docker build
Docker build
コマンドは、Dockerイメージを作成するために使用されます。
使い方:
docker build [OPTIONS] PATH | URL | -
使用例:
docker build -t repository/image_name:tag .
-t
オプションは、作成するDockerイメージにタグを付けるために使用されます。.
は、Dockerfileが存在するディレクトリを示しています。
例えば、以下のような形式で使用できます:
docker build -t my_image .
このコマンドは、現在のディレクトリにあるDockerfileを使用して、my_image
という名前のDockerイメージを作成します。
Docker cp
Docker cp
コマンドは、Dockerコンテナ内のファイルをホストにコピーするために使用されます。また、ホストからDockerコンテナ内にファイルをコピーすることもできます。
使い方:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
使用例:
docker cp container_name:/file/path/within/container /host/path/target
例えば、以下のような形式で使用できます:
docker cp my_container:/app/config.txt .
このコマンドは、名前がmy_container
のDockerコンテナ内の/app/config.txt
ファイルを、現在のディレクトリにコピーします。
Docker logs
Docker logs
コマンドは、Dockerコンテナのログを表示するために使用されます。
使い方:
docker logs [OPTIONS] CONTAINER
使用例:
docker logs container_name
例えば、以下のような形式で使用できます:
docker logs my_container
このコマンドは、名前がmy_container
のDockerコンテナから出力されたログを表示します。
tail -f
tail -f
は、テキストファイルの末尾から内容を監視し、更新があった場合にその内容を出力し続けます。
使い方:
tail -f [OPTIONS] FILE
使用例:
tail -f log.txt
例えば、以下のような形式で使用できます:
tail -f /var/log/system.log
このコマンドは、/var/log/system.log
という名前のテキストファイルの末尾から内容を監視し、更新があった場合にその内容を出力し続けます。
Docker inspect
Docker inspect
コマンドは、Dockerオブジェクト(イメージ、コンテナ、ボリューム、ネットワークなど)の詳細情報を表示するために使用されます。
使い方:
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
使用例:
docker inspect container_name
例えば、以下のような形式で使用できます:
docker inspect my_container
このコマンドは、名前がmy_container
のDockerコンテナに関する詳細情報を表示します。情報はJSON形式で出力されます。
Docker pull
Docker pull
コマンドは、Docker HubなどのリモートレジストリからDockerイメージをダウンロードするために使用されます。
使い方:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
使用例:
docker pull repository/image_name:tag
例えば、以下のような形式で使用できます:
docker pull ubuntu:20.04
このコマンドは、ubuntu
レポジトリからタグ20.04
のDockerイメージをダウンロードします。
Docker commit
Docker commit
コマンドは、変更を加えたDockerコンテナから新しいDockerイメージを作成するために使用されます。
使い方:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
使用例:
docker commit container_name repository/new_image_name:tag
例えば、以下のような形式で使用できます:
docker commit my_container myrepo/myimage:v1.0
このコマンドは、名前がmy_container
のDockerコンテナから新しいDockerイメージmyrepo/myimage:v1.0
を作成します。
Docker push
Docker push
コマンドは、作成したDockerイメージをリモートレジストリ(Docker Hubなど)にアップロードするために使用されます。
使い方:
docker push [OPTIONS] NAME[:TAG]
使用例:
docker push repository/image_name:tag
例えば、以下のような形式で使用できます:
docker push myrepo/myimage:v1.0
このコマンドは、名前がmyrepo/myimage:v1.0
のDockerイメージをリモートレジストリにアップロードします。
アップロード前には、Docker Hubなどのリモートレジストリにログインする必要があります。
Docker history
Docker history
コマンドは、Dockerイメージの変更履歴を表示するために使用されます。
使い方:
docker history [OPTIONS] IMAGE
使用例:
docker history image_name
例えば、以下のような形式で使用できます:
docker history ubuntu:20.04
このコマンドは、名前がubuntu:20.04
のDockerイメージの変更履歴を表示します。
6.コンテナストレージの永続化の方法
Dockerのコンテナボリューム
Dockerコンテナボリュームは、Dockerコンテナとホストマシン間でデータを共有するための仕組みです。ボリュームを使用することで、Dockerコンテナ内のアプリケーションからホストマシン上のファイルシステムにアクセスすることができます。また、Dockerボリュームは、Dockerイメージに含まれていないデータを永続化するために使用することもできます。
※コンテナのボリュームは消えてしまうということに留意してください。
Dockerボリュームを使用するには、docker run
コマンドに-v
オプションを指定する必要があります。
使い方:
docker run -v host_path:container_path [OPTIONS] IMAGE [COMMAND] [ARG...]
使用例:
docker run -v /tmp:/data -it ubuntu /bin/bash
例えば、以下のような形式で使用できます:
docker run -v /host/data:/container/data -it ubuntu /bin/bash
このコマンドは、ホストマシン上の/host/data
というパスをDockerコンテナ上の/container/data
というパスにマウントすることで、ホストマシンとDockerコンテナ間でデータを共有します。
Docker Tool BOXで立ち上げたコンテナへのアクセス方法
Docker Toolboxを使用して、DockerコンテナのIPアドレスを調べる方法は次のとおりです。
- Docker MachineのIPアドレスを調べる Docker Toolboxを使用すると、Docker Machineという仮想マシンが作成されます。この仮想マシンにアクセスするには、Docker MachineのIPアドレスが必要です。Docker MachineのIPアドレスを調べるには、次のコマンドを使用します。
docker-machine ip
- Docker Machineに接続する 次に、Docker Machineに接続する必要があります。次のコマンドを使用して、Docker Machineに接続します。
docker-machine ssh
- DockerコンテナのIPアドレスを調べる Docker Machineに接続したら、Dockerコマンドを使用して、DockerコンテナのIPアドレスを調べます。次のコマンドを使用します。
docker inspect [container_name] | grep IPAddress
このコマンドを実行すると、指定されたDockerコンテナのIPアドレスが表示されます。
DockerでIPアドレスを調べる方法
DockerでIPアドレスを調べる方法は、次のとおりです。
docker inspect
コマンドを使用する。このコマンドは、Dockerコンテナに関する詳細情報を出力します。IPアドレスは、Networks
セクションに記載されています。
使い方:
docker inspect [OPTIONS] CONTAINER
使用例:
docker inspect my_container | grep IPAddress
docker network inspect
コマンドを使用する。このコマンドは、Dockerネットワークに関する詳細情報を出力します。IPアドレスは、Containers
セクションに記載されています。
使い方:
docker network inspect [OPTIONS] NETWORK
使用例:
docker network inspect my_network | grep IPAddress
docker exec
コマンドを使用する。このコマンドを使用して、Dockerコンテナ内でコマンドを実行することができます。例えば、ip addr show
コマンドを使用して、Dockerコンテナ内のIPアドレスを調べることができます。
使い方:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
使用例:
docker exec my_container ip addr show
7.Dockerfile
Dockerfileは、Dockerイメージを作成するためのテキストファイルです。Dockerfileには、Dockerイメージを作成するために必要な指示が記述されています。Dockerfileには、OSやアプリケーション、ライブラリ、設定などを定義するためのコマンドが含まれています。Dockerfileは、Docker CLIを使用して実行され、Docker Hubなどのリポジトリに保存され、他のユーザーからもダウンロードして使用することができます。
Dockerfileのベストプラクティス
Dockerfileにはいくつかのベストプラクティスがあります。以下はDockerfileに適用すべき一部のベストプラクティスです:
-
コマンドを1つのレイヤーに限定する Dockerfileには、1つのレイヤーに1つのコマンドのみを含めることが望ましいです。これは、イメージのサイズを小さくするとともに、イメージのキャッシュ効率を向上させます。
-
不要なファイルを削除する Dockerfile内で不要なファイルやデータを削除することが望ましいです。これは、イメージのサイズを小さくすることができるとともに、セキュリティ上の問題も避けることができます。
-
ラベルを使用する Dockerfileには、イメージに関連付けられたメタデータを定義するためのラベルを使用することが望ましいです。これにより、イメージの情報を簡単に確認することができます。
-
イメージのサイズを最適化する Dockerfileでは、使用するOSイメージやアプリケーションを選択することで、イメージのサイズを最適化することができます。また、不要なライブラリやデータを削除することで、イメージのサイズを小さくすることもできます。
-
セキュリティを考慮する Dockerfileでは、必要なセキュリティアップデートやパッチを適用することが重要です。また、不要なサービスやデーモンを停止することも重要です。
これらはDockerfileに適用すべき一部のベストプラクティスです。詳細な情報を得るには、Dockerのドキュメンテーションや他のオンラインリソースを参照することをお勧めします。
Dockerfileの主要コマンド
Dockerfileには、Dockerイメージを構築するための主要なコマンドがいくつかあります。以下はDockerfileで使用される一部の主要なコマンドです:
-
FROM: このコマンドは、イメージの構築に使用するベースOSイメージを指定するために使用されます。
-
RUN: このコマンドは、Dockerイメージ内で実行されるシェルスクリプトを指定するために使用されます。
-
COPY: このコマンドは、ローカルシステムからDockerイメージにファイルをコピーするために使用されます。
-
ENV: このコマンドは、Dockerイメージ内の環境変数を設定するために使用されます。
-
ADD: このコマンドは、ローカルシステムからDockerイメージにファイルを追加するために使用されます。
-
WORKDIR: このコマンドは、Dockerイメージ内での作業ディレクトリを設定するために使用されます。
-
EXPOSE: このコマンドは、Dockerイメージ内のアプリケーションが使用するポート番号を指定するために使用されます。
-
CMD: このコマンドは、Dockerイメージ内で実行される最終的なコマンドを指定するために使用されます。
これらはDockerfileで使用される主要なコマンドです。詳細な情報を得るには、Dockerのドキュメンテーションや他のオンラインリソースを参照することをお勧めします。
RUNとCMDの使い方
Dockerfileにおいて、RUNとCMDはDockerイメージのビルド時に実行されるコマンドを指定するものです。
-
RUN: Dockerイメージのビルド時に実行されるコマンドを指定します。複数のRUN指定をすることで、ビルド中に複数のタスクを実行することができます。
-
CMD: Dockerコンテナ起動時に実行されるコマンドを指定します。CMD指定が複数ある場合は、最後に指定されたものが実行されます。
例:
# Dockerfile
FROM ubuntu
RUN apt-get update && apt-get install -y nginx
CMD ["nginx", "-g", "daemon off;"]
上記の例では、RUNを使ってnginxをインストールしています。そして、CMDを使ってnginxを起動するように指定しています。
CopyとADD
Dockerfileにおいて、COPYとADDはDockerイメージにファイルをコピーするためのものです。
-
COPY: Dockerイメージにローカルのファイルをコピーするための指定です。複数のファイルをコピーする場合は、複数行に分けて指定することもできます。
-
ADD: COPYと同様にDockerイメージにローカルのファイルをコピーするための指定ですが、ADDには追加の機能もあります。ADDはURLを指定した場合にはそのURLからファイルをダウンロードしてコピーすることができます。また、圧縮されたファイルを指定した場合には自動的に展開してコピーすることもできます。
※DockerとしてはCOPYを推奨しています。
例:
# Dockerfile
FROM ubuntu
COPY index.html /var/www/html/
ADD https://example.com/file.tar.gz /var/www/html/
上記の例では、COPYを使ってローカルのindex.htmlを/var/www/html/にコピーしています。また、ADDを使ってURLからfile.tar.gzをダウンロードして/var/www/html/に展開しています。
ENVの使い方
Dockerfileにおいて、ENVはDockerイメージに環境変数を設定するための指定です。
例:
# Dockerfile
ENV MY_VAR=hello_world
上記の例では、ENVを使ってMY_VARという環境変数を設定しています。この環境変数は、Dockerイメージ内のアプリケーションから参照することができます。また、Dockerコンテナ起動時に環境変数を指定することもできます。
Docker の ENV 変数には以下の欠点があります:
-
安全性: ENV 変数は、Docker コンテナー内のプロセスから環境変数として見えるため、セキュリティ上の懸念があります。特に、シークレットやパスワードなどの重要な情報を ENV 変数に格納することは避けるべきです。
-
再利用性: ENV 変数は、Docker イメージを再利用する場合に不便です。ENV 変数は、イメージから再利用することはできません。そのため、新しいイメージを作成する必要があります。
-
管理性: ENV 変数は、複数の Docker コンテナーに渡される必要がある場合に管理するのが困難です。
-
設定のバージョン管理: ENV 変数は、Gitなどのバージョン管理システムに含まれないため、設定の変更履歴を確認することが困難です。
これらの欠点から、環境変数を管理するためには、代替手段(例えば、環境変数ファイルや Docker 環境変数マッピング)を使用することをお勧めします。
8.DockerでMySQLを作る方法
Docker を使って MySQL イメージを作成する方法は以下の通りです:
-
Docker イメージのダウンロード:
docker pull mysql
コマンドを使って、MySQL イメージをダウンロードします。 -
Docker コンテナーの作成:
docker run
コマンドを使って、MySQL イメージから Docker コンテナーを作成します。
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=password -d mysql:latest
- コンテナー内での MySQL サーバーの起動:
docker exec
コマンドを使って、Docker コンテナー内で MySQL サーバーを起動します。
docker exec -it mysql-container bash
- MySQL への接続:
mysql
コマンドを使って、MySQL に接続します。
mysql -u root -p
これらの手順で、Docker を使って MySQL イメージを作成することができます。
9.Docker -Compose
Docker Compose は、複数の Docker コンテナーを管理するツールです。Docker Compose を使うと、複数のコンテナー間の関係や、各コンテナーに対する環境変数、ポートマッピング、ボリュームマウントなどの設定を YAML 形式の設定ファイルに記述することができます。
Docker Compose を使うと、複数の Docker コンテナーを一度に起動・停止・再起動することができます。また、開発環境と本番環境で異なる設定を使うこともできます。
Docker Compose の使い方は以下の通りです:
-
Docker Compose 設定ファイルの作成:
docker-compose.yml
という名前の YAML 形式の設定ファイルを作成します。 -
Docker Compose 起動:
docker-compose up
コマンドを使って、Docker Compose 設定ファイルに記述された複数の Docker コンテナーを一度に起動します。 -
Docker Compose 停止:
docker-compose down
コマンドを使って、Docker Compose 設定ファイルに記述された複数の Docker コンテナーを一度に停止します。
これらの手順で、Docker Compose を使って複数の Docker コンテナーを管理することができます。
yamlファイルとは
YAML (YAML Ain’t Markup Language) は、人間が読み書きしやすい形式で、設定ファイルやデータを表現するための軽量なマークアップ言語です。
YAML は、XML や JSON とは異なり、空白とインデントを使って階層構造を表現します。また、構文がシンプルなため、手で書くことも簡単です。
例えば、以下は YAML 形式の設定ファイルの例です。
YAML 設定ファイルの例# 要素 name: John Doe age: 33
# 配列
skills:
- programming
- web design
- project management
# 辞書 (ハッシュ)
address:
street: 123 Main St.
city: San Francisco
state: CA
YAML は多くの言語やツールで使われており、Docker Compose では YAML 形式の設定ファイルを使用して、複数の Docker コンテナーを管理することができます。
相対パスと絶対パス
相対パスと絶対パスは、ファイルやディレクトリを指定するためのパスの 2 種類です。
-
相対パス: 現在のディレクトリからの相対的な位置を示します。例えば、現在のディレクトリが
/home/user
であり、相対パスが./documents
である場合、実際のパスは/home/user/documents
です。 -
絶対パス: ファイルやディレクトリを指定するための、ルートからのフルパスを示します。例えば、絶対パスが
/home/user/documents
である場合、実際のパスは/home/user/documents
です。
使用するシステムやコマンドによって、パスの書式が異なる場合がありますが、基本的な概念は同じです。
Dockerでは相対パスを使うことを推奨しています。
imageとbuild
-
Image: Docker のイメージは、Docker コンテナーを作成するために必要なすべてのファイルシステムと設定を含んでいます。イメージは、Docker リポジトリからダウンロードすることができます。また、他の Docker イメージを基にして新しいイメージを作成することもできます。
-
Build: Docker の Build は、Dockerfile と呼ばれるスクリプトを使って、Docker イメージを構築することを指します。Dockerfile には、イメージに必要なパッケージ、設定、アプリケーションなどを含めるためのコマンドが記述されています。
docker build
コマンドを実行すると、Docker は Dockerfile の指示に従って、新しい Docker イメージを構築します。
言い換えると、Docker Imageは既存のものを利用するか、自分でBuildして作成することができます。BuildするためにはDockerfileというスクリプトが必要で、これによって必要な情報を記述してImageを作成することができます。
container_nameの使い方
container_name
は、Docker Compose で定義するコンテナーに名前を付けるためのオプションです。container_name
オプションを使用すると、特定のコンテナーに固有の名前を付けることができます。
Docker Compose ファイルのサンプルを示します:
version: '3'
services:web: image: nginx:alpine container_name: my_nginx db: image: mysql:5.7 container_name: my_mysql
この例では、webサービスにはmy_nginx
という名前、dbサービスにはmy_mysql
という名前がついています。これにより、各コンテナーを識別するために名前を使用することができます。例えば、docker inspect my_nginx
コマンドを実行すると、my_nginx
という名前のコンテナーの情報が表示されます。
volumeの使い方
Docker Volumeは、Docker コンテナーとホストマシン間でデータを共有するための仕組みです。Volumeを使用することで、コンテナー内で生成されたデータを永続的に保存することができます。また、ホストマシン上のデータをコンテナー内から参照することもできます。
- Volumeを作成する Dockerコマンドラインで、以下のようにvolumeを作成できます。
docker volume create [VOLUME_NAME]
- Volumeをコンテナにマウントする Dockerコンテナを実行する際に、以下のようにvolumeをマウントすることができます。
docker run -v [VOLUME_NAME]:[CONTAINER_PATH] [IMAGE_NAME]
ここで、[VOLUME_NAME]は作成したvolumeの名前、[CONTAINER_PATH]はコンテナ内のマウントポイントのパス、[IMAGE_NAME]は実行するDockerイメージの名前です。
- Volumeを削除する 以下のように、volumeを削除できます。
docker volume rm [VOLUME_NAME]
以上のように、Dockerのvolumeを使用することで、コンテナ内のデータを永続化できます。また、同じvolumeを複数のコンテナで共有することもできます。
portsの使い方
Docker Composeファイルを使用すると、複数のDockerコンテナを定義および管理できます。ここでは、Docker Composeファイルでポートを公開する方法について説明します。
Docker Composeファイルで、各コンテナの「ports」セクションを定義することで、ホストマシン上でどのポートを使用するかを指定できます。このセクションには、ポートのマッピングに使用する構文が含まれています。
以下は、Docker Composeファイルで「ports」セクションを使用する例です。
version: '3.9'
services:
web:
image: nginx:latest
ports:
- "8080:80"
この例では、Nginxコンテナが作成され、ホストマシンの8080ポートがコンテナの80ポートにマッピングされます。ユーザーがhttp://localhost:8080にアクセスすると、Nginxコンテナ内のWebサイトにアクセスできます。
ポートのマッピングには、以下の構文を使用することができます。
- "ホストマシンのポート番号:コンテナのポート番号"
複数のポートをマッピングする場合は、以下のように記述します。
ports:
- "ホストマシンのポート番号1:コンテナのポート番号1"
- "ホストマシンのポート番号2:コンテナのポート番号2"
以上のように、「ports」セクションを使用することで、Docker Composeファイルでコンテナのポートをホストマシン上に公開できます。
Docker ComposeでWordpressを立ち上げてみよう
Docker Composeを使用してWordpressを立ち上げる方法を以下に示します:
-
フォルダを作成し、その中にDocker Composeファイル(
docker-compose.yml
)を作成します。 -
Docker Composeファイルを以下のように記述します:
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- db_data:/var/lib/mysql
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: password
volumes:
db_data:
- コマンドラインから、作成したフォルダに移動して次のコマンドを実行します:
docker-compose up -d
これにより、Wordpressアプリケーションがhttp://localhost
で利用可能になります。
注:上記の例では、MySQLのパスワードをpassword
に設定しています。このパスワードは実際の運用環境では変更する必要があります。また、ボリュームマウント(volumes
)により、MySQLのデータがホストマシン上に永続化されます。
Docker ComposeはDockerコンテナを管理するためのツールです。Docker Composeを使用することで、複数のDockerコンテナを一括で管理することができます。Docker Composeを使用するためには、事前にDocker Composeをインストールする必要があります。
docker composeコマンドの紹介
Docker Composeは以下のような主要なコマンドを提供します:
-
docker-compose up
– Docker Composeファイルに記述されたサービスを起動します。 -
docker-compose down
– Docker Composeファイルに記述されたサービスを停止します。 -
docker-compose ps
– Docker Composeファイルに記述されたサービスのステータスを確認します。 -
docker-compose logs
– Docker Composeファイルに記述されたサービスのログを表示します。 -
docker-compose exec
– Docker Composeファイルに記述されたサービス内でコマンドを実行します。 -
docker-compose build
– Docker Composeファイルに記述されたサービスのイメージを作成します。
これらはDocker Composeを使用する上で最も重要なコマンドです。詳細な使い方は、Docker Composeのドキュメントを参照してください。
※補足:Docker runで複数コンテナの連携の方法
Docker Compose を使うことで、複数の Docker コンテナーを連携させることができます。Docker Compose は、複数の Docker コンテナーを管理するツールで、設定ファイルに複数のコンテナー間の関係や、各コンテナーに対する環境変数、ポートマッピング、ボリュームマウントなどの設定を記述することができます。
Docker Compose 設定ファイルに複数のコンテナー間の関係を記述することで、複数の Docker コンテナーを連携させることができます。例えば、MySQL と PHP アプリケーションのコンテナーを連携させる場合、Docker Compose 設定ファイルは以下のようになります。
version: '3'
services:
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: password
web:
image: php:7.2-apache
ports:
- "80:80"
volumes:
- ./src:/var/www/html
depends_on:
- db
この設定ファイルにより、web
コンテナーは db
コンテナーが起動するのを待ってから起動します。また、web
コンテナーはホストの 80 番ポートとコンテナ内の 80 番ポートをマッピングし、ホストの ./src
ディレクトリをコンテナ内の /var/www/html
にマウントします。
設定ファイルを作成した後、docker-compose up
コマンドを実行することで、複数の Docker コンテナーを一度に起動することができます。
というわけで、今回は以上です。
引き続きで、徐々に発信していきます。
コメントや感想を受け付けています。ちょっとした感想でもいいので嬉しいです。
それでは、以上です。