Help us understand the problem. What is going on with this article?

Docker(compose)にDjango開発環境を移行する際の備忘録

More than 1 year has passed since last update.

Dockerfile

FROM python:3.7
ENV PYTHONUNBUFFERED 1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install --no-cache-dir -r requirements.txt
COPY ./code /code/.
RUN python manage.py migrate
  • FROMでpython3.7環境を使用
  • ENVでエラー出力抑制(らしい)
  • WORKDIRで一時作業フォルダを指定
  • WORKDIRにDockerfileと同じディレクトリに配置しているrequirements.txtをコピーする
  • RUNでrequirements.txtにしたがってインストールを行う
  • COPYでmanage.pyがあるディレクトリを丸ごとWORKDIR配下にコピー
  • RUNでmigrateしておく

ハマりポイントとしては、WORKDIRへのファイルコピー。
Dockerfileと同じディレクトリにあるcodeディレクトリ(Djangoプロジェクト)を指定できずFile Not Foundを連発。
前提条件として、Dockerfileとrequirements.txt、codeディレクトリはすべて同じ階層に配置している。

docker-compose.yml

docker-compose.yml
version: '3'
services:
        web:
                build: .
                ports:
                        - "8000:8000"
                volumes:
                        - ./code:/code
                command: python3 manage.py runserver 0.0.0.0:8000
  • versionは3を指定
  • web:は一時的な名称として指定。
  • build:でDockerfileの位置を指定。カレントディレクトリにあるので'.'を指定。
  • ports:でDjangoのポートを指定。
  • volumes:でカレントディレクトリにあるDjangoプロジェクトのディレクトリをコンテナ内の/codeにマウントする。マウントすることでvscodeなどから直接編集した内容がコンテナ上に反映される。
  • command:でDjangoのWebサーバーを起動させる。引数のIPアドレスとポート番号は必要ないかもしれない。

コマンド類

Dockerコマンドをsudoなしで実行させる場合

$ sudo usermod -aG docker ユーザー名
$ newgrp docker

newgrp dockerを.bashrcなどに書いておくと楽になるかもしれない。

イメージの削除

$ docker images
$ docker rmi イメージID先頭3桁

割り当てられているコンテナが存在する場合は-fをつけて強制的に削除する。

$ docker rmi -f イメージID先頭3桁

コンテナの削除

$ docker rm コンテナID

exited状態のコンテナ複数を一度に削除する

$ docker rm $(docker ps -a --filter 'status=exited' -q)

コンテナにログインしてコマンドを実行したい場合

$ docker exec -it コンテナ名 /bin/bash
Takagi_
AWS/Kubernetes/Istio周辺を勉強中です。2021年はDevOps方面に舵を切っていきます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away