[Docker] 2.Dockerfile
Bài đăng này đã không được cập nhật trong 3 năm
1. Dockerfile
1.1 Dockerfile とは ?
Docker Imageを作成するためCommandを集めるファイルです。
Dockerfileにより作成されたDockerImageから自分のDockerContainerを作成できる。
=> Dockerfile中で どこから
+ 何が入ってる
ことを定義する。
1.2 Dockerfile 書き方 ?
デモ:
- DockerImage作成するため
Dockerfile
を書く。 webroot
フォルダーにjava app
、web app
等ソースコードを入れる。この例では一番簡単的なhtmlファイルを実行しBrowse上にメッセージを表示するだけです。start.sh
ファイルはContainerを起動する時に何のCommandが実行されると定義する。(例:mysql, nginx, redis起動)
GitHubにソースコードを掲げたので、ご参考ください。
Dockerfile中身
# どのOSを定義する
FROM ubuntu:16.04
# Dockerfileの著者(オプション)
MAINTAINER DuyKB<kieubaoduy1412@gmail.com>
# 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 $@
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-basicを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