フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

dockerのamazonlinuxイメージでpython3.9/django3の環境を構築する

python 環境のイメージ作成用Dockerfile

  • pythonのライブラリはお好きなものをインストールしてください。djangoでreset apiを実装したいため、djangorestframeworkなどをインストールしてます。
FROM amazonlinux:latest

WORKDIR /opt
RUN yum update -y
RUN yum install tar gzip wget make gcc openssl-devel bzip2-devel libffi-devel  -y

## Download Python 3.9.2
RUN wget https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tgz 
RUN tar xzf Python-3.9.2.tgz

## Install Python 3.9.2
WORKDIR /opt/Python-3.9.2
RUN /opt/Python-3.9.2/configure --enable-optimizations
RUN make altinstall 
RUN rm -f /opt/Python-3.9.2.tgz 

## mysql
RUN yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
RUN yum install mysql-devel mysql-libs mysql-community-client -y

## python関連
RUN python3.9 -m pip install --upgrade pip
RUN python3.9 -m pip install django
RUN python3.9 -m pip install djangorestframework
RUN python3.9 -m pip install markdown
RUN python3.9 -m pip install django-filter
RUN python3.9 -m pip install mysqlclient

WORKDIR /srv/backend/app

docker-compose.yaml

  • djangが自動起動になっていない理由がDBより先にdjangoが起動してDB接続エラーで落ちるので、
version: '3'
services:
  db:
    image: mysql:latest
    container_name: db
    command: mysqld --default-authentication-plugin=mysql_native_password
    volumes:
      - ./data:/var/lib/mysql
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: <ルートのパスワード>
      MYSQL_DATABASE: <データベース名>
      MYSQL_USER: <ユーザー名>
      MYSQL_PASSWORD: <パスワード>
  app:
    build: ./containers/python/
    container_name: app
    privileged: true
    volumes:
      - ./backend:/srv/backend/app
    environment:
      TZ: Asia/Tokyo
    ports:
      - '8000:8000'
    tty: true
    depends_on:
      - db
  • 下記のような処理を追加してDBが起動してからdjangoを起動できるようになったらcommand: python3.9 manage.py runserver 0:8000を追加してください。 dev.to

djangoの設定

  • djangoのプロジェクトを作成後、settings.pyファイルでmysqlの接続を指定する
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '<DB名>',
        'USER': '<ユーザー名>',
        'PASSWORD': '<パスワード>',
        'HOST': '<dockerのDBのホスト名>',
        'PORT': '3306',
    }
}

起動確認

  • appサーバーにログインしてpython3.9 manage.py runserver 0:8000を実行する

f:id:PX-WING:20210307005321p:plain