$30 off During Our Annual Pro Sale. View Details »

poetryでパッケージ管理 on Docker

mizzsugar
August 08, 2019
530

poetryでパッケージ管理 on Docker

mizzsugar

August 08, 2019
Tweet

More Decks by mizzsugar

Transcript

  1. Poetryでパッケージ管理
    on Docker
    @mizzsugar0425
    2019/08/08 Stapy

    View Slide

  2. お前誰よ
    ・みずきと申します。
    ・先月、Pythonを始めて1年が経過しました。
    ・仕事:DjangoでWeb開発
    ・仕事外:Pyramid/Nuxt/TypeScriptを頑張っている
    ・美味しい水出しコーヒーが飲みたい

    View Slide

  3. pip install -r requirements.txt

    View Slide

  4. 以前はpip installのみで
    パッケージ管理していました。

    View Slide

  5. パッケージ同士の依存関係を
    管理できない問題

    View Slide

  6. Docker上で
    Pipenvやpoetryを使いたい

    View Slide

  7. Poetryやるぞお!
    poetryにした理由
    ・lockがPipenvより早い
    ・(個人的な理由だけど)pyproject.tomlとsetup.pyを自動生成してくれ
    るので今後のPyPIデビューに備えて使いこなしたい

    View Slide

  8. ディレクトリ構成
    ├── app
    │ ├── poetry.lock
    │ ├── project
    │ │ ├── アプリケーションコード諸々
    │ └── pyproject.toml
    ├── docker
    │ ├── app
    │ │ ├── Dockerfile
    │ │ └── start-server.sh
    │ ├── etc
    │ │ └── gunicorn.conf
    │ ├── db
    │ └── Dockerfile
    └── docker-compose.yaml

    View Slide

  9. docker-compose.yaml
    version: "3"
    services:
    app:
    build:
    context: ./docker/app
    dockerfile: Dockerfile
    env_file: .env
    volumes:
    - ./app:/home/app
    - ./docker/app:/home/docker
    - ./docker/etc/gunicorn.conf:/etc/gunicorn.conf
    - ./docker/var/log/gunicorn:/var/log/gunicorn
    working_dir: /home/app
    entrypoint: "/bin/sh"
    command: "/home/docker/start-server.sh"
    ports:
    - "8080:8080"
    tty: true
    depends_on:
    - db
    db:
    build:
    context: ./docker/db
    dockerfile: Dockerfile
    env_file: .env
    ports:
    - 5432:5432
    volumes:
    - ./docker/postgres/pgsql-data:/var/lib/postgresql/data
    PythonコンテナとDBコンテナの
    2つでアプリケーションを動かすとい
    う設定です。

    View Slide

  10. pyproject.tomlとpoetry.lockどこにおく?
    案1:docker/app以下
    案2:app以下
    →案1でやってたけど、パッケージインストールしたりアップデー
    トするたびにdocker/app以下に移動するのが
    面倒なので案2の方が楽だな・・・と思った

    View Slide

  11. コンテナ立ち上がると同時に色々してほしい!
    →シェルスクリプトにやってもらおう

    View Slide

  12. シェルスクリプトにやってもらう
    #!/bin/bash
    cd /home/app
    poetry install
    cd project
    if [ "${DJANGO_ENV}" = 'production' ]; then
    poetry run python manage.py migrate --settings config.settings
    poetry run python manage.py collectstatic --noinput
    poetry run gunicorn config.wsgi:application -c /etc/gunicorn.conf -b :8080
    else
    poetry run python manage.py migrate
    poetry run python manage.py runserver 0.0.0.0:8000
    fi

    View Slide

  13. シェルスクリプトにやってもらう
    #!/bin/bash
    cd /home/app
    poetry install
    cd project
    if [ "${DJANGO_ENV}" = 'production' ]; then
    poetry run python manage.py migrate --settings config.settings
    poetry run python manage.py collectstatic --noinput
    poetry run gunicorn config.wsgi:application -c /etc/gunicorn.conf -b :8080
    else
    poetry run python manage.py migrate
    poetry run python manage.py runserver 0.0.0.0:8000
    fi
    poetryでインストールしたパッ
    ケージをインストールします。
    poetry run を頭につけると
    poetryが作ってくれる仮想環境で
    操作がされる動きになります。

    View Slide

  14. docker-compose.yamlにコマンド追加
    (次のスライドへ)

    View Slide

  15. docker-compose.yaml
    version: "3"
    services:
    app:
    build:
    context: ./docker/app
    dockerfile: Dockerfile
    env_file: .env
    volumes:
    - ./app:/home/app
    - ./docker/app:/home/docker
    - ./docker/etc/gunicorn.conf:/etc/gunicorn.conf
    - ./docker/var/log/gunicorn:/var/log/gunicorn
    working_dir: /home/app
    entrypoint: "/bin/sh"
    command: "/home/docker/start-server.sh"
    ports:
    - "8080:8080"
    tty: true
    depends_on:
    - db
    db:
    build:
    context: ./docker/db
    dockerfile: Dockerfile
    env_file: .env
    ports:
    - 5432:5432
    volumes:
    - ./docker/postgres/pgsql-data:/var/lib/postgresql/data

    View Slide

  16. Docker環境内での操作
    poetryでインストールしたパッケージを使った操作をしたい場
    合、
    poetryが用意した仮想環境に入る必要がある。

    View Slide

  17. docker-compose exec app bash
    まずPythonコンテナに入って
    cd project
    poetry run python manage.py shell
    poetryが作成してくれる仮想環境にて実行!
    poetry shell
    cd project
    poetry run python manage.py shell
    こちらでも可

    View Slide

  18. パッケージの追加・アップデート
    poetry add [パッケージ名]
    まずPythonコンテナに入ってから・・・
    新しくパッケージを追加
    poetry update [パッケージ名]
    パッケージのアップデート

    View Slide

  19. リポジトリはこちら
    https://github.com/mizzsugar/poetry_on_docker

    View Slide

  20. ブログもあるよ
    http://mizzsugar.hatenablog.com/entry/2019/08/
    08/191318

    View Slide

  21. おまけ 〜Pipenv編〜
    (ぶっちゃけやることはあんま変わらなかった)
    https://github.com/mizzsugar/pipenv_on_docke
    r

    View Slide

  22. ありがとうございました!

    View Slide