【Docker】nginxの任意のバージョンのデフォルト設定ファイルだけ取り出すコマンドを考える

JavaScriptを有効にしてください

前書き

nginx.confdefault.confが欲しいけどコンテナを残さずにサクっと設定ファイルだけ取り出したい。

使用したい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.confdefault.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.confdefault.confがコピーされます。

コマンドの詳細を解説

以下コマンドのオプションについて解説します。

–rm

runコマンド終了時にコンテナを破棄するように指示するオプションです。
こちらを指定しないとrunコマンド終了時にもコンテナが残り続けてしまいます。

-v $PWD:/host

ホスト側のコマンド実行時のディレクトリをコンテナ側の/hostディレクトリにマウントしています。
$PWDとしているのは相対ディレクトリの./が使用できないためです。

nginx:latest

最新のnginximageを指定しています。
安定バージョンやバージョンを指定したい場合は下記のように書き換えて下さい。
nginx:stable
nginx:1.22.1

bash -c

cpコマンドを使用するためのシェルを指定します。
cオプションを付けると後に続く"“の中に任意のコマンドを記載することができます。

cp /etc/nginx/nginx.conf /etc/nginx/conf.d/default.conf /host

cpコマンドの実行部分です。
単純にnginx.confdefault.confをマウント先のディレクトリにコピーしているだけです。

最後に

今回はnginxを例に解説しましたが、imageとコピー元のディレクトリを変更すればPHPMySQLimageでも設定ファイルだけをサクっと取り出すことができるのでぜひご活用ください。

実行環境

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

スポンサーリンク

共有

もふもふ
著者
もふもふ
プログラマ。汎用系→ゲームエンジニア→Webエンジニア→QAエンジニア