distroless ベースの Nginx コンテナイメージを利用する
distroless ベースで Nginx の Docker コンテナである nginx-docker を作成したのでメモしておきます。
イメージサイズ
イメージサイズは 33.5MB でした。
| # docker images sig9/nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
sig9/nginx latest eaa3878ec1ef 16 minutes ago 33.5MB
|
尚、現時点 Nginx 公式の最新イメージは 141MB でした。
| # docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ea335eea17ab 10 days ago 141MB
|
使い方
ボリュームをマウントせずに起動する
ボリュームをマウントせずに起動する場合は以下のように実行します。 LB の Health Check 先として「とりあえず TCP/80 に応答すれば良い」といったケースで利用出来ると思います。
| docker run --detach --tty --publish 8080:80 --name nginx sig9/nginx
|
ボリュームをマウントして起動する
ホストのボリュームをマウントして起動する場合は以下のように実行します。 指定したコンテンツが表示されることを確認したい場合に利用します。 docker run
でボリュームをマウントする場合は相対パス指定が出来なかったと思いますので、${PWD}
でパスを取得しています。
| docker run --detach --tty --publish 8080:80 --volume ${PWD}/html:/usr/share/nginx/html --name nginx sig9/nginx
|
参考
現時点の Dockerfile は以下の内容で作成しました。
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 | FROM nginx:1.20.2 AS builder
# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ARG TIME_ZONE="Asia/Tokyo"
RUN mkdir -p /opt/var/cache/nginx && \
cp -a --parents /usr/lib/nginx /opt && \
cp -a --parents /usr/share/nginx /opt && \
cp -a --parents /var/log/nginx /opt && \
cp -aL --parents /var/run /opt && \
cp -a --parents /etc/nginx /opt && \
cp -a --parents /etc/passwd /opt && \
cp -a --parents /etc/group /opt && \
cp -a --parents /usr/sbin/nginx /opt && \
cp -a --parents /usr/sbin/nginx-debug /opt && \
cp -a --parents /lib/x86_64-linux-gnu/ld-* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libpcre.so.* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libc* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libdl* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libpthread* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libcrypt* /opt && \
cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \
cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \
cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtime
FROM gcr.io/distroless/base-debian11
COPY --from=builder /opt /
EXPOSE 80 443
ENTRYPOINT ["nginx", "-g", "daemon off;"]
|