- 投稿日:2019-05-02T23:45:45+09:00
DockerでWordPress環境を構築
はじめに
本ページでは、
Dockerを用いてブログサイト作成用のOSS製品であるWordPress の実行環境を構築するハンズオンを通して、
Dockerの基本的な操作 と Dockerの利便性を学んでいただきます。前提条件
- ホストOS:CentOS 7
- Dockerインストール済み
※未インストールの場合は、 こちら を参考にインストールしてください。参考
こちら に よく使うDockerコマンドについてまとめていますので、ご参考ください。
それでは、WordPress環境を構築してみましょう
1. イメージファイルの準備
DockerHubからイメージファイルを取得します。
WordPress環境を構築するには、WordPressのDockerイメージに加えて、
DB用にMySQLのDockerイメージも必要です。以下2つのDockerイメージを使用します。
はじめに
docker search
コマンドで、Dockerイメージを検索してみましょう。$ docker search wordpress NAME DESCRIPTION STARS OFFICIAL AUTOMATED wordpress The WordPress rich content management system… 2940 [OK] bitnami/wordpress Bitnami Docker Image for WordPress 107 [OK] appcontainers/wordpress Centos/Debian Based Customizable Wordpress C… 34 [OK] etopian/alpine-php-wordpress Alpine WordPress Nginx PHP-FPM WP-CLI 20 [OK] centurylink/wordpress Wordpress image with MySQL removed. 14 [OK] ・・・検索結果が表示されました。
今回は OFFICIAL イメージである、wordpress
という名前のDockerイメージを使用します。同じく MySQL も検索してみましょう。
NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 8086 [OK] mariadb MariaDB is a community-developed fork of MyS… 2740 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Create… 604 [OK] zabbix/zabbix-server-mysql Zabbix Server with MySQL database support 188 [OK] hypriot/rpi-mysql RPi-compatible Docker Image with Mysql 113 ・・・こちらも検索結果が表示されました。
同じく OFFICIAL イメージである、mysql
という名前のDockerイメージを使用します。それでは、この2つのDockerイメージを取得(Pull)していきます。
mysql は wordpress との連携確認済みの5.7.21
をtag指定します。$ docker pull mysql:5.7.21 5.7.21: Pulling from library/mysql 2a72cbf407d6: Pull complete 38680a9b47a8: Pull complete 4c732aa0eb1b: Pull complete c5317a34eddd: Pull complete f92be680366c: Pull complete e8ecd8bec5ab: Pull complete 2a650284a6a8: Pull complete 5b5108d08c6d: Pull complete beaff1261757: Pull complete c1a55c6375b5: Pull complete 8181cde51c65: Pull complete Digest: sha256:691c55aabb3c4e3b89b953dd2f022f7ea845e5443954767d321d5f5fa394e28c Status: Downloaded newer image for mysql:5.7.21 $ docker pull wordpress Using default tag: latest latest: Pulling from library/wordpress 27833a3ba0a5: Pull complete 2d79f6773a3c: Pull complete f5dd9a448b82: Pull complete 95719e57e42b: Pull complete cc75e951030f: Pull complete 78873f480bce: Pull complete 1b14116a29a2: Pull complete 887fc426d9b4: Pull complete e8a2a7e68e47: Pull complete 44116bd4b499: Pull complete 5a7ed133cf7c: Pull complete a0cc2e7ce3b9: Pull complete 3ea943f2a6e6: Pull complete b7cbb4ae8469: Pull complete f1ee59d1627e: Pull complete 480e816f1b42: Pull complete 9803a14680f4: Pull complete a9d5149d7240: Pull complete 7a162cc00537: Pull complete Digest: sha256:eb7fb32d7098153b586cb6c0c8c7fb3b9684c66ccff803734b0895e49210fe08 Status: Downloaded newer image for wordpress:latest取得したDockerイメージを
docker images
コマンドで確認してみましょう。$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE wordpress latest 837092bc87de 3 weeks ago 421MB mysql 5.7.21 5195076672a7 13 months ago 371MBDockerイメージが取得できていることが確認できました。
2. Dockerコンテナの起動
イメージファイルから、コンテナを起動していきます。
まずは、MySQLコンテナを起動します。$ docker run -d -it --name test-mysql -e MYSQL_ROOT_PASSWORD=password mysql:5.7.21
-d
:コンテナをバックグラウンドでの実行するためのオプション
-it
:コンテナに標準入力とTTY(端末デバイス)を提供するオプション
→このオプションをつけると、コンテナにログインできるようになります。
--name
:コンテナにユーザ指定の名前を付与するオプション。
→ここでは、test-mysql という名前を付与しています。
-e
:環境変数を定義するオプション
→MySQLのパスワードとして 「password」を設定しています。つづいて、WordPressコンテナを起動します。
$ docker run -d -it --name test-wordpress --link test-mysql:mysql -p 18080:80 wordpress
--link
:複数のコンテナを連携するためのオプション
→WordPressコンテナに、先ほど起動した test-mysql コンテナを紐づけています。
-p
:ホストのIPをコンテナのIPとマッピングするためのオプション
→コンテナのポート 80(HTTP)を、ホストのポート 18080 にマッピングしています。起動したコンテナを
docker ps
コマンドで確認してみましょう。
-a
オプションをつけることで、停止中のコンテナを含めてすべて表示します。$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0482597eb65c wordpress "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 0.0.0.0:18080->80/tcp test-wordpress b3fe0d703916 mysql:5.7.21 "docker-entrypoint.s…" 12 minutes ago Up About a minute 3306/tcp test-mysqlwordpressコンテナと、mysqlコンテナが起動していることが確認できました。
3. WordPressコンテナに接続
ブラウザを起動して、http://<ホストのIPアドレス>:18080 にアクセスしてみましょう。
WordPress の初期画面が表示されました。
ここでは 日本語 を選択して、「続ける」 を押下してください。
つづいて、必要情報の入力を求められます。
サイトのタイトル、ユーザー名、パスワード、メールアドレス を入力してください。
※メールアドレスは、実在しないものでも構いません。
先ほど設定した、ユーザー名、パスワードを入力して「ログイン」を押下します。
WordPressが使用できるようになりました。
せっかくですので適当に触ってみてください。
WordPressでは、このようなブログサイトを簡単に作成することができます。4. コンテナ操作
起動中のコンテナにログインするには、
docker exec
コマンドを使用します。
docker exec
は、コンテナ内で指定したコマンドを実行します。
ここでは、/bin/bash
コマンドを起動することで bash ターミナルを起動し、
bashターミナルからコンテナ内の操作を行うことができるようになります。$ docker exec -it test-wordpress /bin/bash root@0482597eb65c:/var/www/html# ls -la total 208 drwxrwxrwx. 5 www-data www-data 4096 May 2 13:54 . drwxr-xr-x. 1 root root 18 Mar 27 01:00 .. -rw-r--r--. 1 www-data www-data 235 May 2 14:03 .htaccess -rw-r--r--. 1 www-data www-data 420 Nov 30 2017 index.php -rw-r--r--. 1 www-data www-data 19935 Jan 1 20:37 license.txt -rw-r--r--. 1 www-data www-data 7425 Jan 9 02:56 readme.html -rw-r--r--. 1 www-data www-data 6919 Jan 12 06:41 wp-activate.php drwxr-xr-x. 9 www-data www-data 4096 Mar 13 00:18 wp-admin -rw-r--r--. 1 www-data www-data 369 Nov 30 2017 wp-blog-header.php -rw-r--r--. 1 www-data www-data 2283 Jan 21 01:34 wp-comments-post.php -rw-r--r--. 1 www-data www-data 2808 May 2 13:54 wp-config-sample.php -rw-r--r--. 1 www-data www-data 3176 May 2 13:54 wp-config.php drwxr-xr-x. 7 www-data www-data 99 May 2 14:07 wp-content -rw-r--r--. 1 www-data www-data 3847 Jan 9 08:37 wp-cron.php drwxr-xr-x. 19 www-data www-data 8192 Mar 13 00:18 wp-includes -rw-r--r--. 1 www-data www-data 2502 Jan 16 05:29 wp-links-opml.php -rw-r--r--. 1 www-data www-data 3306 Nov 30 2017 wp-load.php -rw-r--r--. 1 www-data www-data 38883 Jan 12 06:41 wp-login.php -rw-r--r--. 1 www-data www-data 8403 Nov 30 2017 wp-mail.php -rw-r--r--. 1 www-data www-data 17947 Jan 30 11:01 wp-settings.php -rw-r--r--. 1 www-data www-data 31085 Jan 16 16:51 wp-signup.php -rw-r--r--. 1 www-data www-data 4764 Nov 30 2017 wp-trackback.php -rw-r--r--. 1 www-data www-data 3068 Aug 17 2018 xmlrpc.php root@0482597eb65c:/var/www/html# cat index.php <?php /** * Front to the WordPress application. This file doesn't do anything, but loads * wp-blog-header.php which does and tells WordPress to load the theme. * * @package WordPress */ /** * Tells WordPress to load the WordPress theme and output it. * * @var bool */ define( 'WP_USE_THEMES', true ); /** Loads the WordPress Environment and Template */ require( dirname( __FILE__ ) . '/wp-blog-header.php' );コンテナからログアウトするには
exit
を入力します。root@0482597eb65c:/var/www/html# exit exitコンテナを停止するには、
docker stop
コマンドを使用します。$ docker stop test-wordpress
docker ps -a
コマンドで、コンテナの状態を確認してみましょう。$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0482597eb65c wordpress "docker-entrypoint.s…" 33 minutes ago Exited (0) 6 seconds ago test-wordpress b3fe0d703916 mysql:5.7.21 "docker-entrypoint.s…" 45 minutes ago Up 34 minutes 3306/tcp test-mysqltest-wordpress コンテナが 停止(Exited(0))となっていることが確認できます。
ブラウザをリロードしてみると、
WordPressにアクセスできなくなっていることがわかります。コンテナを再度起動するには、
docker start
コマンドを使用します。$ docker start test-wordpress
docker ps -a
コマンドで、コンテナの状態を確認してみましょう。$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0482597eb65c wordpress "docker-entrypoint.s…" 38 minutes ago Up 4 seconds 0.0.0.0:18080->80/tcp test-wordpress b3fe0d703916 mysql:5.7.21 "docker-entrypoint.s…" About an hour ago Up 39 minutes 3306/tcp test-mysqltest-wordpress コンテナが 起動(UP)していることが確認できます。
ブラウザをリロードしてみると、
再びWordPressにアクセスできるようになっていることがわかります。5. 後片付け
起動したコンテナ、取得(Pull)したDockerイメージを削除しましょう。
まずは、コンテナを削除します。
コンテナを削除するには、docker stop
コマンドでコンテナを停止したのち、
docker rm
コマンドで、コンテナを削除します。$ docker stop test-wordpress $ docker stop test-mysql $ docker rm test-wordpress $ docker rm test-mysql
docker ps -a
コマンドで、コンテナが削除されていることが確認できます。$ docker ps -a CONTAINER ID IMAGE COMMAND CREATEつづいて、Docker イメージを削除します。
まずはdocker images
コマンドで、Docker イメージ一覧を確認します。$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE wordpress latest 837092bc87de 3 weeks ago 421MB mysql 5.7.21 5195076672a7 13 months ago 371MBDocker イメージを削除するには、
docker rmi
コマンドを使用します。$ docker rmi wordpress:latest Untagged: wordpress:latest Untagged: wordpress@sha256:eb7fb32d7098153b586cb6c0c8c7fb3b9684c66ccff803734b0895e49210fe08 Deleted: sha256:837092bc87def29cf6e40fbbe65dafee9715b5a64d32fc94aec7c73773805a29 Deleted: sha256:c76dd05c6fcb07bcda3b8d982978b7537f38f9b654649e69653c15fbfd1c20ee Deleted: sha256:2c4f25a6cdd08288d1df7282f545b5e5b4530e5c236243a43ce593fd78f4bac4 Deleted: sha256:5df0a75e0c8651eaf6cb85dbb4c615b91792f9d26fe36c07fc014f267559bb0e Deleted: sha256:d7db080c0d7ad12bb9d11917cad9d923c76a582766339099101c7925cbe30ef5 Deleted: sha256:cdd4986c7ffa5488603aef15a0d744c87ec7d3cef4071f9403a136df84f434a4 Deleted: sha256:de0022b247a256c3f5a2d6588bef354dadc81b08602763e94a000294ded1bc5d Deleted: sha256:aa988a8f2b781c15509381977bc1f12df337537c83738bf67eae8bcc85d75827 Deleted: sha256:ba59a6f26aa22f6ef9f2a63bf5a51b3117fb22fb04f12c41bd952faf92c8b6e7 Deleted: sha256:47bdab2bb3d864d3a7a0962326932e38d927a7906dc6aacc57eb524f17ada731 Deleted: sha256:9ced8dd73fb478fb39612794f846211860dcb385902413affbd7919525db7e96 Deleted: sha256:18b2306bc0923de694a056448d2d2e33439f6d02b36b0c6a3d0ed7c323dd4418 Deleted: sha256:17e42b23df8e620e13fa4130fd9a04c43589b5b348480513518fbf6ce9694dfb Deleted: sha256:dca11b225a640f6c1dac7264469049213078a7c63e99f764851f3a9167463757 Deleted: sha256:aa6e5d2a1c7485b528c7b47ac0aa15a158edc489ce09ae8393b2ed0f6219bd8e Deleted: sha256:80537a100f0e62fa82ca4420923b120192d72471f1965e7309ffec811de4670b Deleted: sha256:bad56acc3d625fc0cc379915485cb4f396730097ec1734205f828c7d43d02715 Deleted: sha256:4d0b85a183f5c00e734d5ad7b81c97e97dd8af3b55d5cf929125238faa0c8bf8 Deleted: sha256:ab76068f12a968afdfbabdad9a850102607c5095d3b34ed3b8e00a15ff72639a Deleted: sha256:5dacd731af1b0386ead06c8b1feff9f65d9e0bdfec032d2cd0bc03690698feda $ docker rmi mysql:5.7.21 Untagged: mysql:5.7.21 Untagged: mysql@sha256:691c55aabb3c4e3b89b953dd2f022f7ea845e5443954767d321d5f5fa394e28c Deleted: sha256:5195076672a7e30525705a18f7d352c920bbd07a5ae72b30e374081fe660a011 Deleted: sha256:bc52f6d08bc65c22baab4384ae534d4c5ba8c988197de49975e0a0f78310dd89 Deleted: sha256:b2590548a0917767b420cf20d0cef3aae8912314de216f624c0840f3ad827aa7 Deleted: sha256:756d63a7d5896b52d445ea84ee392cb08a7c119322cfcdfed6303de1ed0d0eab Deleted: sha256:8e4736576db75536185beba95c5877deeb3915740688cbbc17fe04aed3632282 Deleted: sha256:e6e6e1bb8a16eadbe6628770767615fbc8d67bf11dde69a902116efe847baa7e Deleted: sha256:080b6c4ec1d55d91a7087e12ae3bd4df252148d94f9911209e0a83d50dc63784 Deleted: sha256:58b97da9f98f75af01ae59c3cb1fdd07a07297015459f3f9f88b140699b29147 Deleted: sha256:3918448e7fe95f36f67a55c938559bab787249b8fa5c7e9914afd46994d045b0 Deleted: sha256:fac8373d1ec4f5bb6c13f12170f558edc3cfbfe8215ae3d1c869940401bc14cf Deleted: sha256:130f3e567e288fdbbc3ae7cd7aa6c8b3d952bebd3eae58f0a7da93acbb22a258 Deleted: sha256:3358360aedad76edf49d0022818228d959d20a4cccc55d01c32f8b62e226e2c2再度
docker images
コマンドを入力すると、
Docker イメージが削除されていることが確認できます。$ docker images REPOSITORY TAG IMAGE ID CREATED SIZEハンズオンは以上です。 お疲れ様でした。
- 投稿日:2019-05-02T23:11:41+09:00
IBM Cloud Private (ICP) 用の各種 CLI を含む Dockerfile を作成しました
はじめに
IBM Cloud Private (ICP) では
kubectl
やhelm
など各種 CLI のインストーラが付属しますが、バージョンが最新でないため既存の Cloud Foundry や Kubernetes へのアクセス環境と衝突する場合があります。また個々にインストールする必要があるため手間がかかります。この問題を解決するため ICP Version 3.1.2 に含まれる各種 CLI の導入を含む Dockerfile を作成しました。
- ICP CLI (cloudctl)
- Kubernetes CLI (kubectl)
- Docker (docker)
- Helm CLI (helm)
- Cloud Foundry CLI (cf)
- Istio CLI (istiocli)
本稿では作成した Dockerfile の使い方とトラブルシューティングについて記述します。
なお CLI のセットアップを含む資料にはこちらを利用させていただきました。Docker の導入に始まり、Kubernetes、Helm まで体験する良い自習教材です。
「ICP入門セルフ・ハンズオン」
https://github.com/ICpTrial/ICPSelfLab/blob/master/README.mdDockerfile の使い方
環境
- ICP Version 3.1.2
- macOS 10.14.4 (Mojave)
クラスター情報は以下を決め打ちしています。異なる場合は適宜、編集してください。
- クラスター名: mycluster.icp
- クラスターアカウント: admin
ビルド手順
GitHub から Dockerfile を取得します。
コマンドgit clone https://github.com/naomizenge/icp-clis.git cd icp-clis
イメージのビルドに必要なファイル、情報を取得します。不要な CLI があれば該当の手順を省略し、Dockerfile からも削除してください。
1) ICP クラスターの IP アドレスを控えます。
2) Docker イメージ管理に必要な証明書を取得します。詳細はこちらを参照してください。コマンドscp root@<cluster_CA_domain>:/etc/docker/certs.d/<cluster_CA_domain>\:8500/ca.crt ./ca.crt
3) Kubernetes CLI 設定に必要なトークンを取得します。
i) ICP ダッシュボードにログインします。
ii) 右上のユーザーアイコンをクリックし、「クライアントの構成」をクリックします。
iii) 中の--token=
で指定されたトークンをコピーします。イメージをビルドします。オプションには上で指定した値やファイルへのパスを指定してください。
コマンドdocker image build \ --build-arg MYCLUSTER_IP= "192.168.27.100" \ --build-arg MYCLUSTER_TOKEN="abcabc..." \ --build-arg CA_CRT_FILE="./ca.crt" \ -t nzenge/icp-clis:1.0 .リポジトリ内には同じコマンドを発行するビルド実行用のスクリプトファイル
build.sh
もあります。ファイルを編集して必要な変数を指定し、実行してください。実行手順
以下のコマンドを実行すると、各種 CLI を実行可能な状態でシェルが開きます。IP アドレス
192.168.27.100
は上で指定した ICP の IP アドレスで置換してください。コマンドdocker container run \ -v ${PWD}:/workspace \ -v /var/run/docker.sock:/var/run/docker.sock \ --add-host mycluster.icp:"192.168.27.100" \ --add-host api.apps.kube.cf.icp.net:"192.168.27.100" \ --add-host uaa.apps.kube.cf.icp.net:"192.168.27.100" \ --add-host doppler.apps.kube.cf.icp.net:"192.168.27.100" \ --add-host ssh.apps.kube.cf.icp.net:"192.168.27.100" \ --rm -it --name myicp nzenge/icp-clis:1.0リポジトリ内には同じコマンドを実行するスクリプトファイル
run.sh
があります。ファイルを編集して必要な変数を指定し、実行してください。各種 CLI の設定方法
Dockerfile 内部で実行している各種 CLI の導入方法の詳細については、それぞれのドキュメントを参照してください。
ICP、Kubernetes、Helm、Istio
- ICP ダッシュボード > 左上のハンバーガーメニュー > コマンド・ライン・ツール > Cloud Private CLI
Docker
Cloud Foundry
トラブルシューティング
ICP を最初に使い始めて「あれ?」となる項目についてまとめました。
Q:
kubectl version
でエラー「You must be logged in to the server」が出力される。エラーroot@46d9ac5bb482:/# kubectl version Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.4", GitCommit:"f49fa022dbe63faafd0da106ef7e05a29721d3f1", GitTreeState:"clean", BuildDate:"2018-12-14T07:10:00Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"linux/amd64"} error: You must be logged in to the server (the server has asked for the client to provide credentials)A: ICP サーバーにまずログインする必要があります。
cloudctl
コマンドを使用します。正常root@46d9ac5bb482:/# cloudctl login -a https://mycluster.icp:8443 -u <user> -p <password> -n default --skip-ssl-validation Authenticating... OK Targeted account mycluster Account (id-mycluster-account) Targeted namespace default Configuring kubectl ... Property "clusters.mycluster" unset. Property "users.mycluster-user" unset. Property "contexts.mycluster-context" unset. Cluster "mycluster" set. User "mycluster-user" set. Context "mycluster-context" created. Switched to context "mycluster-context". OK Configuring helm: /root/.helm OK root@46d9ac5bb482:/# kubectl version Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.4", GitCommit:"f49fa022dbe63faafd0da106ef7e05a29721d3f1", GitTreeState:"clean", BuildDate:"2018-12-14T07:10:00Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.4+icp-ee", GitCommit:"d03f6421b5463042d87aa0211f116ba4848a0d0f", GitTreeState:"clean", BuildDate:"2019-01-17T13:14:09Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"linux/amd64"} root@46d9ac5bb482:/#Q:
helm version
でサーバー情報の取得に失敗する。エラーroot@46d9ac5bb482:/# helm version Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"} Error: cannot connect to TillerA: サーバーの Tiller にアクセスするには「--tls」オプションを付ける必要があります。
正常root@46d9ac5bb482:/# helm version --tls Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.9.1+icp", GitCommit:"8ddf4db6a545dc609539ad8171400f6869c61d8d", GitTreeState:"clean"} root@46d9ac5bb482:/#Q;
docker login
でエラー「Service Unavailable」または「Client.Timeout exceeded while awaiting headers」が出力される。エラーroot@b4055f512e92:/# docker login mycluster.icp:8500 Username: admin Password: Error response from daemon: Get https://mycluster.icp:8500/v2/: Service Unavailableまたは
エラーroot@7ec99293c23e:/# docker login mycluster.icp:8500 Username: admin Password: Error response from daemon: Get https://mycluster.icp:8500/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) root@7ec99293c23e:/#A: ホスト側の /etc/hosts を確認し、ドメイン名(ここでは「mycluster.icp」)と IP アドレスが含まれることを確認してください。コンテナ内部ではなく、ホスト側(ここでは Mac 側)の /etc/hosts です。
/etc/hosts.ini192.168.27.100 mycluster.icp
- 投稿日:2019-05-02T22:22:29+09:00
一足遅れて Kubernetes を学び始める - 04. kubectl -
前回
一足遅れて Kubernetes を学び始める - 03. Raspberry Pi -では、RaspberryPiの環境にKubernetesを導入しました。無事、動作確認ができたので、さっそく学習していきたいです。
参考
「Kubernetes完全ガイド」を読んで進めてみます。ソースコードはこちら
※ オリジナルはこちら以前の投稿では、入門 Kubernetesを参考にしていましたが、Kubernetes完全ガイドの方が網羅的に学べて良かったで、そちらを使いました。
kubectl
Kubectl is a command line interface for running commands against Kubernetes clusters
※ https://kubernetes.io/docs/reference/kubectl/overview/
kubernetesを操作するためのCLIです。
よく使うものを私なりに整理し、入門時に最小限覚えておけば良いものをまとめました。
1. apply
pi@raspi001:~ $ cat << EOF > sample-pod.yaml apiVersion: v1 kind: Pod metadata: name: sample-pod spec: containers: - name: nginx-container image: nginx:1.12 EOF pi@raspi001:~ $ kubectl apply -f sample-pod.yaml pod/sample-pod createdKubernetesでは、基本的にはマニフェストファイルを作成し、
apply
で適用するのが一般的のようです。それは、新規作成だけでなく、更新や削除も同様です。create
やreplace
,delete
といったCLIもありますが、apply
でも同様の操作ができるため、使い分ける必要はあまりありません。ただし、注意点として、apply
で登録したマニュフェストファイルは履歴として保存されていますが、フィールドを削除した場合はデフォルト値に設定されます。(まあ、そりゃそうだと思います)※ Kubernetes: kubectl apply の動作
2. set, get
pi@raspi001:~ $ kubectl set image pod sample-pod nginx-container=nginx:1.13 pod/sample-pod image updated pi@raspi001:~ $ kubectl get pod sample-pod NAME READY STATUS RESTARTS AGE sample-pod 1/1 Running 1 13mkubectlでは、どのリソース種類(
pod
,service
,etc)で、どのリソース名なのかを教えてあげる必要があります。
また、フィルタリングする機能としてlabel
があります。pi@raspi001:~ $ kubectl get pod -l env=prod No resources found. pi@raspi001:~ $ cat << EOF > sample-pod-label.yaml apiVersion: v1 kind: Pod metadata: name: sample-pod labels: env: prod app: sample spec: containers: - name: nginx-container image: nginx:1.12 EOF pi@raspi001:~ $ kubectl apply -f sample-pod-label.yaml pod/sample-pod configured pi@raspi001:~ $ kubectl get pod -l env=prod NAME READY STATUS RESTARTS AGE sample-pod 1/1 Running 0 7m23s更に詳細の情報が必要な場合は、
describe
を使います。pi@raspi001:~ $ kubectl describe pod sample-pod Name: sample-pod ...
※
edit
という直接編集する方法もありますが、一時的な対応のみに利用するべきとのことです。
せっかくの宣言的ファイルが意味ないですよね。余談ですが、
service
をsvc
という風に省略できたりします。
※ (備忘)kubectl コマンドでの短縮リソース名3. debug
pi@raspi001:~ $ kubectl exec -it sample-pod /bin/sh # exit pi@raspi001:~ $ kubectl logs sample-pod pi@raspi001:~ $ kubectl cp sample-pod.yaml sample-pod:/var/sample-pod.yaml pi@raspi001:~ $ kubectl port-forward sample-pod 8888:80 Forwarding from 127.0.0.1:8888 -> 80 Forwarding from [::1]:8888 -> 80どれも
pod
に対する操作なためリソース種類の指定はありません。どれも開発時に必要が迫られれば使う感じですね。99. top
こちら、どうしても動作できませんでした... ??
今はそこまで必要としないので、一旦見送ります。
calico
だかflannel
とかが関係しているっぽいのですが、理解が浅いため未解決です。お片付け
pi@raspi001:~ $ kubectl delete pod sample-pod pod "sample-pod" deleted複数のpodを扱っているなら、
delete
よりもapply --prune
の方が良いですが、今回は単体podなので、直接delete
しました。おわりに
入門当初は、どれほど覚えなくてはいけないのかと不安になっていたのですが、
蓋を開けてみると、そこまで多くはありませんでした。(まだ知らないものは多いと思いますが)
規則性として、 リソース種類とリソース名を指定する習慣にも徐々に慣れてきました。
面倒なときは、kubectl get all
で全部出すという荒業も覚えました。(笑)次回はこちらです。
- 投稿日:2019-05-02T21:51:01+09:00
docker コマンド チートシート
DockerHub
Docker イメージ関連のコマンド
DockerHubからDockerイメージを検索
$ docker search <IMAGE> -------------------------------------------------- [ex] 'nginx' で検索 $ docker search nginxDockerイメージの取得(Pull)
$ docker pull <IMAGE>[:TAG] -------------------------------------------------- [ex] 'nginx:1.12' のDockerイメージを取得 $ docker pull nginx:1.12tag指定を省略した場合、デフォルトで
latest
が指定される取得した Dockerイメージ 一覧を表示
$ docker imagesDockerイメージの削除
$ docker rmi <IMAGE>[:TAG] -------------------------------------------------- [ex] 'nginx:1.12' のDockerイメージを削除 $ docker rmi nginx:1.12Dockerコンテナ操作関連のコマンド
Dockerコンテナを作成、起動
$ docker run -d -it --name <CONTAINER_NAME> -p <ホストのポート>:<コンテナのポート> <IMAGE>[:tag] [ex] 'nginx:1.12' のDockerイメージから、'test-nginx'という名前のコンテナを作成。 コンテナの80ポートを、ホストの8080ポートでポートフォワーディング。 $ docker run -d -it --name test-nginx -p 8080:80 nginx:1.12ローカルにDockerイメージが存在すれば、そのイメージを用いて起動。
Dockerイメージが存在しなければ、自動的にDockerHubからpullを行ってから起動。nginx接続確認
ブラウザを起動し、
http://<ホストのIPアドレス>:8080
にアクセス。起動オプション
-d
:コンテナをバックグラウンドで実行-it
:コンテナの標準入力、およびtty(端末デバイス)の提供--name
:識別しやすいようにコンテナにユーザ指定の名称を付与-p
:ホストのIPをコンテナのIPとマッピングDockerコンテナ 一覧を確認
$ docker ps -a
-a
オプションをつけると、停止中のコンテナを含め全てのコンテナを表示Dockerコンテナ に接続
$ docker exec -it <CONTAINER> /bin/bash [ex] test-nginx コンテナに接続 $ docker exec -it test-nginx /bin/bashDockerコンテナ からログアウト
$ exitDockerコンテナ と ホスト間で、ファイルやフォルダのコピー
### コンテナからホストへコピー $ docker cp <CONTAINER>:<コンテナのパス> <保存するホストのパス> ### ホストからコンテナへコピー $ docker cp <ホストのパス> <CONTAINER>:<保存するコンテナのパス>Dockerコンテナ情報を確認
$ docker inspect <CONTAINER> [ex] test-nginx コンテナ情報を確認 $ docker inspect test-nginxDockerコンテナログを取得
$ docker logs <CONTAINER> [ex] test-nginx コンテナのログを取得 $ docker logs test-nginx
--tail=10
:末尾から10行表示
-f
:出力を表示しつづけるDockerコンテナ 停止
$ docker stop <CONTAINER> [ex] test-nginx コンテナを停止 $ docker stop test-nginxDockerコンテナ 再起動
$ docker start <CONTAINER> [ex] test-nginx コンテナを再起動 $ docker start test-nginxDockerコンテナ 削除
$ docker rm <CONTAINER> [ex] test-nginx コンテナを削除(コンテナを停止させてから実行) $ docker stop test-nginx $ docker rm test-nginx
- 投稿日:2019-05-02T21:51:01+09:00
Docker コマンド チートシート
はじめに
本ページでは、コンテナ型仮想化環境 Docker について、
初めて触るという方のために 主要なコマンド を掲載しています。Docker コマンドの チートシート としてお使いいただくこともできますし、
掲載しているコマンドを上から順にお試しいただくことで、
Docker の動作を確認できる ハンズオン としてお使いいただくこともできます。前提条件
- Docker がインストールされていること
※未インストールの場合は、こちら を参考にインストールを実施してください。DockerHub
https://hub.docker.com/
Dockerコンテナを公開可能なインターネット上の共有リポジトリです。
世界中から、Dockerコンテナを取得・公開・共有することができます。
Docker コマンド
上から順にコマンドを追うことで、ハンズオンとしてもお使いいただけます。
Docker イメージ関連のコマンド
DockerHubからDockerイメージを検索
$ docker search <IMAGE> -------------------------------------------------- [ex] 'nginx' で検索 $ docker search nginxDockerイメージの取得(Pull)
$ docker pull <IMAGE>[:TAG] -------------------------------------------------- [ex] 'nginx:1.12' のDockerイメージを取得 $ docker pull nginx:1.12tag指定を省略した場合、デフォルトで
latest
が指定される。取得した Dockerイメージ 一覧を表示
$ docker imagesDockerイメージの削除
$ docker rmi <IMAGE>[:TAG] -------------------------------------------------- [ex] 'nginx:1.12' のDockerイメージを削除 $ docker rmi nginx:1.12Dockerコンテナ操作関連のコマンド
Dockerコンテナを作成、起動
$ docker run -d -it --name <CONTAINER_NAME> -p <ホストのポート>:<コンテナのポート> <IMAGE>[:tag] [ex] 'nginx:1.12' のDockerイメージから、'test-nginx'という名前のコンテナを作成。 コンテナの80ポートを、ホストの8080ポートでポートフォワーディング。 $ docker run -d -it --name test-nginx -p 8080:80 nginx:1.12ローカルにDockerイメージが存在すれば、そのイメージを用いて起動。
Dockerイメージが存在しなければ、自動的にDockerHubからpullを行ってから起動。nginx接続確認
ブラウザを起動し、
http://<ホストのIPアドレス>:8080
にアクセス。起動オプション
-d
:コンテナをバックグラウンドで実行-it
:コンテナの標準入力、およびtty(端末デバイス)の提供--name
:識別しやすいようにコンテナにユーザ指定の名称を付与-p
:ホストのIPをコンテナのIPとマッピングDockerコンテナ 一覧を確認
$ docker ps -a
-a
オプションをつけると、停止中のコンテナを含め全てのコンテナを表示Dockerコンテナ に接続
$ docker exec -it <CONTAINER> /bin/bash [ex] test-nginx コンテナに接続 $ docker exec -it test-nginx /bin/bashDockerコンテナ からログアウト
$ exitDockerコンテナ と ホスト間で、ファイルやフォルダのコピー
### コンテナからホストへコピー $ docker cp <CONTAINER>:<コンテナのパス> <保存するホストのパス> ### ホストからコンテナへコピー $ docker cp <ホストのパス> <CONTAINER>:<保存するコンテナのパス>Dockerコンテナ情報を確認
$ docker inspect <CONTAINER> [ex] test-nginx コンテナ情報を確認 $ docker inspect test-nginxDockerコンテナログを取得
$ docker logs <CONTAINER> [ex] test-nginx コンテナのログを取得 $ docker logs test-nginx
--tail=10
:末尾から10行表示
-f
:出力を表示しつづけるDockerコンテナ 停止
$ docker stop <CONTAINER> [ex] test-nginx コンテナを停止 $ docker stop test-nginxDockerコンテナ 再起動
$ docker start <CONTAINER> [ex] test-nginx コンテナを再起動 $ docker start test-nginxDockerコンテナ 削除
$ docker rm <CONTAINER> [ex] test-nginx コンテナを削除(コンテナを停止させてから実行) $ docker stop test-nginx $ docker rm test-nginx後片付け
ハンズオンとしてコマンドを上から順にお試しいただいた方は、
最後に Dockerイメージを削除すれば元どおりの状態になります。$ docker rmi nginx:1.12以上です。お疲れ様でした。
- 投稿日:2019-05-02T15:46:23+09:00
dockerの0からの入門としてはむずい 〜Udemy感想その7〜
概要
Udemyで受講した講座の感想を書いています
僕がまだまだエンジニアリングの知識が少ないので
同じような初心者の方の参考になれば幸いです
今回はdockerのコースの感想です受講した講座
ゼロからはじめる Dockerによるアプリケーション実行環境構築
日本語の講座です
時間は5.5時間と割と短め
dockerのインストールの仕方など基本的なところからイメージの取得、作成方法、
docker-composeでrailsで開発環境を作るなど
ああ、実際に使えそう、便利そうだなといった使い方まで
実際に手を動かしながら勉強することができます受講したときの自分のレベル
会社の研修でdockerを触ったことはあり、
run、exec、stop、lsはとりあえず知ってるDockerfileは一回書いたことある程度でした
よかった点
- 機能紹介に止まらず、実際にrailsやdjangoを動かすことができた
一応技術としては知っていて、便利そうなのもわかるんだけど
どう使えばいいかわからないって感じからのスタートだったので
imageをpullしてきたらすぐにmysqlが使えるようになったり、
数行のdocker-compose.ymlを書いたら
すぐにrailsとpostgresを使用した開発環境が出来上がりサーバーを起動できたなど
個人で開発を行う上で使えそうな技術を具体的に教わることができました今ひとつだった点
- 更新されていない(反映されていない?)
途中動画の通りに設定ファイルを作ったのにうまく動かないことがあり、
散々調べたんですが解決しないことがありました結果的に講座のQAのところに同じような質問があり解決したのですが、
動かないことが判明しているのであれば動画に注意書きか何か欲しかった。。
最終更新は2019年1月と割と最近なのでただ単に動画は変更しなかっただけなのでしょうか
(最初からQA見ろよって話なんですがエラー出たらとりあえずログみたりググったりするのが癖なので、、)
- ちょっと説明があっさりし過ぎかも
imageとかの説明はわかりやすかったのですがswarmの部分の概念の説明は
もうちょっと時間かけて欲しかった僕はk8sを知ってたのでなんとかついていけましたが
0からっていうからにはもう少し丁寧に説明があってもいいんじゃないかと思いましたまとめ
少し説明が少ない部分はありますが多くのコマンドの使い方を説明してくれてますし
時間も5.5時間と短いのでdocker一通り触ってみようって時には
いいかもしれません
- 投稿日:2019-05-02T13:37:12+09:00
Laravelとdockerの開発環境でMailHogを使ってメール送信する
Laravelでメールを送信するアプリケーションを開発している間は、実際のメールアドレスにメールを送信したくはありません。ローカルでの開発環境ではMailHogを使って、「ダミー」のメールボックスへメールメッセージを送る方法がとても便利です。
以前の Laravel5の環境をdockerで構築した記事 の続きです。
環境
- Laravel 5.8.3
- PHP 7.3.4
Laravel環境構築してテストメールを送信するまで
$ git clone git@github.com:ucan-lab/docker-laravel5.git $ cd docker-laravel5 $ docker-compose up -d --build $ docker-compose exec app composer create-project --prefer-dist "laravel/laravel=5.8.*" .ここまでのコマンドでLaravelの環境構築が完了です。
$ docker-compose exec app ash $ sed -i -e "s/MAIL_HOST=.*/MAIL_HOST=mail/" .env $ sed -i -e "s/MAIL_PORT=.*/MAIL_PORT=1025/" .env $ php artisan tinker Mail::raw('test mail',function($message){$message->to('test@example.com')->subject('test');});
.env
のMAIL_HOST
とMAIL_PORT
の設定を書き換えます。
tinkerを起動して、テストメールを送信してみます。テストメールを受信できていればokです。
MailHog とは
MailHogは開発者向けの電子メールテストツールです。
Laravelで送信したメールの内容をブラウザ上で確認できます。
宛先に設定した実際のメールアドレス宛には送信されません。Homebrewでインストールできたり、DockerHubにイメージが公開されているので導入が非常に簡単です。
- SMTPサーバーの標準ポートは
1025
- HTTPサーバーの標準ポートは
8025
- メモリ内のメッセージストレージを使用(コンテナを再起動するとクリアされる)
- 届いたメールはほぼリアルタイムで受信トレイに表示
docker-compose.yml の設定例
実際の設定はこちらのご参考ください。
https://github.com/ucan-lab/docker-laravel5/pull/8/filesDockerHubにMailHogのイメージが登録されているので、
docker-compose.yml で指定すると簡単に導入できます。# docker-compose.yml mail: image: mailhog/mailhog ports: - ${MAILHOG_PORT}:8025Laravel側の
.env
のMAIL_HOST
には コンテナ名を指定します。
MAIL_PORT
には MailHog の SMTP のポート番号を指定します。# .env MAIL_HOST=mail MAIL_PORT=1025参考
- 投稿日:2019-05-02T13:17:47+09:00
開発環境も本番環境もDocker
作業環境
■前提
- Docker for Macインストール済み
- AWS EC2インスタンス作成済み■環境
- macos high sierra 10.13.6
- EC2 Amazon Linux AMI release 2018.03なぜ興味を持った
今年の1月〜4月までは開発環境の構築の仕事をする時には差分を調べて本番環境に合わすことに多くの時間を使いました。Docker/Kubernetes 実践コンテナ開発入門という本を読んで開発環境も本番環境もDockerにすれば環境差異問題からの脱却することができるを知って、もうすでにかもしれませんがこれからはこれだと思いました!!!
解説
全体の流れ
- Docker for Macで開発環境を作って開発をする。
- インフラとアプリケーションを同梱した箱のようなコンテナのイメージを作成してDocker Hubにプッシュ。
- EC2のLinux上のDockerを使ってDocker Hubにプッシュしたイメージを取得してこれを使って本番環境を作成する。
※ 開発環境はDocker for Windowsだと本番環境はLinux環境で上手く行かないの情報はありましたが、Docker for Macでは問題なくできました。開発環境
- ディレクトリの構成
- delusion_quiz
アプリケーションの実体- Dockerfile
Dockerコンテナの構成内容をまとめて記述されているファイル
- docker-compose.yml
yaml でDocker コンテナに関する起動オプションを記述したファイルDockerfileFROM php:7.0.21-apache COPY ./delusion_quiz/ /var/www/htmldocker-compose.ymlversion: "3" services: echo: build: . ports: - 80:80以上の条件で下記のコマンドを実行するとos、ミドルウェア、phpのどれも揃ってアプリケーションが動くようになる
docker-compose up
- イメージを作成してDocker Hubにプッシュ
1. コンテナを確認
docker ps -a
2. コンテナをイメージにコミットする
docker commit 092723cefd67 iiwao/delusion_quiz:version1
3. コミットしたイメージを確認
docker image ls
4. イメージをDocker Hubにプッシュ
docker image push iiwao/delusion_quiz:version1
以上でDocker Hubにイメージがアップされる
本番環境
EC2のLinux上のdockerで以下を実行する
- Docker Hubからイメージを取得
docker pull iiwao/delusion_quiz:version1
- イメージをコンテナにビルドする
docker build -t iiwao/delusion_quiz .
- Docker実行環境の80ポート経由でHTTPリクエストを受けられるようにする
docker run -dit -p 80:80 iiwao/delusion_quiz:version1
以上で簡単な開発環境も本番環境もDockerが完成
EC2にデプロイしたアプリケーション
- 投稿日:2019-05-02T12:21:00+09:00
zshでdockerコマンドを補完する
すでに他のコマンドで補完が効いている前提です。
mkdir -p ~/.zsh/completion curl -L https://raw.githubusercontent.com/docker/cli/master/contrib/completion/zsh/_docker > ~/.zsh/completion/_docker.zshrcfpath=(~/.zsh/completion $fpath) zstyle ':completion:*:*:docker:*' option-stacking yes zstyle ':completion:*:*:docker-*:*' option-stacking yes
- 投稿日:2019-05-02T10:42:14+09:00
過去遺産:触れられない(untouchable)。 どこから手をつけたらいいか。
10年モノのインフラを3年がかりでカイゼンした
https://qiita.com/sasasin/items/30585a3a117d64973645すごいなと思ったのは、
githubにスクリプトをまとめたという点。
「監視項目がザル。」に手をいれたという点。
とにかく著者の思った方向に変更できたという点。git系
自分でもいろいろなソース、スクリプトをgit系にまとめようとしているがまだ道半ば。
bitbucket/github/gitlab連携環境構築 悪戦苦闘
https://qiita.com/kaizen_nagoya/items/87352fe88ceed2c1732d監視項目
監視項目が多すぎ、警告、エラーが多いと、結局何をすればいいかわからない。
具体的なことはかけないのでしょうが、具体的な中身を最初から見る項目、
件数変動だけ見る項目、複数の条件が成立したら警告をあげる項目など、
分類整理の過程が壺かも。3年弱片手間でNagiosを運用してきて学んだTips4点
https://qiita.com/terra_yucco/items/4a27dc02f927a8f05f96監視項目の過不足を無くすの大事
※この項目についてはまだベストプラクティスは得られていません。個々のサービスの違いから、複数の条件が成立したら警告をあげる 組み合わせのベストプラクティスはまだかけていません。
意志貫徹
何かを決めて、やろうとして実現するのは3つに1つくらい。
1年でやる予定のことを3年かかる場合をふくめて3つに1つ。
1年でやる予定のことを1年でできるのは10個に1つくらい。やろうとしたこと、やったことのうち、ほとんどがわからないのに、
現実的(reality)だと感じるのは、体系的だからだと思う。意志貫徹には体系的な取り組みが大事だとわかった。
その他
他にもすごいことはいろいろあるんだろう。
使っていなかったり、知らないシステムが多く、どこがどうすごいかは、具体的にはわかっていない。誰か、追認記事を書いて欲しいと思い、自分のかけるとこを書いたのがこれ。
必要なのは「車輪の再発明」ではなく「追試」
https://qiita.com/kaizen_nagoya/items/d773d57bc965cb2ab3eb意思疎通
情報蒐集にあたって、協力してもらえたのはなんとなくわかる。
自分に面倒なことを押し付けない人だという信頼が得られれば協力してもらえる。問題は、やり方を変えたものをやってくれるかどうか。
open な issue がどんどん溜まる現象を解決するために
https://qiita.com/kaizen_nagoya/items/efe22d9a23ad2e9934d6記録
gitでやることにしても、指示をgithubのissueにあげずに、
やった結果をgithubにあげずに、済ます人たちがいるとなんともならない。どんなことも記録する習慣を持とうとしてくれないと途方にくれる。
このあたりは、人に関することだからかけないんだろうな。
プログラマの「日報、週報、月報、年報」考
https://qiita.com/kaizen_nagoya/items/97ad8ac9217c12c3bb69どこから手をつけるか
記録、意思疎通、その手段としてのgit系。
まず、git系を使い倒すとこから始めねば。仕事はプログラミング。記録、意思疎通はdockerでだいぶ改善できてきた。
gitをうまく、、、。一番多い問題は、顧客のOSによって振る舞いの違うアプリや、
導入できないアプリなど。また、各OSでの支援(support)が、
いろいろなOSを導入していないとできないこと。かなりの部分はdockerで対応するようにしてきている。
言語処理100本ノック(python)をdockerで。
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4
なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2
65歳からのプログラミング入門
https://qiita.com/kaizen_nagoya/items/1561f910c275b22d7c9fWindows, macOS, Linux
普段はmacOS、サーバ系はLinux, 顧客の半分くらいはWindows。
3つのOSを継ぎ目なく利用できるようにするのが課題。特に、Windowsが過去遺産。
Windows(M.S.)にPython3(Anaconda3)を導入する(7つの罠)
https://qiita.com/kaizen_nagoya/items/7bfd7ecdc4e8edcbd679MacintoshでWindows導入失敗記録
https://qiita.com/kaizen_nagoya/items/d1ef10056c011f247fbfUbuntu導入(32bit)
https://qiita.com/kaizen_nagoya/items/67c2e69156e11a94229cEnterPrise ArchitectのWindows対応
https://qiita.com/kaizen_nagoya/items/55cdbdb1c81f0bedc153文書記録(document history)
ver. 0.01 初稿 20190502 朝
ver. 0.02 URL追記 20190502 午前
ver. 0.03 @terra_yucco さんの記事引用 20190502 昼
ver. 0.04 参照、タグ追記 20190502 午後
- 投稿日:2019-05-02T02:33:49+09:00
Laravelチュートリアル - 汎用業務Webアプリを作る(1/4) Laradockで環境構築
はじめに
これまで私はDjangoでいくつかのWebアプリを作ってきましたが、とある事情から今後Laravelに触れる必要が出てきました。
そこで、既存のDjangoアプリをLaravelで再現するチュートリアル記事を作成し、その過程を通してLaravelについて学ぶことにしました。
題材には、CRUD機能、検索機能、認証機能を持ち、Djangoを勉強する際にも大変お世話になった、下記Webアプリとさせていただきました。
Djangoチュートリアル - 汎用業務Webアプリを最速で作る - Qiita
チュートリアル全体の構成
- Laradockで環境を構築する(本記事)
- テーブルとCRUD画面を作る(作成中)
- 検索機能を作る(作成予定)
- 認証機能を作る(作成予定)
環境
- macOS High Sierra 10.13.6
- php 7.2.16
- Laravel 5.5.45
- PostgreSQL 9.6.2
1. Laradockで環境構築する
Laradockのコピー
プロジェクトのルートとなるディレクトリに、Laradockをコピーします。
$ git clone https://github.com/Laradock/laradock.git
laradock
ディレクトリ配下のenv-example
ファイルをコピーし、.env
ファイルを作成します。$ cd laradock laradock $ cp env-example .envPostgreSQLのバージョンの指定
PostgreSQLは9.6.12を使用することにします。
PostgreSQLのDockerファイルを以下の通り編集します。laradock/postgres/DockerfileFROM postgres:9.6.12 LABEL maintainer="Ben M <git@bmagg.com>" CMD ["postgres"] EXPOSE 5432コンテナの起動
コンテナを起動します。
laradock $ docker-compose up -d --build workspace postgres php-fpm nginxLaravelのインストール
Laravelをインストールします。
まず、起動したコンテナの中に入ります。
laradock $ docker-compose exec workspace bash続いて、Laravelをインストールします。
バージョンは5.5.*
にします。
また、Laravelとしてのプロジェクト名は、src
にします。/var/www# composer create-project --prefer-dist laravel/laravel src "5.5.*"データベースを作成する
コンテナの中に入ったまま、今度はPostgreSQLに接続し、データベースを作成します。
まず、PostgreSQLに接続します。
/var/www# psql -U default -h postgresパスワードを入力します。
Password for user default:続いて、データベースを作成します。
データベース名は、sample
にします。default=# create database sample;PostgreSQLとの接続を終了します。
default=# \qLaravelのタイムゾーンを日本時間にする
Laravelのタイムゾーンを日本時間にします。
src/config/app.php<?php return [ //略 'timezone' => 'Asia/Tokyo', //略 ];.envファイルの編集
Laravelの.envファイルを編集し、LaravelからPostgreSQLに接続できるようにします。
src/.envDB_CONNECTION=pgsql DB_HOST=postgres DB_PORT=5432 DB_DATABASE=sample DB_USERNAME=default DB_PASSWORD=secret最後に
以上で環境構築は完了です。
次の記事では、テーブルとCRUD画面の作成を行います。
参考
- 投稿日:2019-05-02T00:13:50+09:00
Windows10でDocker PHP7.2の開発環境を構築
環境
- Windows10
- Hyper-V
PHP7.02 + Apacheを起動する
イメージからコンテナを立ち上げる。(ローカルにimageがない場合はDocker Hubから取得してくれる。)
docker container run -d --name php-sample -v :/var/www/html -p 80:80 php:7.2-apacheコンテナが作られているか確認
docker container ls NAMESにphp-sampleが作られている事が確認できる。 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 501589adf392 php:7.2-apache "docker-php-entrypoi…" 9 minutes ago Up 9 minutes 0.0.0.0:80->80/tcp php-sampleコンテナにログインします。
docker container exec -it php-sample bashPHPファイルを作成
echo '<?php phpinfo();'> index.phpブラウザで確認