概要
Dockerを使ったローカル環境構築をするにあたって、nginxやapacheなどサーバーの設定ファイルをいじりたい場合があります。
Dockerの基本思想は使い捨てなので、こういった設定ファイルはホスト側で持っておいてコンテナにマウントして使えるようにしておくといいですね。
というわけで早速取り出してみましょう。
準備
ディレクトリ構成は以下のようにします。
docker-sample
├── nginx
└── apache
confの取り出し
nginxのdefault.confを取り出す
手順は
- nginxのコンテナを立ち上げてコンテナに入る
- nginxコンテナ内でdefault.confをマウントポイントにコピー
これだけです。
nginxのdefault.confファイルは/etc/nginx/conf.d/default.conf
にあります。
まず手順1では以下のコマンドを実行します。
docker run --rm -v /$PWD/Desktop/docker-sample/nginx:/tmp -it nginx bin/bash
これでnginxのコンテナに入った状態になると思います。
続いて手順2で以下のコマンドを実行します。
cp /etc/nginx/conf.d/default.conf /tmp/
これでマウントしているdocker-sample/nginx
下にdefault.conf
が出てきます。
コンテナは以下で終了させましょう。
exit
少し解説
一応、基本形を見ておきます。
docker run [オプション] [イメージ名] [コマンド] [引数]
-
--rm
[オプション]
コンテナ終了時に自動的にコンテナを削除するコマンドです。
今回はconfファイルを取り出すためだけなので取り出した後は用済みということで削除します。 -
-v ~/Desktop/docker-sample/nginx:/tmp
[オプション]
マウントするコマンドです。
-v ホスト側ディレクトリ:コンテナ側ディレクトリ
これでホスト側の/Desktop/docker-sample/nginx
の中身が
コンテナ側の/tmp
にマウントされた状態になります。 -
it
[オプション]
コンテナに入ってシェルコマンドを使うための標準入力と標準出力です。
手順2でコピーコマンドを使うのに必要ということですね。 -
nginx
[イメージ名]
nginxのイメージですね。
イメージがなければ勝手にDocker Hubからpullしてイメージを作ってくれます。 -
/bin/bash
[コマンド]
コンテナ内を操作するのにbashを使うためのコマンドです。
apacheのhttpd.confを取り出す
手順は
- apacheのコンテナを立ち上げてコンテナに入る
- apacheコンテナ内でhttpd.confをマウントポイントにコピー
nginxのときと同じですね。
apacheのhttpd.confファイルは/usr/local/apache2/conf/httpd.conf
にあります。
というわけで先と同じように
docker run --rm -v ~/Desktop/docker-sample/apache:/tmp -it httpd /bin/bash
// httpdコンテナに入って
cp /usr/local/apache2/conf/httpd.conf /tmp/
// コピーできたら終了
exit
これで以下のようなディレクトリ構成になったはずです。
docker-sample
├── nginx
│ └── default.conf
└── apache
└── httpd.conf
「ネットに転がってるファイルをコピペしてくりゃいいだけじゃん」
書いててそんな気もしました笑
ただこれはconfに限らず特定のファイル・ディレクトリだけをマウントしたいとか
そういうことにも使えるのでDockerに慣れる意味でもよいかと思います。