Slide 1

Slide 1 text

Dockerで最小限のPython実行環境を作る Hello, World!ができればヨシ! Presented by y_sone @20211031_とにかくほめる!マウントなしの LT会🎃

Slide 2

Slide 2 text

自己紹介 ● 2018年8月にWebエンジニアへ転職 ● 主な使用言語はPHP ● たまにイベントに出没します(スタッフ経験あり)

Slide 3

Slide 3 text

今日話すこと ● なぜPythonなのか ● なぜDockerなのか ● 最小限のPython実行環境を作りHello, World!を実行するまで

Slide 4

Slide 4 text

なぜPythonなのか ● 今後仕事で使うから

Slide 5

Slide 5 text

なぜDockerなのか ● 今後仕事で使うから ● PCの環境を汚したくないから ● 複数の環境で使いたいから

Slide 6

Slide 6 text

最小限のPython実行環境を作り Hello, World!を実行するまで 1. マイルール 2. ディレクトリ構成 3. Dockerfileの構成 4. docker-compose.yamlの構成 5. コンテナを起動しPythonでHello, World!を実行する

Slide 7

Slide 7 text

マイルール ● Docker Composeを利用したい ● 適当なソースをコピペして理由はわからないけど動きましたーは嫌だ ● よくわからないものを雰囲気で作るのは嫌なので、機能は最小限に ● 最終的にHello, World!ができればヨシ!

Slide 8

Slide 8 text

ディレクトリ構成 python_study ├── Dockerfile ├── docker-compose.yaml └── hello_world.py ● コマンドはpython_studyディレクトリで実行する ● hello_world.pyはprint("Hello, World!")のみ記述

Slide 9

Slide 9 text

Dockerfileの構成 FROM python:3 WORKDIR /usr/src/app COPY . .

Slide 10

Slide 10 text

Dockerfileの構成 # Docker Hubからイメージを取得 FROM python:3 # コマンド実行場所の作業ディレクトリを指定 WORKDIR /usr/src/app # ホストのファイルを作業ディレクトリへコピー COPY . .

Slide 11

Slide 11 text

docker-compose.yamlの構成 version: '3' services: web: build: . stdin_open: true

Slide 12

Slide 12 text

docker-compose.yamlの構成 # Composeファイルのバージョン version: '3' # コンテナの設定を定義 services: # コンテナの名前 web: # Dockerfileの存在するディレクトリのパス build: . # プロセスを継続させてコンテナの正常終了を防ぐ, tty: trueでもOK stdin_open: true

Slide 13

Slide 13 text

コンテナの構築 $ docker-compose up -d … Creating python_study_web_1 ... done

Slide 14

Slide 14 text

コンテナの起動確認 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9282080df68d python_study_web "python3" 48 seconds ago Up 47 seconds python_study_web_1

Slide 15

Slide 15 text

upコマンドが実行していること ● 目的 docker-compose.yamlに定義されているサービスを起動する ● 起動までの流れ Dockerイメージが存在しない →Dockerfileを元にイメージpython_study_webを構築(=ビルド) →イメージからコンテナpython_study_web_1を構築 →コンテナを起動

Slide 16

Slide 16 text

コンテナに入る $ docker-compose exec web bash root@9282080df68d:/usr/src/app# ls Dockerfile docker-compose.yaml hello_world.py ● docker-compose.yamlに記述したservice(web)に入りbashを実行する ● docker container exec -it python_study_web_1 bashでもOK

Slide 17

Slide 17 text

PythonでHello, World! # python hello_world.py Hello, World!

Slide 18

Slide 18 text

おわりに ● LTは久しぶりなので緊張しました ● 他人への説明を前提にすると要求される理解度のレベルが跳ね上がる ● しかし、他人へ説明できない=理解していないと同じではないか? ● 何となくでスルーしていた部分に向き合う良い機会になった

Slide 19

Slide 19 text

参考 ● Dockerfileの書き方 https://docs.docker.jp/engine/reference/builder.html ● docker-compose.yamlの書き方 https://github.com/compose-spec/compose-spec/blob/master/spec.md https://ai-can-fly.hateblo.jp/entry/summary-of-docker-compose-for-beginners ● docker-composeコマンド https://docs.docker.jp/compose/reference/toc.html ● stdin_open/tty/itオプション https://ohbarye.hatenablog.jp/entry/2019/05/05/learn-tty-with-docker https://zenn.dev/hohner/articles/43a0da20181d34