こんにちは、サーバーワークス新人エンジニアの松井です。
みなさんdockerfileを自分で作成して実行してますか?
今回はEC2でdockerhubからnginxのイメージを引っ張ってこれば速攻でコンテナ作成できるものをあえてEC2とdockerHubを使わずにvagrant+virtualbox+dockerを使ってscratchイメージからnginxコンテナを立ち上げてローカルホストで接続してみます。
dockerhubにはない個別の設定を入れたい時にdockerfileを自分で作成しなければならない場面があると思うのでその参考になればと思います。
vagrant+virtualboxのインストールに関してはこちらを参考にしてください。
https://kitsune-programming.com/linux-environment
まずは、vagrantfileを編集します。今回はOSにCentOS7を使います。
vagrantfileを編集後vagrantを起動しログイン(私の環境で8080が埋まっていたので今回は8088となっています)
vagrantfile
Vagrant.configure("2") do |config| # The most common configuration options are documented and commented below. # For a complete reference, please see the online documentation at # https://docs.vagrantup.com. # Every Vagrant development environment requires a box. You can search for # boxes at https://vagrantcloud.com/search. config.vm.box = "centos/7"
# Create a forwarded port mapping which allows access to a specific port # within the machine from a port on the host machine and only allow access # via 127.0.0.1 to disable public access config.vm.network "forwarded_port", guest: 80, host: 8088, host_ip: "127.0.0.1" # Create a private network, which allows host-only access to the machine # using a specific IP. config.vm.network "private_network", ip: "192.168.33.10"
$ vagrant up $ vagrant ssh
次に、dockerをCentos7にインストールします。以下のリンクを参考にしてください。
https://qiita.com/inakadegaebal/items/be9fecce813cebec5986
インストールできたらscratchという何も情報が入っていないイメージでnginxコンテナ用のdockerfileを作成します。
dockerfile
FROM scratch ADD ubuntu-base-16.04.3-base-amd64.tar.gz / RUN apt-get update RUN apt-get install -y curl # install nginx RUN touch /etc/apt/sources.list.d/nginx.list RUN echo "deb http://nginx.org/packages/ubuntu/ precise nginx" >> /etc/apt/sources.list.d/nginx.list RUN echo "deb-src http://nginx.org/packages/ubuntu/ precise nginx" >> /etc/apt/sources.list.d/nginx.list RUN curl http://nginx.org/keys/nginx_signing.key | apt-key add - RUN apt-get update RUN apt-get install -y nginx # set working directory WORKDIR /root # Port EXPOSE 22 80 # change default html file of nginx COPY ./html /usr/share/nginx/html
dockerfileのあるディレクトリでdockerイメージを生成
$ sudo docker build -t nginx-test .
イメージを確認
$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx-test latest 2b29244c440a 2 weeks ago 445MB
Docker Run
$ sudo docker run -it -p 80:80 --name nginx-container nginx-test:latest /bin/bash
コンテナ内でnginx起動
root@5b4b3edd3d27:~# service nginx start
ブラウザーでhttp://localhost:8088にアクセスしてみて以下の画面が表示されれば成功です。
今回はローカル環境で表示させるために8088で接続させてみましたが、80番でアクセスさせて複数のコンテナにアクセスを分散させたいときは、80:xxxxで各コンテナにポート番号を割り振ればアクセスを分散できます。
ありがとうございました。
↓参考ブログ
https://qiita.com/____easy/items/cd2b32c5f1d5ff77b210
https://blog.amedama.jp/entry/2018/02/04/034707