実践記録10
遂に実践記録も10記事目!二桁に到達しました!!
最新技術にはまだまだ追いつけていませんが、順調に経験を積めていると自分では思っています。
もうしばらくは広く浅く様々な技術に触れていきたいと思います。
実践記録9でdockerコンテナを使ってみたので、
今回は少し発展させてBasic認証をかけたnginxコンテナイメージを自分で作成してみたいと思います。
docker稼働環境
virtualbox、及びVagrantを使用して環境を構成しています。
使用しているVagrantfileは以下の通りです。
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 | Vagrant.configure("2") do |config| # boxの指定 config.vm.box = "centos/7" # DNS設定 config.vm.provision "shell", inline: <<-'SHELL' sed -i -e '/^\[main\]$/a dns=none' /etc/NetworkManager/NetworkManager.conf systemctl restart NetworkManager wait echo -e 'nameserver 8.8.8.8\nnameserver 8.8.4.4' >> /etc/resolv.conf SHELL # yumタイムアウト設定 config.vm.provision "shell", inline: <<-'SHELL' echo -e 'timeout=60' >> /etc/yum.conf SHELL # 共通パッケージインストール config.vm.provision "shell", inline: <<-'SHELL' yum -y install epel-release SHELL # 実験用サーバの作成 config.vm.define :pra do |server| server.vm.hostname = "pra" server.vm.network "private_network", ip: "192.168.33.20" server.vm.synced_folder "./sync", "/vagrant_data",type:"virtualbox" server.vm.provision "shell", inline: <<-'SHELL' yum -y install yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum -y install docker-ce docker-ce-cli containerd.io systemctl start docker systemctl enable docker usermod -aG docker vagrant SHELL end end |
NginxでBasic認証付きコンテナを作成する
以下の様なdockerfileを作成しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #ベースOSの指定 FROM centos:7 #nginxインストール準備 COPY nginx.repo /etc/yum.repos.d/nginx.repo #ソフトウェアインストール RUN yum -y install nginx RUN yum -y install openssl #Basic認証設定 COPY default.conf /etc/nginx/conf.d/default.conf RUN echo "dockerweb:$(openssl passwd -apr1 dockerpassword)" >> /etc/nginx/.htpasswd #コンテナのポート公開 EXPOSE 80 #コンテナ実行時コマンド CMD ["/usr/sbin/nginx", "-g", "daemon off;"] |
使用しているのは以下のコマンドです。
RUN:コマンドを実行
COPY:ホストからコンテナへファイルをコピー
EXPOSE:コンテナのポートを公開
CMD:コンテナ起動時に実行されるコマンド
コマンドについての詳しい説明は以下の公式ドキュメントを参照してください。
まず、以下のnginx公式ドキュメントの手順に従って
nginxをインストールする為のリポジトリ登録を行います。
1 | COPY nginx.repo /etc/yum.repos.d/nginx.repo |
nginx.repoの中身は以下の様に定義しています。
1 2 3 4 5 6 7 | [nginx-stable] name = nginxrepo baseurl = http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck = 1 enabled = 1 gpgkey = https://nginx.org/keys/nginx_signing.key module_hotfixes = true |
上記の落とし穴に気を付けてください。。(私はこれにはまりました)
続いてRUNコマンドを用いてソフトウェアのインストールです。
パスワードを暗号化する為に今回はopensslもインストールします。
その後Basic認証の設定を行います。
1 2 | COPY default.conf /etc/nginx/conf.d/default.conf RUN echo "dockerweb:$(openssl passwd -apr1 dockerpassword)" >> /etc/nginx/.htpasswd |
dockerwebの部分はBasic認証で使用するユーザー名、dockerpasswordは任意のパスワードを指定してください。
default.confは以下の様に定義を追加しています。
1 2 3 4 5 6 7 8 9 10 11 12 | server { listen 80; server_name localhost; auth_basic "Please enter ID and password"; auth_basic_user_file /etc/nginx/.htpasswd; location / { root /usr/share/nginx/html; index index.html index.htm; } } |
/etc/nginx/conf.d/default.confを編集しなければならない場合等、差があるようです。
今回はnginx.confに定義を入れても設定が反映されず、default.confに設定を入れることで設定が反映されました。
※ポートは開放しただけで、ホスト側のポートとのマッピングはコンテナ起動時に行うことになります。
1 | CMD ["/usr/sbin/nginx", "-g", "daemon off;"] |
コンテナはフォアグラウンドで実行されていなければ、プロセスが終了してしまいますが、
nginxはデフォルトでバックグラウンドで実行する様になっているので上記コマンドを実行することでフォアグラウンドで実行するよう(コンテナが消えないよう)にします。
この「フォアグラウンド」という言葉ですが、コンテナの中での話であり、
Dockerホストから見てコンテナをバックグラウンドで実行することは可能ですので混同しないようにしましょう。
ここまできたらこのdockerfileを用いて以下のコマンドでimageファイルを作成します。
このスピードがdockerの魅力の一つなんでしょうね。
実践記録11前回はDockerを使ってBasic認証機能付きのNginxコンテナを作成してみました。今回は少し拡張して、Nginx+PHPの実行環境をDocker-composeをインストールして作ってみたいと思います。実施環境[…]
コメントを書く