LoginSignup
2
2

More than 3 years have passed since last update.

Djangoプロジェクトをデプロイするまでの練習 1回目 Docker準備編

Posted at

はじめに

「コンテナ時代のWebサービスの作り方 コンテナで動かすWebアプリケーション 著:nasum」を参考にさせていただき、コンテナで動かすWebアプリケーションの公開を目指します。やり始めから色々試行錯誤があったので、自分用メモとして残していこうと思います。
本記事を1回目として、3回目までが色々試行錯誤した部分の準備編で、軌道に乗り始めたら別記事で改めて整理したいと思います。

ゴール

  • DockerコンテナをECSで管理して公開する
  • masterブランチへのマージをフックにデプロイを実行する

使用する予定のもの

  • GitHub コード管理
  • CircleCI DockerイメージのビルドからECRへのプッシュ、およびデプロイ
  • Docker 開発環境及びWebアプリケーションの稼働環境
  • Terraform AWSの構成管理
  • AWS関係 EC2、ECR、ECS、RDS、SSM

環境の構築

自分のPCはWindowsなので、Dockerのpythonイメージを使用して以降の部分を進める。
ただし、そもそもDockerについて自分の知識の大部分が怪しいので整理する。

Docker

docker image build -t dockerdemo:ver1 .
ビルドコンテキストにあるDockerfileをもとにイメージをビルドする。
-tオプションにより、イメージに名前を付けることができる。
-t dockerdemo:ver1のようにすると、tagがver1のイメージとして管理できる。
これをつけなければ、latestが自動的に付与される。
docker image ls
dockerイメージをリスト表示する

使用したDockerfileは下記の通り

Dockerfile.
FROM python:3.7
ENV PYTHONUNBUFFERED 1
RUN apt-get update && apt-get install -y \
    vim
RUN mkdir /code
WORKDIR /code
RUN pip install awscli
ADD . /code
RUN wget https://release.hashicorp.com/terraform/0.12.24/terraform_0.12.24_linux_amd64.zip && \ unzip ./terraform_0.12.24_linux_amd64.zip -d /usr/local/bin/

FROM python3.7のイメージを使用
ENV これがないと、バッファー
RUN updateとvimをインストール
RUN /codeフォルダを作り、それを作業フォルダにする
RUN awscliを使用してAWSのリソースを操作する
ADD カレントフォルダの内容を/codeフォルダにコピー
RUN terraformをインストール
RUNコマンド毎にdockerイメージが作成される。コンテナを立ち上げたときにコマンドを実行したい場合はCMDを使用する。
下記のdocker-compose.ymlでcommandを指定すると、CMDに上書きされる。

順番としては、
1. イメージを作成(ビルド)
docker image build .

  1. コンテナを起動 docker run -itd --name コンテナ名 --mount type=bind.source"$(pwd)"/bind-test,target=/app イメージ名:タグ

という感じ。

実際にはdocker-compose.ymlを使用する。

docker-compose.yml
version: '3'
services:
  web:
    build: .
    volumes:
      - .:/code
    tty: true
    stdin_open: true

ttyとstdin_openをtrueにしないと、docker runで標準出力の入出力ができない。
volumesで .:/codeを指定し、バインドマウントでカレントフォルダをコンテナの/codeディレクトリへマウントする。

docker-compose up -d
docker exec -it test_web_1 /bin/bash
でコンテナをビルドから起動し、コンテナ上で操作する。

AWSの下準備

IAM

Terraformを使ってAWSの環境を構築するにあたり、Terraformを実行するためのIAMを作成する。
TerraformはAWSの構成を管理するものであるが、この実行用のIAMはTerraformによる管理ができないため、手動でWebコンソールから作成する必要がある。

作成した内容は以下の通り。
- プログラムによるアクセスにチェック
- ポリシーはAdministratorAccessをアタッチ
- アクセスキーIDとシークレットアクセスキーは別途控えておく

控えたアクセスキーIDとシークレットアクセスキーは、.aws/credentialsに記入し、
作成したDockerイメージのhomeディレクトリに配置することで、awscliコマンドで自動的にcredential情報を読み込んでくれる。

$Home.aws/credentials
[default]
aws_access_key_id = アクセスキーID
aws_secret_access_key = シークレットアクセスキー
Dockerfile.
FROM python:3.7
ENV PYTHONUNBUFFERED 1
RUN apt-get update && apt-get install -y \
    vim
RUN mkdir /code
WORKDIR /code
RUN pip install awscli
ADD . /code
RUN wget https://release.hashicorp.com/terraform/0.12.24/terraform_0.12.24_linux_amd64.zip && \ unzip ./terraform_0.12.24_linux_amd64.zip -d /usr/local/bin/

# 追記
RUN cp -r .aws ~

確認

作成したDockerコンテナで、Terraformおよびawsclientが正しくインストールされているか確認する。

下記のコマンドで実行中のコンテナへ接続する。
docker exec -it test_web_1 /bin/bash
この時は、testフォルダからdocker-compose up -dでコンテナを起動しているため、コンテナ名はtest_web_1になった。

terraform --version
Terraform v0.12.24
aws --version
aws-cli/1.18.53 Python/3.7.7 Linux/4.9.184-linuxkit botocore/1.16.3

aws s3 ls
# エラーが返ってこないか確認する。
# 既にs3バケットが作成されている場合はs3バケット名が表示される。

以上で下準備は終了。。
2回目に移ります。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2