1. Dockerとは?
Dockerは、アプリケーションを簡単に動かすための「箱」を作るツールです。この箱は コンテナ
と呼ばれます。
コンテナの中には、アプリケーションを動かすのに必要なソフトウェアや設定が全部入っています。
たとえば、Railsアプリを動かすにはRubyやデータベースなどいろいろなものが必要ですが、Dockerを使うと、そういったものをひとまとめにして管理できます。
1.1. Dockerのポイント
-
軽い!
Dockerのコンテナは必要なものだけが入っているので、普通の仮想マシンよりも速くて軽いです。 -
どこでも動く!
一度作ったDockerのコンテナは、どんなパソコンやサーバーでも同じように動かせます。
(ただし、各コンテンの対応OSを確認してください) -
みんなで同じ環境を使える!
開発チーム全員が同じ環境を使えるので、「自分のパソコンでは動くけど、他の人のパソコンでは動かない」という問題がなくなります。
1.2. どんな仕組み?
Dockerには、次の3つの要素があります。
-
Dockerイメージ
コンテナの「設計図」です。アプリを動かすのに必要なもの(Rubyのバージョンやライブラリなど)がここに書かれています。 -
Dockerコンテナ
イメージを元に作られる「実物の箱」です。この中でアプリが動きます。 -
Dockerレジストリ
イメージを保存しておく「倉庫」です。インターネット上のDocker Hubなどからイメージをダウンロードできます。
1.3. どんな時に便利?
-
開発環境のセットアップ
初めて参加するプロジェクトでも、Dockerを使えば一瞬で同じ環境を作れます。 -
テストやデプロイ
サーバーにそのままコンテナを持っていけば、アプリを動かす準備がほとんどいりません。 -
トラブル解決
「動かない!」という時も、コンテナごと動かせるので問題の再現が簡単です。
はい、ということで、Dockerの前置きはこのぐらいにして、次からはさっそく本題に入っていきます!
2. 準備
2.1. Docker ID の登録
Dockerを使うには、まず Dockerイメージ
というDockerで利用できる様座なソフトウェアをイメージ化したものをダウンロードする必要があります。
ダウンロードするには、 DockerHub
というサービスへのユーザー登録が必要です。
以下のサイトからユーザー登録を行えます。
2.2. Docker Desktopのインストール
以下、公式ページのインストールフォームです。
各OSに合ったものをインストールしてください。
注意
- mac
- Docker Desktop for Mac with Apple silicon は
M4
などの M○系macです
- Docker Desktop for Mac with Apple silicon は
- windows
- 基本的に
Docker Desktop for Windows - x86_64
でいいです - ARMのWindows使ってる猛者はここには来ないよね?笑
- 基本的に
2.2.1. Windowsの注意点
基本的に画面の指示に従ってください。
以下は、注意点です。
インストール時、以下の画面が出てきます。
チェックボックスは、チェックした状態にしてください。
インストール完了後、起動したら、以下のメッセージが出てくる場合があります。
WSL2のインストールまたは更新が必要というメッセージです。
このメッセージが出てきたら、メッセージ内のURLからWSL2の更新をしたあとに、 Restart
を押してください。
2.2.2. Macの注意点
基本的に画面の指示に従ってください。
以下は注意点です。
以下のようにユーザー名、パスワードを聞かれた際には、Maxのユーザー名、パスワードを入力してください。
インストールが完了すると、以下のような画面が出力されます
(私はダークモードですが、デフォルトは白い画面のはずです!)
2.3. VSCodeのインストール
3. DockerFile
# ベースイメージの指定
FROM --platform=linux/amd64 amazonlinux:2
# 必要なパッケージのインストール
RUN yum update -y && \
yum groupinstall -y "Development Tools" && \
yum install -y sudo
# ec2-user を作成し、パーミッションを設定
RUN useradd -ms /bin/bash ec2-user && \
echo "ec2-user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "root:root" | chpasswd && \
mkdir -p /home/ec2-user/environment && \
echo "ec2-user:password" | chpasswd
COPY setup.sh /home/ec2-user/setup.sh
RUN chmod 755 /home/ec2-user/setup.sh && \
sh /home/ec2-user/setup.sh
# /home/ec2-user 以下のすべてのフォルダを ec2-user の所有権限に変更
RUN chown -R ec2-user:ec2-user /home/ec2-user
# ec2-user で作業ディレクトリを使用
USER ec2-user
WORKDIR /home/ec2-user/environment
# デフォルトコマンド
CMD ["bash"]
軽く説明します。
-
FROM --platform=linux/amd64 amazonlinux:2
-
--platform=linux/amd64
は、M系macに対応するために記載しています - ベースイメージは
amazonlinux:2
を使用しています
-
-
setup.sh
については、以降で示しています。
4. docker-compose.yml
version: '3.8'
services:
web:
build:
context: .
dockerfile: Dockerfile
container_name: web_container
environment:
- MYSQL_HOST=db
- MYSQL_PORT=3306
depends_on:
- db
stdin_open: true
tty: true
user: "ec2-user" # ec2-user でコンテナを実行
working_dir: /home/ec2-user/environment # 作業ディレクトリの設定
volumes:
db_data:
5. setup.sh
#!/bin/bash
# 環境変数の設定
RUBY_VERSION="3.1.2"
RAILS_VERSION="6.1.4"
NODE_VERSION="v18.18.2"
NODE_DIR="/usr/local/share/node"
# パッケージ情報の更新
sudo yum update -y
# 必要なツールとライブラリのインストール
sudo yum install -y git curl bzip2 gcc gcc-c++ make openssl-devel readline-devel zlib-devel libffi-devel \
patch libyaml-devel zlib zlib-devel make autoconf automake libcurl-devel sqlite-devel mysql-devel
# Rubyのインストール
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenv install $RUBY_VERSION
rbenv global $RUBY_VERSION
rbenv rehash
rbenv exec gem install bundler
# Node.js のインストールに必要なパッケージをインストール
sudo yum install -y wget tar gzip
# Node.js のダウンロード&インストール
wget -nv https://d3rnber7ry90et.cloudfront.net/linux-x86_64/node-${NODE_VERSION}.tar.gz
tar -xf node-${NODE_VERSION}.tar.gz
sudo mv node-${NODE_VERSION} ${NODE_DIR}
# バイナリへのリンクを貼る
sudo ln -s ${NODE_DIR}/bin/corepack /usr/local/bin/corepack
sudo ln -s ${NODE_DIR}/bin/node /usr/local/bin/node
sudo ln -s ${NODE_DIR}/bin/npm /usr/local/bin/npm
sudo ln -s ${NODE_DIR}/bin/npx /usr/local/bin/npx
# ダウンロードしたアーカイブファイルを削除
rm -f node-${NODE_VERSION}.tar.gz
# yarn のインストールを確認し、必要ならインストール
if ! command -v yarn > /dev/null; then
npm install -g yarn
sudo ln -s ${NODE_DIR}/bin/yarn /usr/local/bin/yarn
fi
# Rails のインストール
gem install rails -v $RAILS_VERSION
# Nokogiri のインストール
gem install nokogiri -v 1.16.6 -- --use-system-libraries
# シェルの設定を再読み込み
source ~/.bashrc
source ~/.bash_profile
6. 実行
3. DockerFile
4. docker-compose.yml
5. setup.sh
を同じディレクトリにまとめてください。
このディレクトリをVSCodeで開きます。
VSCode上のターミナル