Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


docker:20:basic

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
docker:20:basic [2020/12/19 22:53]
y2sunlight [バインドマウントの利用]
docker:20:basic [2020/12/23 22:18] (現在)
y2sunlight [Dcoker コンテナの基本的な利用方法(Run)]
行 1: 行 1:
-====== Dcoker コンテナの基本的な利用方法 ======+====== Dcoker コンテナの基本的な利用方法(Run) ======
 Docker 20.10.1 Docker 20.10.1
  
行 9: 行 9:
  
   * [[wsl2:ubuntu:docker|WSL2/Ubuntu に Docker をインストールする]]   * [[wsl2:ubuntu:docker|WSL2/Ubuntu に Docker をインストールする]]
-  * Dcoker コンテナの基本的な利用方法+  * Dcoker コンテナの基本的な利用方法(Run)
   * [[docker:20:build|Docker コンテナイメージの作成(Bulid)]]   * [[docker:20:build|Docker コンテナイメージの作成(Bulid)]]
-  * [[docker:20:hub|DockerHubの利用]] 
  
 リンク リンク
行 279: 行 278:
 ===== バインドマウントの利用 ===== ===== バインドマウントの利用 =====
  
-バインドマウントとは、ホストマシン上のファイルやディレクトリをコンテナー内にマウントする機能です。そのファイルやディレクトリは、ホストマシン上の絶対パスにより参照できます。バインドマウントは非常に性能の良いものですが、ホストマシンのファイルシステムに依存するものとなります。新たに Docker アプリケーションを開発する場合は、バインドマウントにかわって 名前つき[[https://matsuand.github.io/docs.docker.jp.onthefly/storage/volumes/|ボリューム]]の利用を考えるのも良いかもしれません。+==== バインドマウントとは ====
  
 +[[https://matsuand.github.io/docs.docker.jp.onthefly/storage/bind-mounts/|バインドマウント]]とは、ホストマシン上のファイルやディレクトリをコンテナー内にマウントする機能です。そのファイルやディレクトリは、ホストマシン上の絶対パスにより参照できます。バインドマウントは非常に性能の良いものですが、ホストマシンのファイルシステムに依存するものとなります。新たに Docker アプリケーションを開発する場合は、バインドマウントにかわって 名前つき[[https://matsuand.github.io/docs.docker.jp.onthefly/storage/volumes/|ボリューム]]の利用を考えるのも良いかもしれません。
 +
 +\\
 +
 +==== バインドマウントの例 ====
 +
 +バインドマウント(bind mounts)の例として、Apache コンテナのドキュメントルートをホスト側にマウントします。
 +
 +まず、準備としてホスト側で ホームディレクトリ下に新しいディレクトリ(''htdocs'')を作成し、そこをマウント元にします。
  
 <code bash> <code bash>
 $ cd ~ $ cd ~
-$ mkdir htdocs  +$ mkdir htdocs 
-$ cd htdocs +$ cd htdocs
 </code> </code>
  
-<code bash> +新しいディレクトリ(''~/htdocs'')に移動して、''index.html'' を作成します:
-$ vi index.html +
-</code>+
  
-<code html>+<code html index.html>
 <html> <html>
 <body> <body>
行 299: 行 305:
 </html> </html>
 </code> </code>
 +
 +今度は、apache の ''DocumentRoot'' を探すために、httpd コンテナを開始して bash を実行します:
  
 <code bash> <code bash>
行 304: 行 312:
 </code> </code>
  
-<code bash>+  * ''-i'' --- コンテナの STDIN にアタッチ 
 +  * ''-t'' --- 疑似ターミナルの割り当て 
 + 
 +コンテナ内で ''httpd.conf'' から ''DocumentRoot'' の設定を検索します: 
 + 
 +<code sh>
 # cat /usr/local/apache2/conf/httpd.conf|grep "^DocumentRoot" # cat /usr/local/apache2/conf/httpd.conf|grep "^DocumentRoot"
 DocumentRoot "/usr/local/apache2/htdocs" DocumentRoot "/usr/local/apache2/htdocs"
 </code> </code>
  
-<code bash> +コンテナ内での操作が終了したら ''exit'' で終了します。 
-exit + 
-</code>+=== Apacheコンテナの起動 === 
 + 
 +Apache のドキュメントルート( ''/usr/local/apache2/htdocs'' )をホスト側の( ''~/htdocs'' )にマウントしてコンテナを開始します(ディレクトリは ''~/htdocs'' で作業しているものをします):
  
 <code bash> <code bash>
行 317: 行 332:
 </code> </code>
  
-全般に --mount の方がわかりやすいものですが、記述は増えます。 両者の最大の違いは、-v の文法がオプショ指定のすべてを 1 項目にとりまとめるものあるのに対して、--mount の文法はそれを 1 つずつ個別に分けている点です。 以下に両フラグにおける文法を比較します。 +  * ''-d'' --- コテナバックグラウンド実行 
- +  * ''-p'' --- トフォワドの指定(左ホスト側:8080コンテナ側:80) 
-はじめて利用する方は --mount を利用してください。 上級ユは -v や --volume を用いることに慣れているかもしれませんが、--mount を利用するように心けてください。 --mount の方が簡単に利用することができるとの調査もあります。 +  * ''-v'' --- ホスト側の現カレントディレクトリ(''$(pwd)'')コンテナの ''/usr/local/apache2/htdocs''バインドマウント
- +
--v および --volume フラグは、長らく Docker 一部分として実してきているため、そ動作を今さら変更することはできません。 このことがつまり、-v と --mount の動作の違いの 1 つ になります。 +
- +
--v または --volume を使ってファイルやディレクトリをバインドマウントした際に、そのファイルやディレクトリが Docker ホスト上にまだ存在していなかった場合、-v はそのマウントエンドポイントを生成します。 その場合には常にディレクトリとして生成されます。+
  
---mount を使ってファイルやディレクトリをバインドマウントした際に、そファイルやディレクトリが Docker ホスト上に存在しいなかっ場合Docker ファイルやディレクトリを自動的に生成することはしません。 かわりにエラー出力されます。 +この例では、''-v'' フラグを使ってバインドマウントを行っています。こ習慣は長らく Docker で使用され来まし最近は ''--mount'' 利用推奨されています。以下の例は、上の ''-v''フラグによる例と同一の結果になります。
- +
-以下の例は、上の -v による例と同一の結果になります。+
  
 <code bash> <code bash>
 $ docker run -d -p 8080:80 --mount type=bind,source=$(pwd),target=/usr/local/apache2/htdocs httpd $ docker run -d -p 8080:80 --mount type=bind,source=$(pwd),target=/usr/local/apache2/htdocs httpd
 </code> </code>
 +
 +両者の違いは次の通りです。
 +  * ''-v''フラグを使ってファイルやディレクトリをバインドマウントした際に、それがホスト上に存在していなかった場合、そのマウントエンドポイントが常にディレクトリとして生成されます。
 +  * ''--mount'' を使ってバインドマウントした時は、それが存在していなかった場合、ディレクトリの自動生成は発生せず、エラーが出力されます。
  
 \\ \\
  
docker/20/basic.1608385992.txt.gz · 最終更新: 2020/12/19 22:53 by y2sunlight