Django + MySQLの開発環境をDockerでつくる（その1）

# その1 でやりたいこと
1. docker-composeをビルドしてDjango（のプロジェクト作成用）とMySQLコンテナを作成
2. プロジェクトフォルダ直下がコンテナ内にマウントされていることを確認(※プロジェクトフォルダは、この後出てくるディレクトリ構成図参照)

# 環境情報
macOSで行ってます（Mojave 10.14.5）。
以下はdockerのバージョン情報です。

```
$ docker version
Client: Docker Engine - Community
 Version:           18.09.2
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        6247962
 Built:             Sun Feb 10 04:12:39 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.2
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       6247962
  Built:            Sun Feb 10 04:13:06 2019
  OS/Arch:          linux/amd64
  Experimental:     false
```

# はじめのディレクトリ構成図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357470/08d040ea-f7ae-52ac-2dbd-65f988c6bf73.png)


# docker-compose.yml
```docker-compose.yml
version: '3'
services:
  mysql:
    image: mariadb:latest
    container_name: maria_qiita
    env_file: ./mysql/.env
    ports:
      - "3306:3306"
    networks:
      app_net:
        ipv4_address: 172.20.0.3
    depends_on:
      - django

  django:
    build: ./django
    container_name: django_qiita
    ports:
      - "8000:8000"
    volumes:
      - ./:/src
    networks:
      app_net:
        ipv4_address: 172.20.0.2
    tty: true

networks:
  app_net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.20.0.0/24
volumes:
  est-data:
```
  

  
# Dockerfile
```Dockerfile
FROM ubuntu:18.04

RUN apt-get -y update \
  && apt-get install -y locales python3-pip python3.7 libmysqlclient-dev\
  && mkdir /src \
  && rm -rf /var/lib/apt/lists/* \
  && echo "ja_JP UTF-8" > /etc/locale.gen \
  && locale-gen

WORKDIR /src
ADD ./ /src/
RUN LC_ALL=ja_JP.UTF-8 pip3 install -r requirements.txt
```

「WORKDIR」を設定しておくと、後に出てくる`docker exec -it ...`でコンテナ内に入った時に少し嬉しい事が起きます。
  
# requirements.txt
```requirements.txt
django==2.1.5
mysqlclient
flake8
```
  
#.env（MySQLの環境設定ファイル）
```.env
MYSQL_ROOT_USER=root
MYSQL_ROOT_PASSWORD=password
MYSQL_DATABASE=db_maria
MYSQL_USER=user
MYSQL_PASSWORD=user
```
  
# やりたいこと1. の確認
>'1. docker-composeをビルドしてDjango（のプロジェクト作成用）とMySQLコンテナを作成

まずプロジェクトフォルダに移動

```
cd /Users/.../develop/project1
```
  
そしてdocker-composeのビルドコマンド実行

```
docker-compose up --build -d
```
  
実行した結果

```
project1$ docker-compose up --build -d
Creating network "project1_app_net" with driver "bridge"
Creating volume "project1_est-data" with default driver
Building django
Step 1/5 : FROM ubuntu:18.04
 ---> 7698f282e524
Step 2/5 : RUN apt-get -y update   && apt-get install -y locales python3-pip python3.7 libmysqlclient-dev  && mkdir /src   && rm -rf /var/lib/apt/lists/*   && echo "ja_JP UTF-8" > /etc/locale.gen   && locale-gen
 ---> Running in f921759116c4
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Get:3 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [4169 B]
Get:4 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [717 kB]
Get:5 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
...
..
.
```

長々とコンソールに出力されて。。。
最後doneが表示されれば完了です。
  
```
.
..
...
Installing collected packages: pytz, django, mysqlclient, pyflakes, pycodestyle, entrypoints, mccabe, flake8
Successfully installed django-2.1.5 entrypoints-0.3 flake8-3.7.7 mccabe-0.6.1 mysqlclient-1.4.2.post1 pycodestyle-2.5.0 pyflakes-2.1.1 pytz-2019.1
Removing intermediate container c4cee4bd07fe
 ---> e83634732db4
Successfully built e83634732db4
Successfully tagged project1_django:latest
Creating django_qiita ... done
Creating maria_qiita  ... done
```
  
docker psコマンドでコンテナを確認します。
「STATUS」がUp...になってれば問題ないです。

```
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                          PORTS                    NAMES
35ef1ef43207        mariadb:latest      "docker-entrypoint.s…"   8 seconds ago       Up 7 seconds                    0.0.0.0:3306->3306/tcp   maria_qiita
4d3ce7afcc31        project1_django     "/bin/bash"              9 seconds ago       Up 8 seconds                    0.0.0.0:8000->8000/tcp   django_qiita
```
  
# やりたいこと2. の確認
>'2. プロジェクトフォルダ直下がコンテナ内にマウントされていることを確認
  
以下コマンドでdjangoコンテナに入ります。（入るというよりは標準入力を受け付けるようにする？）
「CONTAINER ID」と「NAMES」は`docker ps`で調べられます。
また、「CONTAINER ID」を指定する場合は頭3桁だけでいいです。

```
docker exec -it <CONTAINER ID または NAMES> /bin/bash
```
  
以下実行結果
Dockerfileで「WORKDIR」に指定したディレクトリがカレントディレクトリになってます。

```
$ docker exec -it 4d3 /bin/bash
root@4d3ce7afcc31:/src#
```
  
`ls -al`で一覧をみてます。

```
root@4d3ce7afcc31:/src# ls -al
total 16
drwxr-xr-x 7 root root  224 Jun 15 08:30 .
drwxr-xr-x 1 root root 4096 Jun 15 09:07 ..
-rw-r--r-- 1 root root 6148 Jun 15 08:21 .DS_Store
drwxr-xr-x 4 root root  128 Jun 15 06:53 django
-rw-r--r-- 1 root root  580 Jun 15 09:06 docker-compose.yml
drwxr-xr-x 3 root root   96 Jun 15 08:16 mysql
```
  
無事プロジェクトフォルダ直下がマウントされてます。
  
# 以上
  
[その2はこちら](https://qiita.com/Butterthon/items/08df84cfb1aca230bda5)