ゴンの気まぐれなるままに
Docker

DockerでNginxのコンテナを作成

nginx

今回は既存のNginxコンテナを利用しないでAlpine Linuxを利用して一から作成します。

Dockerのインストールができていない方はこちらをご確認してください。

やる事

  • OSはAlpineを利用したコンテナイメージの作成
  • Nginxをインストールする

イメージ確認

まずはAlpineのイメージがあるか確認します。

$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE
 ・・・ 省略 
alpine latest 055936d39205 2 weeks ago 5.53MB
 ・・・ 省略

Alpineのイメージがない場合

無い場合は下記をコマンドを実行し取得します。

$ docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
e7c96db7181b: Pull complete 
Digest: sha256:769fddc7cc2f0a1c35abb2f91432e8beecf83916c421420e6a6da9f8975464b6
Status: Downloaded newer image for alpine:latest

Nginxのコンテナの作成

ここからはDockerfileを作る為に、Nginxをインストールします。

Dockerfileにインストール方法を記入しないといけないので、インストールの内容はメモしておきます。

まずは、コンテナをバックグランドで起動をします。

docker run -itd --name コンテナ名 コンテナイメージ:タグ名

オプションの-itdについては他のサイトを参考にしてください。

$ docker run -itd --name my-nginx alpine:latest

とりあえず起動しているか確認してみます。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
aa0249758cc7        alpine:latest       "/bin/sh"           4 minutes ago       Up 4 minutes                            my-nginx

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
aa0249758cc7        alpine:latest       "/bin/sh"           5 minutes ago       Up 5 minutes                            my-nginx

プロセスが起動しているのを確認できたので、ではコンテナの中に入ってみます。

$ docker exec -it my-php /bin/sh

Nginxをインストール

yumやapt-getの様なコマンドは無いです。

apkと言うパッケージマネージャがあるのでそれでインストールを行います。

検索search
インストールadd
アンインストールdel
アップデートupdate
ごみファイルを削除–no-cache
$ apk add --update --no-cache nginx

実行してみてエラーとか無かったのでイメージを作成します。

尚、今回インストールする項目は、必要そうなものを入れています。

Dockerfile作成

下記がDockerfileの内容になります。

FROM alpine:latest

RUN apk add --update --no-cache nginx

EXPOSE 80

ENTRYPOINT /usr/sbin/nginx -g "daemon off;" -c /etc/nginx/nginx.conf

EXPOSE 80でnginxのポートを設定。SSLについては今度行います。

あとはENTRYPOINTでdaemon offでコンテナでサービス起動する為に設定します。

$ docker build -t my-nginx:latest .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM alpine:latest
 ---> 055936d39205
Step 2/4 : RUN apk add --update --no-cache nginx
 ---> Running in 53347703c666
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/2) Installing pcre (8.42-r1)
(2/2) Installing nginx (1.14.2-r1)
Executing nginx-1.14.2-r1.pre-install
Executing busybox-1.29.3-r10.trigger
OK: 7 MiB in 16 packages
Removing intermediate container 53347703c666
 ---> 9d676fbf29b6
Step 3/4 : EXPOSE 80
 ---> Running in ec6cba85448b
Removing intermediate container ec6cba85448b
 ---> 8cda441a6c1b
Step 4/4 : ENTRYPOINT /usr/sbin/nginx -g "daemon off;" -c /etc/nginx/nginx.conf
 ---> Running in 5b41a5d79539
Removing intermediate container 5b41a5d79539
 ---> f88b9049e661
Successfully built f88b9049e661
Successfully tagged my-nginx:latest

とりあえず作成するのに成功したみたいなので、docker imagesでイメージが作成出来ているか確認してみます。

$ docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED              SIZE
my-nginx                                   latest              f88b9049e661        About a minute ago   6.97MB
・・・ 省略

まとめ

DockerでNginxのコンテナの作成を行いました。

Kubernetesで利用する為に色々省きましたが、設定とかについてkubernetesのConfigMapで設定するので次回に設定方法などを書きます。