Dockerでは-vオプションを利用することでコンテナ内の任意の場所にホストOSの任意のディレクトリを見せることができる。
ホストOSのボリュームの見せ方
sudo docker run -d -v ホストOSディレクトリ:コンテナでのマウント先ディレクトリ --name コンテナ名 -i -t イメージ名 /bin/bash
(前準備)楽に操作するために
dockerグループに操作したいユーザを所属させる。
毎回sudoうつのダルいので。
dockerグループへの追加
sudo usermod ユーザ名 -G 既存グループ名・ID,docker
コンテナにホストOSのディレクトリを見せる
ホストOSのボリュームをコンテナに見せる
docker run -d -p 80:80 -v /home/ubuntu/nodecode:/opt/nodecode --name nodejs002 -i -t node /bin/bash
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a21c33a1756c node "/bin/bash" 5 seconds ago Up 4 seconds 0.0.0.0:80->80/tcp nodejs002
ホストOSの/home/ubuntu/nodecodeをコンテナ内の/opt/nodecodeディレクトリにマウントしている。
今回はnodejsのコンテナを利用している。
/home/ubuntu/nodecodeディレクトリに以下のファイルを作成する。
test.js
var http = require('http');
var server = http.createServer();
server.on('request', doRequest);
server.listen(80);
console.log('Server running!');
function doRequest(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('Hello World\n');
res.end();
}
コンテナ内からの確認
docker runの記述内容から/opt/nodecodeの配下に
test.jsが作成されているはずなので、これを確認する。
コンテナ内でのtest.jsファイルの確認
docker exec -it nodejs002 /bin/bash
cd /opt/nodecode
ls -la
total 8
drwxrwxr-x 2 1000 1000 4096 Jul 15 15:39 .
drwxr-xr-x 3 root root 22 Jul 15 15:36 ..
-rw-rw-r-- 1 1000 1000 276 Jul 15 15:39 test.js
test.jsが存在することが確認できた。
先ほどのコンテナ内でnodejsを起動させ、test.jsの内容を実行する。
test.jsのコンテナ内での起動
node test.js
Server running!
起動させた後に、Dockerコンテナを実行している
VMのTCP80番ポートにアクセスする。
期待した通りの文字列(Hello World!)が帰ってきた。
まとめ
-vオプションを用いることでホストOS上のファイルをコンテナに見せることができた。
また、それを使ってアプリケーションを起動させることもできた。