【Docker】 Docker ~ 基本編 / Dockerfile ~

■ はじめに

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

の続き。

今回は、Dockerfile に関して、もう少し深堀りする。
また、以下の動画を見ながらやるといいかも。

https://dotinstall.com/lessons/basic_docker

目次

主なコードリスト
例1)Hello World
例2)nginx インストール
例3)apacheインストール

■ 主なコードリスト

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

■ 例1)Hello World

コマンド

【1】Dockerfile作成

vi Dockerfile
# 修正内容は、以下【Dockerfile】を参照

【2】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 imagesコマンド:Dockerイメージ一覧を確認

sudo docker images

【4】docker runコマンド:Dockerコンテナ起動

sudo docker run admin/echohello

Hello, World!!

Dockerfile

FROM centos
MAINTAINER SampleAuth <sample@demo.com>

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

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

■ 例2)nginx インストール

コマンド

【1】Dockerfile作成

vi Dockerfile
# 修正内容は、以下【Dockerfile】を参照

【2】コンテンツ作成

echo 'Hello!' > index.html

【3】docker buildコマンド:Dockerイメージ作成

# docker build -t {イメージ名}:{タグ名} {Dockerfileのあるディレクトリ}
docker build -t hello/nginx:1.0 .

【4】docker imagesコマンド:Dockerイメージ一覧を確認

docker images

【5】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 stopコマンド:Dockerコンテナ停止

docker stop hello-nginx

【8】docker ps -a コマンド:停止しているコンテナの確認

docker ps -a

【9】docker rm コマンド:コンテナの削除

# docker rm [コンテナID]
docker rm aa86b93fb393

【10】docker rmi コマンド:イメージの削除

# イメージIDを確認
docker images

# docker rmi [イメージID]
docker rmi 56d4dc831403

# 削除確認
docker images

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/

■ 例3)apacheインストール

コマンド

【1】Dockerfile作成

vi Dockerfile
# 修正内容は、以下【Dockerfile】を参照

【2】コンテンツ作成

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

【3】docker buildコマンド:Dockerイメージ作成

# docker build -t {イメージ名} {Dockerfileのあるディレクトリ}
sudo docker build -t  admin/apache .

【4】docker runコマンド:Dockerコンテナ起動

# 実行(サーバが立ち上げる)
sudo docker run -p 8080:80 -d admin/apache

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

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

 【5】imageのpush

Docker Hub にアカウント作成しておく必要あり 
https://hub.docker.com/

【6】ログイン

sudo docker login

【7】push

# push (Docker Hubで確認)
sudo docker puch admin/apache

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"]

index.html

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

参考文献

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 ~ 基本編 / 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