Skip to content
Mitsuru Mutaguchi edited this page Mar 19, 2024 · 51 revisions

概要

Windows10・11で開発環境をDockerで構築する手順です。

セットアップ

WSL2にディストリビューションをインストールする

コマンドプロンプト、もしくはPowerShellを管理者権限で起動し、インストールしてください。

wsl --install -d {distribution}

任意のユーザー、パスワードを入力すれば完了です。

参考:以下のコマンドでインストール可能なディストリビューションを確認できます。

wsl -l -o

Docker Desktopをインストールする

Docker公式サイトからダウンロード、インストールをしてください。
Docker Desktop for Mac and Windows | Docker

Connect-CMSをダウンロードする

WSLのターミナルにて、Connect-CMSをgit cloneして、ソースコードをダウンロードします。

VS CodeでWSLのターミナルを開く

以下の手順でターミナルを開きます。

  1. 「Remote - WSL」 をインストールする
  2. VSCの左下「><」をクリック、「New WSL Window」を選択しWSLに入る
  3. ターミナル(T) -> 新しいターミナル でWSLのターミナルを開く

git clone

Connec-CMSのソースコードをダウンロードします。

mkdir src # お好きなディレクトリにgit clone してください。
cd src
git clone https://github.com/opensource-workshop/connect-cms.git
cd connect-cms

DockerでConnect-CMSを立ち上げる

Docker Composeを利用して、WEB、DB、メールサーバーを立ち上げます。

docker-compose up -d

※ docker-composeが無い場合(The command 'docker-compose' could not be found)、Docker Desktopを起動すれば使えるようになります。

Connect-CMSをセットアップする

セットアップのシェルを用意しています。コンテナに入り、シェルを実行します。

docker exec -it app bash

# appコンテナにログイン

bash /var/www/html/connect-cms/docker/app/setup.sh
cd /var/www/html/connect-cms/

### ※ 開発環境の場合、下記コマンドも追加実行
COMPOSER=composer-dev.json composer install

動作確認

ブラウザからlocalhostを確認してください。 Connect-CMSの画面が確認出来れば完了です。

ソースコードを修正したい場合は、このままVSCのリモートウィンドウで進めると便利です。
もちろん、githubへpushできます。

参考:1度作った環境で開発を再開する

  1. Docker Desktopを起動
  2. VS CodeでWSLのターミナルを開く
    1. VS Code起動
    2. 「Remote Explore」>(Remote Explore上部)のセレクトボックス「WSL Tergets」選択
    3. Connect環境を選んで開くとVS Code「WSLのConnect環境」が開く
      1. その環境で Ctrl+@ でWSLのターミナル起動
  3. WSLのターミナルで操作
    1. DockerでConnect-CMSを立ち上げる
      • docker-compose up -d
    2. コンテナに入る
      • docker exec -it app bash
  4. localhostでConnect-CMSが見れる

他、やっておいたほうがよいこと

git設定 (WSL)

# github の ユーザー名、メールアドレスを設定
# これをやらないと、githubでcommit log がgithubのアカウントと紐づかないです
git config --global user.name {username}
git config --global user.email "{mail address}"
# 改行コードの自動変換 OFF
git config --global core.autocrlf false

Dockerがメモリを食いすぎてPCが重い場合

メモリが16GBあれば問題なさそうですが、8GBだと激重になることがあります。
そういうときは、WSLが使えるメモリを制限することで解消します。

Qiita 結論: 暫定対処でメモリサイズを固定する

Windowsにある.wslconfigを修正します。
メモリ8GBのPCでは、2GBでちょうどよかったです。

%USERPROFILE%.wslconfig

[wsl2]
memory=2GB
swap=0

phpのバージョンを切り替える場合

Connect-CMSのDockerfile修正

Connect-CMS/docker/app/Dockerfile

#FROM php:7-apache
FROM php:8.1-apache

コンテナ再作成

# appコンテナからログアウト後

docker pull php:8.1-apache
docker-compose build
docker-compose up -d

app コンテナに入ってphpのバージョン確認

docker exec -it app bash

# appコンテナにログイン

# php -v
PHP 8.1.10 (cli) (built: Sep  1 2022 21:16:25) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.10, Copyright (c) Zend Technologies

これでphpが切り替わりました。

DB情報

参考URL

参考:docker-composeコマンド

// 起動
docker-compose up -d

// 起動状態 確認
docker-compose ps

// コンテナID 確認
docker ps

// 停止
docker-compose stop

// コンテナ削除
docker-compose rm

// イメージも合わせて削除
docker-compose down --rmi all

参考:apache,php等のログ確認

docker-composeコマンドで確認

docker-compose logs -f app

Docker Desktopで確認

  • (左側) Containers>app (行)縦・・・押下>View details押下

参考:WSLでファイル修正したらpermission denied

git pull等でファイルの書きこみpermission が無くなった場合、書きこみができずにエラーになります。
その場合はコンテナ内で下記コマンド例を参考に、パーミッション変更やファイルオーナーを修正するとエラーが解消します。

chmod o+w -R /var/www/html/connect-cms/

permission deniedエラー

permission denied

参考:docker-compose up -dERROR [app internal] load metadata for docker.io/library/php:7-apache

対応

docker composeする前に、先に各イメージをpullしておく

docker pull php:7-apache

エラーログ

akagane99@vaiof14:~/connect-cms-docker$ docker-compose up -d
[+] Building 10.7s (2/2) FINISHED                                                                                                                                                              docker:default
 => [app internal] load build definition from Dockerfile                                                                                                                                                 0.0s
 => => transferring dockerfile: 1.48kB                                                                                                                                                                   0.0s
 => ERROR [app internal] load metadata for docker.io/library/php:7-apache                                                                                                                               10.7s
------
 > [app internal] load metadata for docker.io/library/php:7-apache:
------
failed to solve: php:7-apache: failed to authorize: failed to fetch anonymous token: Get "https://auth.docker.io/token?scope=repository%3Alibrary%2Fphp%3Apull&service=registry.docker.io": dial tcp: lookup auth.docker.io on 172.19.64.1:53: read udp 172.19.73.60:52132->172.19.64.1:53: i/o timeout

参考リンク

Clone this wiki locally