+2

[Docker] 2.Dockerfile

1. Dockerfile

1.1 Dockerfile とは ?

Docker Imageを作成するためCommandを集めるファイルです。
Dockerfileにより作成されたDockerImageから自分のDockerContainerを作成できる。

=> Dockerfile中で どこから + 何が入ってる ことを定義する。

1.2 Dockerfile 書き方 ?

デモ:

  • DockerImage作成するためDockerfileを書く。
  • webrootフォルダーにjava appweb app等ソースコードを入れる。この例では一番簡単的なhtmlファイルを実行しBrowse上にメッセージを表示するだけです。
  • start.shファイルはContainerを起動する時に何のCommandが実行されると定義する。(例:mysql, nginx, redis起動)

    GitHubにソースコードを掲げたので、ご参考ください。

Dockerfile中身

# どのOSを定義する
FROM ubuntu:16.04

# Dockerfileの著者(オプション)
MAINTAINER DuyKB<[email protected]>

# Ubuntu更新
RUN apt-get update

# nginxをインストール
RUN apt-get install -y nginx

# mysqlをインストール
RUN echo "mysql-server mysql-server/root_password password root" | debconf-set-selections \
    && echo "mysql-server mysql-server/root_password_again password root" | debconf-set-selections \
    && apt-get install -y mysql-server

# Hostのindex.htmlファイルをContainerにコピーする
COPY webroot/index.html /var/www/html

# CMDのフォルダー
WORKDIR /venv

# Host -> Containerにコピーする
COPY start.sh /venv

# DockerImageを作成する時に
RUN chmod a+x /venv/*

# CMD: DockerContainerを起動する時にどのCommandが実行されると定義する。
# でも、複数のCommandを実行したい場合にはENTRYPOINTを利用する。
# shファイルで複数のCommandを定義する。
ENTRYPOINT ["/venv/start.sh"]

# Containerがどのポートに関連付いていると定義する。
EXPOSE 80

start.sh中身

#!/bin/bash

service nginx start
service mysql start

exec [email protected]

1.3 Dockerfile 利用仕方

① DockerfileによりDockerImageを作成

sudo docker build -t <image_name> .



② 作成されたImageからContainerを作成

sudo docker run -v <forder_in_computer>:<forder_in_container> -p <port_in_computer>:<port_in_container> -it <image_name> /bin/bash

  • -v : HostからContainerまでマウントする
  • -p: HostのPortからContainerのPortに関連付ける
  • -it: Containerを起動し/bin/bashでTerminalを開く

例:

docker build -t docker-example .
docker run -p 9001:80 -it docker-example /bin/bash

Browser上

2. Dockerhub

2.1 Dockerhub とは ?

GithubのようにDockerのImageの保存・シャア場所です。
今までの例はローカルのみでビルドしているですが、DockerHubはサーバーにビルド出来るようにサポートする。

2.2 Dockerhub と GitHubを繋げる

  • docker-hub上にRepository新規作成しGithubのRepositoryに繋げるように設定する

ここまでで設定が終わり。Githubを何かPushがあれば自動的にDockerHubが変更されるようになった。

2.3 デモ

背景:

GitHubにindex.html修正しCommitした後でDockerHubにて自動的にImageをビルドすることを確認する。

① 修正前

docker pull kieubaoduy1412/github-docker
docker images
docker run -p 9001:80 -it kieubaoduy1412/github-docker /bin/bash

Browserを開く結果:



② ソースコード修正とコミット

Htmlファイル中身を修正



③ DockerHub確認

GithubのコミットをトリガーとしてDockerHubにて自動的にImageをビルドする



④ 修正後

DockerHubにて正常にビルドした後で再度ImageをPullし実行する

docker pull kieubaoduy1412/github-docker
docker images
docker run -p 9002:80 -it kieubaoduy1412/github-docker /bin/bash

Browserを開く結果:

参考資料

参考ソース


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.