0から始める初心者向けDocker構築
公開日: 2024/4/22
更新日: 2024/3/8
Windows環境でDockerイメージとコンテナーを取り扱うための環境のセットアップ手順と、その構成の学習を目的とします。
最終目標としてDocker環境をサーバにデプロイし、本運用を見越したDocker環境でのリリースを実施します。
環境
・Windows 10
・VSC version 1.83.1
・Docker Desktop
1. Docker環境構築
1-1. WSLのインストール
DockerはLinux環境で動作するツールなので、Windows上にLinux環境を用意する必要があります。
Dockerコンテナを動作させる方法は次の2つの方法のいずれかを用いることで実現できます。
・Hyper-Vの上にLinux OSをインストールしたうえで、そのLinux OS環境にDockerをインストールする
・WSL2の上にLinux OSをインストールしたうえで、そのLinux OS環境にDockerをインストールする
Hyper-Vを用いる場合、Windows10 Proエディション以上が求められるため、今回はWSL2を使用します。
WSL2はWindows 10 Homeでも利用可能であるため汎用性が高いです。
WSL2はWindows 10のオプション機能(設定で有効化する)として導入でき、特にライブラリの追加などせずにそのまま実行できます。
実行するとOSの再起動を求められ、再起動後は自動でUbuntuのインストールが実行されます。
その際にユーザー名とパスワードを求められるので、こちらはメモして保管しておきましょう。
Dockerコンテナを動作させる方法は次の2つの方法のいずれかを用いることで実現できます。
・Hyper-Vの上にLinux OSをインストールしたうえで、そのLinux OS環境にDockerをインストールする
・WSL2の上にLinux OSをインストールしたうえで、そのLinux OS環境にDockerをインストールする
Hyper-Vを用いる場合、Windows10 Proエディション以上が求められるため、今回はWSL2を使用します。
WSL2はWindows 10 Homeでも利用可能であるため汎用性が高いです。
WSL2はWindows 10のオプション機能(設定で有効化する)として導入でき、特にライブラリの追加などせずにそのまま実行できます。
wsl --install
実行するとOSの再起動を求められ、再起動後は自動でUbuntuのインストールが実行されます。
その際にユーザー名とパスワードを求められるので、こちらはメモして保管しておきましょう。
1-2. Docker Desktop for Windowsのインストール
下記サイトからDocker Desktop for Windowsをダウンロードしてインストールを実施します。
https://docs.docker.com/desktop/install/windows-install/
インストール後は再起動を求められるので、再起動を実施します。
再起動後にdockerが自動で立ち上がるので、ターミナルから起動状態のテストを実施します。
下記コマンドを実施すると80番ポートのテスト用イメージが起動するので、docker psで起動状態を確認します。
テスト用のイメージが起動していることが確認できたので、この状態で http://localhost/ にアクセスをすると、dockerのチュートリアルページに遷移します。
これはコンテナ上にページが用意されてあるため、表示されています。
https://docs.docker.com/desktop/install/windows-install/
インストール後は再起動を求められるので、再起動を実施します。
再起動後にdockerが自動で立ち上がるので、ターミナルから起動状態のテストを実施します。
下記コマンドを実施すると80番ポートのテスト用イメージが起動するので、docker psで起動状態を確認します。
docker run -d -p 80:80 docker/getting-started
docker ps
テスト用のイメージが起動していることが確認できたので、この状態で http://localhost/ にアクセスをすると、dockerのチュートリアルページに遷移します。
これはコンテナ上にページが用意されてあるため、表示されています。
2. 開発環境を用意する
ここまでで、docker環境は動作することが確認できました。
ここからはPHP環境を用意し、開発環境の構築を行っていきます。
構築する環境としては下記を想定しています。
Laravel 5.0
PHP 8.2
nginx 2.0
Mysql 5.7
2-1. docker-compose.ymlを用意する
まずは、docker-compose.ymlファイルを用意し、アプリケーションとネットワーク、データベースをそれぞれ設定できるように各イメージの構築を行っていきます。
今回は下記のような構成でdocker-compose.ymlファイルを用意しました。
nginxとdbには既存のイメージを利用し、phpは設定の上書を行ったりするため、php用のディレクトリにDockerfileを作成してそちらから作成します。
今回は下記のような構成でdocker-compose.ymlファイルを用意しました。
version: "3"
services:
app:
container_name: app
build: ./docker/php
volumes:
- .:/var/www
nginx:
image: nginx
container_name: nginx
ports:
- 8000:80
volumes:
- .:/var/www
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
working_dir: /var/www
depends_on:
- app
db:
image: mysql:5.7
container_name: db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: database
MYSQL_USER: db-user
MYSQL_PASSWORD: db-pass
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker/db/sql:/docker-entrypoint-initdb.d
ports:
- 3306:3306
nginxとdbには既存のイメージを利用し、phpは設定の上書を行ったりするため、php用のディレクトリにDockerfileを作成してそちらから作成します。
2-2. PHP用のイメージを用意する
まず最初にphp.iniを作成します。
設定としては最小限の記述のみをしておきます。
続いてDockerfileを用意します。
php:fpmと指定することでDocker公式が提供しているPHPイメージをインストールします。
そのまま使用すると設定が違うため、先ほど作成したphp.iniで既存のphp.iniを上書しています。
これだけだと、phpのイメージコンテナ内でmysqlやcomposerなど、使用できないコマンドがあるため、別途必要なパッケージをインストールする記述を追記していきます。
設定としては最小限の記述のみをしておきます。
expose_php = Off
post_max_size = 128M
upload_max_filesize = 128M
date.timezone ="Asia/Tokyo"
mbstring.language = Japanese
mbstring.encoding_translation = Off
mbstring.detect_order = auto
続いてDockerfileを用意します。
FROM php:8.2-fpm
COPY php.ini /usr/local/etc/php/
php:fpmと指定することでDocker公式が提供しているPHPイメージをインストールします。
そのまま使用すると設定が違うため、先ほど作成したphp.iniで既存のphp.iniを上書しています。
これだけだと、phpのイメージコンテナ内でmysqlやcomposerなど、使用できないコマンドがあるため、別途必要なパッケージをインストールする記述を追記していきます。
RUN apt-get update \
&& apt-get install -y zlib1g-dev mariadb-client vim libzip-dev \
&& docker-php-ext-install zip pdo_mysql
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
WORKDIR /var/www
RUN composer global require "laravel/installer"
2-3. nginxの設定ファイルを用意する
次にnginxの設定ファイルを用意します。
こちらも先ほどのphp.iniと同様、最低限の記述のみを書きます。
こちらも先ほどのphp.iniと同様、最低限の記述のみを書きます。
http{
listen 80;
server_name www.example.com;
root /var/www/laravel-project/public;
index index.php;
charset UTF-8;
}
2-4. コンテナを起動する
最低限の設定ができたので、この状態でdocker-compose.ymlを使い、Dockerコンテナを起動します。
実行するとイメージコンテナの作成・起動が実行されます。
この状態でdocker psすると、下図のように、アプリケーション、nginx、dbのコンテナがそれぞれ起動している状態になります。
こちらからアプリケーションのコンテナにログインします。
Dockerコンテナの中に入れたので、以下コマンドを実行します。
以上で設定は終了です。
Laravelが起動したことを確認するため、ブラウザで以下URLへアクセスします。
http://localhost:8000
成功していれば、Laravelのウェルカムページが表示されます。
docker compose up -d
実行するとイメージコンテナの作成・起動が実行されます。
この状態でdocker psすると、下図のように、アプリケーション、nginx、dbのコンテナがそれぞれ起動している状態になります。
こちらからアプリケーションのコンテナにログインします。
docker compose exec app bash
Dockerコンテナの中に入れたので、以下コマンドを実行します。
composer create-project --prefer-dist laravel/laravel laravel-project "10.*"
以上で設定は終了です。
Laravelが起動したことを確認するため、ブラウザで以下URLへアクセスします。
http://localhost:8000
成功していれば、Laravelのウェルカムページが表示されます。