前書き
nginx.conf
とdefault.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.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
|