まえがき
Docker で nginx の環境を構築したけど、そのバージョンのデフォルトの設定ファイルだけサクっと取り出したい時ってありますよね。
こういうニーズがあることは nginx の公式でも認知されていて、公式で下記の方法が紹介されています。
| 1
2
3
 | $ docker run --name tmp-nginx-container -d nginx
$ docker cp tmp-nginx-container:/etc/nginx/nginx.conf /host/path/nginx.conf
$ docker rm -f tmp-nginx-container
 | 
※公式
より抜粋
上記コマンドの処理の流れは下記となります。
- nginxのコンテナを実行
- nginx.confファイルをコンテナからホスト側にコピー
- nginxのコンテナを削除
こちらでも問題ないですが、サクッとワンライナーで取り出せるコマンドがあるといいなと思いちょっと考えてみました。
nginx のデフォルト設定ファイルだけを取り出すコマンド
| 1
 | docker run -it --rm -v $PWD:/host nginx:latest bash -c "cp /etc/nginx/nginx.conf /etc/nginx/conf.d/default.conf /host"
 | 
上記コマンドを実行するとnginxの最新バージョンのnginx.confとdefault.confがコマンドを実行したディレクトリにコピーされます。
imageのバージョン部分を書き換えるだけで各バージョンの設定ファイルを取得できるので、バージョン間の比較も簡単にできます。
.bashrc に関数を登録する
ワンライナーとはいえ上記コマンドは長くて使いにくいので、下記のように~/.bashrcに関数を登録しておくと便利です。
| 1
2
3
 | function getnginxconf() {
  docker run -it --rm -v $PWD:/host $1 bash -c "cp /etc/nginx/nginx.conf /etc/nginx/conf.d/default.conf /host"
}
 | 
nginx:latestの部分だけ$1に変更し、引数を指定するようにして下記のように使います。
getnginxconf nginx:latest
このコマンドを実行するだけで、実行したディレクトリにnginx.confとdefault.confがコピーされます。
コマンドの詳細を解説
以下コマンドのオプションについて解説します。
–rm
runコマンド終了時にコンテナを破棄するように指示するオプションです。
こちらを指定しないとrunコマンド終了時にもコンテナが残り続けてしまいます。
-v $PWD:/host
ホスト側のコマンド実行時のディレクトリをコンテナ側の/hostディレクトリにマウントしています。
$PWDとしているのは相対ディレクトリの./が使用できないためです。
nginx:latest
最新のnginxのimageを指定しています。
安定バージョンやバージョンを指定したい場合は下記のように書き換えて下さい。
nginx:stable
nginx:1.22.1
bash -c
cpコマンドを使用するためのシェルを指定します。
cオプションを付けると後に続く"“の中に任意のコマンドを記載することができます。
cp /etc/nginx/nginx.conf /etc/nginx/conf.d/default.conf /host
cpコマンドの実行部分です。
単純にnginx.confとdefault.confをマウント先のディレクトリにコピーしているだけです。
最後に
今回はnginxを例に解説しましたが、imageとコピー元のディレクトリを変更すればPHPやMySQLのimageでも設定ファイルだけをサクっと取り出すことができるのでぜひご活用ください。
実行環境
Windows11 の Linux 用 Windows サブシステム (WSL) で実行しました。
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 | ~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.4 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.4 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
~$ docker version
Client: Docker Engine - Community
 Cloud integration: v1.0.29
 Version:           20.10.21
 API version:       1.41
 Go version:        go1.18.7
 Git commit:        baeda1f
 Built:             Tue Oct 25 18:02:28 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true
Server: Docker Desktop
 Engine:
  Version:          20.10.21
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.7
  Git commit:       3056208
  Built:            Tue Oct 25 18:00:19 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.10
  GitCommit:        770bd0108c32f3fb5c73ae1264f7e503fe7b2661
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
 |