vagrant+virtualbox+dockerを使ってscratchイメージからnginxコンテナを立ち上げ

記事タイトルとURLをコピーする

こんにちは、サーバーワークス新人エンジニアの松井です。

みなさん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