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 ./
なんやー ここにきて先が見えなくなってきた