" />
本ページはプロモーションが含まれています。

スポンサーリンク

Docker

Docker入門3 コンテナとホストのファイル共有

コンテナにターミナル接続するには?

ファイルを共有する準備として、送信先となるコンテナのパスを知っておく必要があります。
そのため、ターミナルでコンテナに接続して、ディレクトリ構造を調べておきます。

$ docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS                                   NAMES
81ad607d97ee   httpd     "httpd-foreground"   31 minutes ago   Up 31 minutes   0.0.0.0:8089->80/tcp, :::8089->80/tcp   apache1

$ docker exec -it apache1 /bin/bash
root@81ad607d97ee:/usr/local/apache2# pwd
/usr/local/apache2

このような流れで、コンテナにターミナル接続しましょう。

$ docker exec コマンドで接続します。
apache1 のところは、コンテナ名です。docker ps の最終列でコンテナ名を拾えます。
/bin/bash は使用するシェルのパスです。この指定が一般的です。

ホスト→コンテナへのファイル共有

ホスト~コンテナ間のファイルのコピーには、 docker cpコマンドを使用します。

構文

$ docker cp [ホストのパス] [コンテナ名]:[コンテナのパス]

$ docker cp C:/Users/edu/Documents/index.html apache1:/usr/local/apache2/htdocs

コンテナ→ホストへのファイル共有

構文はホスト→コンテナと同様です。コピー元とコピー先を入れ替えた形になります。

構文

$ docker cp [コンテナ名]:[コンテナのパス] [ホストのパス]

$ docker cp apache1:/usr/local/apache2/htdocs/index.html C:/Users/edu/Documents 

ホストのディスクをコンテナにマウントする

マウントの種類

ボリュームマウント

ホストのDocker Engineが管理している領域内にボリュームを作成し、ディスクとしてコンテナにマウントする方法。
使用法は手軽だが、領域内のボリュームはエクスプローラーから操作操作できないため、頻繁にファイル共有が発生する場合は不向きである。

手軽に扱えるため、Docker社はボリュームマウントを推奨している。

ボリュームマウントで扱うボリュームはdocker volumeコマンドで操作する。

バインドマウント

ホストのDocker Engine管理外のフォルダを、コンテナにマウントする方法。
ホストのフォルダを直接扱えるため、利便性は高い。

バインドマウントのやり方(直接マウント)

構文

-v [ホストのフォルダ]:[コンテナのディレクトリ]

docker run をするときに、上記の-vオプションでマウント元とマウント先のディレクトリを指定します。

$ docker run --name apache2 -dti -p 8090:80 -v C:\Users\xxx\Documents\apa_folder:/usr/local/apache2/htdocs httpd
45bdbad4cc83cde572b7a2e9cbc854884240b4b8a1efe332344745e4b62ed899

この後、コンテナでマウント先を見ると、ホストのフォルダが共有できていることが確認できます。

ボリュームマウントのやり方

docker volumeコマンドでDockerボリュームを操作します。

ボリュームを作成する・削除する

作成

$ docker volume create myvolume1
myvolume1

削除

$ docker volume rm myvolume1

作成済みのボリュームを一覧表示する

$ docker volume ls
DRIVER    VOLUME NAME
local     myvolume1

ボリュームをコンテナにマウントする

$ docker run --name myapache -dit -p 8089:80 -v myvolume1:/usr/local/apache2/httpd httpd

-v [マウントするボリューム名]:[マウント先のパス] の形式で指定します。

ボリュームの中身を見るには?

Dockerボリュームはマウントしたコンテナからしか見れません。
ホストのファイルシステムからボリュームを見ることはできません。

スポンサーリンク

-Docker