Help us understand the problem. What is going on with this article?

Dockerで環境構築 初心者編

dockerを使った環境構築を行ったのでその手順をご紹介します。
初めてdockerで環境構築を行ったので、少しでも参考になればと思います。

環境

環境     バージョン
PHP 7.0.27
FW CakePHP3.2.13
Apache 2.2.15
OS CentOS6.9
DB MySQL5.6.39

手順

  1. DockerフォルダDL
  2. Git Clone
  3. Docker コンテナに入る
  4. Apache起動
  5. ドキュメントルート設定
  6. Composer install
  7. mysql起動
  8. データベース作製
  9. app.phpの設定
  10. データベース接続

環境構築してみよう

DockerフォルダDL

今回は元々用意していたDockerFile,ymlファイルなどをまとめてダウンロードしてます。
下記、フォルダ構造になります。

-/
 |- docker-compose.yml
 |- docker
    |- db
    |   |- Dockerfile
    |   |- files
    |      |- entry.sh
    |      |- my.cnf
    |     
    |
    |- web
        |- Dockerfile
        |- files
           |- composer.phar
           |- dev.conf
           |- php.ini
           |- ssl.conf
 

Git Clone

githubにてプロジェクトの取得。
フォルダ構造は下記のようになりました。

-/
 |- project
 |- docker-compose.yml
 |- docker

Dockerコンテナに入る

コンテナに入る前にイメージの作製、コンテナを起動します。
コマンドラインで下記を実行する。

  • ビルド

    docker build
    // ビルドすることでdocker fileからイメージが得られます。
    
  • コンテナの起動

    $ docker-compose up -d
    // コンテナを起動します。
    

     下記のコマンドで、ビルドとコンテナの起動を一度に行えます。
  • ビルドとコンテナの起動

    $ docker-compose up -d --build
    // イメージのビルドから始めてコンテナを起動します。
    
$ docker ps
//起動中のコンテナの確認

 

オプション-dについて


$ docker-compose up
// ターミナルでコンテナを起動しているため、同じターミナルでは作業できない。

$ docker-compose up -d
// コンテナをバックグラウンドで起動するため、同じターミナルで作業ができる。

下記のコマンドでコンテナに入ります。

$ docker exec -it CONTAINER ID /bin/bash
//CONTAINER IDは docker psをした際に確認できます。

Apache起動


webコンテナ内で、下記コマンドでApache起動する。
service httpd start
Apache起動

service httpd stop
Apache停止

service httpd restart
Apache再起動

/etc/init.d/httpd status
Apache状態確認

ドキュメントルート設定

web内のhttpd.confのドキュメントルートの設定を確認します。
今回のディレクトリ構造だとvar/www/htmlで問題なさそうです。

composer install

composer installができませんでした。
アクセス権限の問題だと思い、アクセス権限777に変更しました。
アクセス権限に関しては下記の記事を参考にしました。
https://qiita.com/t-a-run/items/239ed690ece7a011804a

下記、実行できました。
因みに、composer installはprojectフォルダで行いました。

compser install

この状態でアクセスするとデータベースエラーとブラウザに表示されます。
エラーの内容は、そのような(接続した)ファイルは見つからない。

database error(SQLSTATE[HY000] [2002] No such file or directory

mysql起動

mysqlを動作させます。
webコンテナに入った時、同様にdbコンテナに入ります。

service mysqld status
//mysqlの起動状態の確認
service mysqld start
//mysqlの起動

ログイン前に初期のユーザー名とパスワードを確認します。
DBコンテナ内でmysqld.logを確認します。

cat mysqld.log

A temporary password is〜に書いてあるユーザー名パスワードを取得。
ユーザー名:root

データベースにログインします。

docker exec -it コンテナID mysql -u root -p

パスワード再設定->データベース作製->テーブル作成をおこないます。

app.phpの設定

git clone時には、app.phpは含まれていません。作成しましょう。

-/
 |- project
    |- config
        |-app.php

app.phpの書き方はネットで検索すると出てきます。今回は他で使っていたファイルをそのままコピーして中身を編集しました。主にデータベースのしか触っていないです。
 'Datasources' => [
        'default' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'persistent' => false,
            'host' => 'localhost',
            /**
             * CakePHP will use the default DB port based on the driver selected
             * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
             * the following line and set the port accordingly
             */
            //'port' => 'non_standard_port_number',
            'username' => 'root',
            'password' => 'データベース作成時に設定したパスワード',
            'database' => 'データベース作成時に設定したパスワード',
            'port' => ポート番号,
            'encoding' => 'utf8',
            'timezone' => 'UTC',
            'flags' => [],
            'cacheMetadata' => true,
            'log' => false,

cat mysqld.log
A temporary password isに書いてあるパスワードを取得
->dbコンテナでmysqlをrestartし、ログイン->パスワード再設定->データベース作製->テーブル作成->

データベース接続

sequel proを使い、クイック接続にて接続テストを実行しました。
無事に接続完了しました。

ブラウザでlocalhostと検索すると無事開けました。

参考資料

docker-compose.yml の内容を理解しよう
https://futureys.tokyo/lets-understand-contents-of-docker-compose-yml/

Docker compose ことはじめハンズオン
https://qiita.com/TsutomuNakamura/items/7e90e5efb36601c5bc8a

Dockerfileの書き方と使い方
https://blog.codecamp.jp/docker-file-how-to

起動中の docker コンテナのシェルに入る
https://qiita.com/sekizo/items/27cc9b406332afc674f6

データベース作製
https://noumenon-th.net/programming/2019/04/01/docker-entrypoint-initdb01/

chmodで設定する権限の書き方
https://qiita.com/irasally/items/6ebc3c68e22905fb7330

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away