Ground Sunlight

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

ユーザ用ツール

サイト用ツール


docker:20:basic

差分

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

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

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
docker:20:basic [2020/12/19 22:48]
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>
 $ docker run -d -p 8080:80 -v $(pwd):/usr/local/apache2/htdocs httpd $ docker run -d -p 8080:80 -v $(pwd):/usr/local/apache2/htdocs httpd
 </code> </code>
 +
 +  * ''-d'' --- コンテナをバックグラウンドで実行
 +  * ''-p'' --- ポートフォワードの指定(左がホスト側:8080、右がコンテナ側:80)
 +  * ''-v'' --- ホスト側の現在のカレントディレクトリ(''$(pwd)'')をコンテナの ''/usr/local/apache2/htdocs'' にバインドマウント
 +
 +この例では、''-v'' フラグを使ってバインドマウントを行っています。この習慣は長らく Docker で使用されて来ましたが、最近は ''--mount'' の利用が推奨されています。以下の例は、上の ''-v''フラグによる例と同一の結果になります。
  
 <code bash> <code bash>
-docker run -d -p 8081: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.1608385736.txt.gz · 最終更新: 2020/12/19 22:48 by y2sunlight