[Docker] Dockerfileと.dockerignore

Dockerfileはイメージを作成するための手順書(設計書)

### 開発フロー
1. 既存の開発環境を整える
2. 開発環境上でコードを書いて動作検証
3. 成果物ができたらリリース準備
4. 新規に本番環境をセットアップするか、既存の本番環境に変更を加える
5. 開発成果物を本番環境に移行し動作させる
6. 機能更新やアップデートが必要となり1に戻る

server.py

import os, flask
PORT = int(os.environ['PORT'])
app = flask.Flask('app server')
@app.route('/')
def index():
	return "hello Dockerfile"
app.run(debug=True, host='0.0.0.0', port=PORT)

Dockerfile

From python:3.7.5-slim
Label author="myname@example.com"
RUN pip install flask==1.1.1
COPY ./server.py /server.py
ENV PORT 80
CMD ["python", "-u", "/server.py"]

$ sudo docker image build ./ -t c4app1
$ sudo docker run –rm -d -p 8080:80 –name myapp c4app1

Dockerfileの内容がキャッシュされるので、頻繁に変更が発生する箇所はDockerfileの後半に持ってくる

### ディレクトリの
.dockerignoreを配置しておくと、DockerfileのCOPY命令などの対象から指定した形式のファイルは除外される

.dockerignore

**/__pycache__
**/.DS_Store
**/Thumbs.db

Dockerfile.local.yml

From centos:7.7.1908
RUN rpm -ivh http://nginx.org/package/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum -y install nginx
VOLUME /volume
EXPOSE 80
USER nginx
COPY ./html/ /usr/share/nginx/html/
USER root
ENTRYPOINT ["nginx"]
CMD ["-g", "daemon off;"]

expose: ポートの宣言
USER: ユーザの変更
ENTRYPOINT: イメージのデフォルト実行コマンドを定義

$ sudo docker image build -f Dockerfile.local.yml -t mynginx ./

なんやー ここにきて先が見えなくなってきた