【Docker】Docker ~ 基本編 / Dockerfile ~

■ はじめに

https://dk521123.hatenablog.com/entry/2020/04/24/160044

の続き。

今回は、Dockerfile のサンプルをいくつかあげておく。
また、以下の動画を見ながらやるといいかも。

https://dotinstall.com/lessons/basic_docker

目次

【1】Dockerfile
 1)主なインストラクション
 2)使用しているDocker コマンド
【2】サンプル
 例1)Hello World
 例2)nginx インストール
 例3)apacheインストール

【1】Dockerfile

1)主なインストラクション

インストラクション(命令) 用途
FROM ベースイメージの指定
MAINTAINER (非推奨) 作成者情報
LABEL バージョン情報などのラベル情報(メタデータ)
ENV 環境変数の指定
ARG 一時変数の指定
RUN コマンドの実行
CMD 実行コマンド
ADD File/Directory追加
COPY File/Directoryコピー
EXPOSE 指定したポート番号をコンテナが公開
VOLUME ボリュームのマウント
USER 実行ユーザ指定
WORKDIR 作業ディレクトリの指定

CMD

* 書き方は以下の表の通り。

https://docs.docker.jp/engine/reference/builder.html#cmd

# 記法 説明
1 CMD ["実行ファイル","パラメータ1","パラメータ2"] exec 形式。推奨方法
2 CMD コマンド パラメータ1 パラメータ2 シェル形式
3 CMD ["パラメータ1", "パラメータ2"] ENTRYPOINT 命令に対するデフォルトのパラメータとして扱う

2)使用しているDocker コマンド

* 詳細は、以下の関連記事を参照のこと。

Docker ~ 基本編 / dockerコマンド ~
https://dk521123.hatenablog.com/entry/2020/04/13/000000

# コマンド 説明 構文例
1 docker build Dockerイメージ作成 docker build -t {イメージ名}:{タグ名} {Dockerfileのあるディレクトリ}
2 docker images Dockerイメージ一覧(イメージID)を確認 docker images
3 docker run Dockerコンテナ起動 docker run {イメージ名}
4 docker ps コンテナの確認 docker ps(動いているコンテナ) / docker ps -a(停止しているコンテナ)
5 docker stop Dockerコンテナ停止 docker stop {イメージ名}
6 docker rm Dockerコンテナの削除 docker rm {コンテナID}
7 docker rmi Dockerイメージの削除 docker rmi {イメージID}
8 docker login Docker Hubへログイン docker login
9 docker puch DockerイメージのPush docker puch {イメージ名}

【3】サンプル

例1:Hello World

以下の手順で行う。
~~~~~
1)Dockerfile作成
2)Dockerイメージ作成
3)Dockerイメージ一覧を確認
4)Dockerコンテナ起動
~~~~~

1)Dockerfile作成

vi Dockerfile
# 修正内容は、以下「Dockerfile」を参照

Dockerfile

FROM centos
MAINTAINER SampleAuth <sample@demo.com>

# RUN : Buildするときに実行
RUN echo "Hello, World!"

# CMD : runするときに実行
CMD ["echo", "Hello, World!!"]

2)Dockerイメージ作成

# docker buildコマンドで、Dockerイメージ作成
# docker build -t {イメージ名} {Dockerfileのあるディレクトリ}
sudo docker build -t admin/echohello .

Sending build context to Docker daemon  73.2 MB
Step 1/4 : FROM centos
 ---> e934aafc2206
Step 2/4 : MAINTAINER SampleAuth <sample@demo.com>
 ---> Running in ad5148834bdd
 ---> adce8ebe2485
Removing intermediate container ad5148834bdd
Step 3/4 : RUN echo "Hello, World!"
 ---> Running in a48fde0a07b3

Hello, World!
 ---> 18cb7bdc2a80
Removing intermediate container a48fde0a07b3
Step 4/4 : CMD echo Hello, World!!
 ---> Running in 6281dade472f
 ---> 5eb35baf720b
Removing intermediate container 6281dade472f
Successfully built 5eb35baf720b

3)Dockerイメージ一覧を確認

# docker imagesコマンドで、Dockerイメージ一覧を確認
sudo docker images

4)Dockerコンテナ起動

# docker runコマンド で、Dockerコンテナ起動
# docker run {イメージ名}
sudo docker run admin/echohello

# Dockerファイルに記載されていた echo が実行された
Hello, World!!

例2:nginx インストール

1)Dockerfile作成

vi Dockerfile
# 修正内容は、以下「Dockerfile」を参照

Dockerfile

FROM ubuntu
LABEL sample-docker <xxxx@gmail.com>
RUN apt-get update
RUN apt-get install -y nginx
ADD index.html /usr/share/nginx/html/

2)コンテンツ作成

# index.html を作成
echo 'Hello!' > index.html

3)Dockerイメージ作成

# docker buildコマンドは、Dockerイメージ作成
# docker build -t {イメージ名}:{タグ名} {Dockerfileのあるディレクトリ}
docker build -t hello/nginx:1.0 .

4)Dockerイメージ一覧を確認

# docker imagesコマンド で、Dockerイメージ一覧を確認
docker images

5)Dockerコンテナ起動

# docker runコマンド で、Dockerコンテナ起動
docker run -d -p 80:80 --name hello-nginx hello/nginx:1.0 /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

# 確認
curl localhost

6)動いているコンテナの確認

# docker ps コマンドで、動いているコンテナの確認
docker ps

7)Dockerコンテナ停止

# docker stopコマンドで、Dockerコンテナ停止
# docker stop {イメージ名}
docker stop hello-nginx

8)停止しているコンテナの確認

# docker ps -a コマンドで、停止しているコンテナの確認
docker ps -a

9)コンテナの削除

# docker rm コマンドで、コンテナの削除
# docker rm {コンテナID}
docker rm aa86b93fb393

10)イメージの削除

# イメージIDを確認
docker images

# docker rmi コマンドで、イメージの削除
# docker rmi {イメージID}
docker rmi 56d4dc831403

# 削除確認
docker images

例3:apacheインストール

1)Dockerfile作成

vi Dockerfile
# 修正内容は、以下「Dockerfile」を参照

Dockerfile

FROM centos
MAINTAINER SampleAuth <sample@demo.com>

# RUN : Buildするときに実行
RUN yum install -y httpd
ADD ./index.html /var/www/html/
# ポートをあける
EXPOSE 80

# CMD : runするときに実行
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

2)コンテンツ作成

vi index.html
# 修正内容は、以下「index.html」を参照

index.html

<html>
<body>Hello World...</body>
</html>

3)Dockerイメージ作成

# docker buildコマンドで、Dockerイメージ作成
# docker build -t {イメージ名} {Dockerfileのあるディレクトリ}
sudo docker build -t  admin/apache .

4)Dockerコンテナ起動

# docker runコマンド で、Dockerコンテナ起動
# 実行(サーバが立ち上げる)
sudo docker run -p 8080:80 -d admin/apache

# 確認
curl http://localhost:8080/

<html>
<body>Hello World...</body>
</html>

5)Docker Hub にアカウント作成

imageのpushするために
Docker Hub にアカウント作成しておく必要あり 

https://hub.docker.com/

6)ログイン

sudo docker login

7)push

# push (Docker Hubで確認)
# docker puch {イメージ名}
sudo docker puch admin/apache

参考文献

https://www.atmarkit.co.jp/ait/articles/1407/08/news031.html
http://www.tohoho-web.com/docker/dockerfile.html
https://blog.codecamp.jp/docker-file-how-to
https://www.wakuwakubank.com/posts/270-docker-build-image/

関連記事

Docker ~ Windows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2017/09/23/235818
Docker ~ Linux / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2018/04/10/234030
Docker ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/01/14/102719
Docker ~ 基本編 / docker-compose ~
https://dk521123.hatenablog.com/entry/2020/04/11/000000
Docker ~ 基本編 / dockerコマンド ~
https://dk521123.hatenablog.com/entry/2020/04/13/000000
Docker ~ Data Volume について ~
https://dk521123.hatenablog.com/entry/2018/09/08/222100
Docker によるトラブルシューティング
https://dk521123.hatenablog.com/entry/2017/09/24/162257