Ground Sunlight

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

ユーザ用ツール

サイト用ツール


docker:20:basic

差分

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

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

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
docker:20:basic [2020/12/19 23:05]
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の利用]] 
  
 リンク リンク
行 287: 行 286:
 ==== バインドマウントの例 ==== ==== バインドマウントの例 ====
  
-ここではバインドマウントの例として、Apache コンテナの DocumentRoot をホスト側にマウントします。+バインドマウント(bind mounts)の例として、Apache コンテナのドキュメントルートをホスト側にマウントします。
  
- +まず、準備としてホスト側で ホームディレクトリ下に新しいディレクトリ(''htdocs'')を作成し、そこをマウント元にします。
->TODO+
  
 <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>
行 309: 行 305:
 </html> </html>
 </code> </code>
 +
 +今度は、apache の ''DocumentRoot'' を探すために、httpd コンテナを開始して bash を実行します:
  
 <code bash> <code bash>
行 314: 行 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>
行 327: 行 332:
 </code> </code>
  
-全般に --mount の方がわかりやすいものすが、記述は増えます。 両者の最大の違いは、-文法がオプション指定のすべてを 1 項目にとりまとめるものであるのに対して、--mount 文法はそれを 1 つずつ個別分けている点です。 以下に両フラグにおける文法を比較します。+  * ''-d'' --- コンテナをバックグラウンド実行 
 +  * ''-p'' --ポートフォワードの指定(左がホスト側:8080右がコンテナ側:80) 
 +  * ''-v'' --- ホスト側現在のカレントディレクトリ(''$(pwd)'')コンテナの ''/usr/local/apache2/htdocs'' バインドマウント
  
-はじめて利用する方は --mount を利用してください。 上級ユーザーは -v や --volume を用いるとに慣れているかもしれませんが、--mount を利用するように心がけてください。 --mount 方が簡単に利用することがきるとの調査もあります。 +このは、''-v'' フラグを使ってバインドマウントを行っています。習慣長らく Docker で使用されて来ましたが、最近は ''--mount'' 利用推奨されています。以下の例は、上の ''-v''フラグによる例と同一の結果になります。
- +
--v および --volume フラグは、長らく Docker の一部分として実現してきているため、その動作を今さら変更することはできません。 このことがつまり、-v と --mount の動作の違いの 1 つ になります。 +
- +
--v または --volume を使ってファイルやディレクトリをバインドマウントした際に、そのファイルやディレクトリが Docker ホスト上にまだ存在していなかった場合、-v はそのマウントエンドポイントを生成します。 場合に常にディレクトリとして生成されます。 +
- +
---mount を使ってファイルやディレクトリをバインドマウントした際に、そのファイルやディレクトリが Docker ホスト上に存在していなかった場合Docker ファイルやディレクトリを自動的に生成することはしません。 かわりにエラー出力されます。 +
- +
-以下の例は、上の -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.1608386710.txt.gz · 最終更新: 2020/12/19 23:05 by y2sunlight