Docker ComposeでLaravelを動かしてみる

用意するファイル

適当なディレクトリに下記のファイルを用意。

  • Vagrantfile
  • Dockerfile
  • docker-compose.yml

Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.network "forwarded_port", guest: 80, host: 80
  config.vm.network "forwarded_port", guest: 5432, host: 5432
  config.vm.synced_folder ".", "/vagrant", type:"virtualbox"
  config.vm.provision :docker
  config.vm.provision :docker_compose
end

Dockerfile

FROM python
RUN apt -y update
RUN apt install -y postgresql libpq-dev
RUN pip install psycopg2
RUN apt install -y  python3-django
RUN pip install django

docker-compose.yml

version: '3'
services:
  app:
    build: .
    image: app-img
    container_name: app
    ports:
      - 80:80
    volumes:
      - /vagrant/hoge:/hoge
    working_dir: /hoge
    command: python manage.py runserver 0.0.0.0:80
    restart: always
    depends_on:
      - db
  db:
    image: postgres
    container_name: db
    ports:
      - 5432:5432
    volumes:
      - db-vol:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: hogehoge
      POSTGRES_PASSWORD: hogehoge
      POSTGRES_DB: hoge_db
    restart: always
volumes:
  db-vol:

インストール

VagrantでCentOS7を起動。

> vagrant up
> vagrant ssh

共有フォルダに移動して、 とりあえずビルドしてみる。

$ cd /vagrant
$ docker-compose build

Pythonやpipが入ってることを確認。

$ docker-compose run --rm app python --version
・・・
Python 3.9.4

$ docker-compose run --rm app pip --version
・・・
pip 21.1 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)

プロジェクトを作成。

$ docker-compose run --rm app django-admin startproject sample_app .

DBの接続先をPostgreSQLにして、

$ vi hoge/sample_app/settings.py
・・・
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'hoge_db',
        'USER': 'hogehoge',
        'PASSWORD': 'hogehoge',
        'HOST': 'db',
        'PORT': '',
    }
}
・・・

マイグレーションを実行。

$ docker-compose run --rm app python manage.py migrate

起動すると、

$ docker-compose up -d

ブラウザでDjangoの画面が確認できる。

http://localhost/ f:id:yk5656:20210502215144j:plain