2022年7月28日木曜日

Raspberry Pi OS 64bitでDockerを使う

Raspberry Pi OS 64bitをインストールしたので、それを機にRaspberry PiでDockerを使ってみることにした。64bit OSだと、32bitのときに比べて使える公式Dockerイメージが多い。今回はDocker Compose v1をインストールして、DockerでDjango+PostgreSQL環境を作成すると同様に、Django+PostfreSQLの環境をDockerで作成してみる。


環境


OSはRaspberry Pi OS 64bit with desktop。
$ lsb_release -dr
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11


DockerとComposeのインストール

まずはDockerのインストール。インストールスクリプトをダウンロードして実行するだけ。

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh

インストールされたDockerのバージョン。

$ docker --version
Docker version 20.10.17, build 100c701

Dockerをインストールしたら、root権限なしでDockerコマンドを使用できるようにしておく。

$ sudo usermod -aG docker ${USER}
usermodの変更を反映させるために再起動。
$ sudo reboot
続いて、Docker Composeをインストール。ここではv1をインストールする。
$ sudo apt install libffi-dev
$ sudo pip3 install docker-compose 
インストールしたバージョンの確認。
$ docker-compose --version
docker-compose version 1.29.2, build unknown

OS起動時にDockerが自動起動するようにしておく。

$ sudo systemctl enable docker


Dockerコンテナを使う準備

Dockerが使えるようになったので、起動するDockerイメージのファイルなどを準備する。

今回は、DockerでDjango+PostgreSQL環境を作成するで作成したファイルで起動させてみる。以下のファイルを同じディレクトリに配置するが、docker-compose.ymlについては、マウントするホスト側のパス指定をWindows用からLinux用に変更しておく。

Dockerfile_web
requirements.txt
Dockerfile_db
docker-compose.yml
.env


docker-compose.yml

Composeファイル。PostgreSQLのデータベース領域は、後で作成するボリュームを指定する。

version: '3'

services:
  db:
    build:
     context: .
     dockerfile: Dockerfile_db
    ports: 
        - "5432"
    environment:
      POSTGRES_DB:
      POSTGRES_USER:
      POSTGRES_PASSWORD:
    volumes:
      - postgres_db:/var/lib/postgresql/data
  web:
    build:
     context: .
     dockerfile: Dockerfile_web
    command: python3 /app/manage.py runserver 0.0.0.0:8000
    volumes:
      - ./app:/app
    ports:
      - "8000:8000"
    depends_on:
      - db

volumes:
  postgres_db:
    external: true


Dockerコンテナの起動

Dockerファイルなどの準備ができたら、Dockerを起動してみる。

まずは、PostgreSQL用のボリュームを作成しておく。

$ docker volume create --name postgres_db
postgres_db 

続いて、ここではsampleというDjangoプロジェクトを作成する。

$ docker-compose run web django-admin.py startproject sample .

データベース接続などのプロジェクトの設定を変更するため、app/sample/settings.pyを編集する。

...
ALLOWED_HOSTS = ['*']
...
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}
...
LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo' 

そして、コンテナを起動。

$ docker-compose up -d

ブラウザでhttp://192.168.1.10:8000にアクセス(192.168.1.10はRaspberry PiのIPアドレス)して、以下の画面が表示されれば問題なし。


PostgreSQlへの接続確認は以下のコマンド。
$ docker-compose exec db psql -U postgres 

Djangoのマイグレーションも実行してみる。

$ docker-compose run web python3 manage.py migrate
Creating django_web_run ... done
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK


0 件のコメント:

コメントを投稿