20190502のdockerに関する記事は12件です。

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       371MB

Dockerイメージが取得できていることが確認できました。

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-mysql

wordpressコンテナと、mysqlコンテナが起動していることが確認できました。

3. WordPressコンテナに接続

ブラウザを起動して、http://<ホストのIPアドレス>:18080 にアクセスしてみましょう。

image.png
WordPress の初期画面が表示されました。
ここでは 日本語 を選択して、「続ける」 を押下してください。

image.png
つづいて、必要情報の入力を求められます。
サイトのタイトル、ユーザー名、パスワード、メールアドレス を入力してください。
※メールアドレスは、実在しないものでも構いません。

image.png
初期設定が完了しました。「ログイン」を押下してみましょう。

image.png
先ほど設定した、ユーザー名、パスワードを入力して「ログイン」を押下します。

image.png
WordPressが使用できるようになりました。
せっかくですので適当に触ってみてください。

image.png
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-mysql

test-wordpress コンテナが 停止(Exited(0))となっていることが確認できます。

image.png
ブラウザをリロードしてみると、
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-mysql

test-wordpress コンテナが 起動(UP)していることが確認できます。

image.png
ブラウザをリロードしてみると、
再び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       371MB

Docker イメージを削除するには、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

ハンズオンは以上です。 お疲れ様でした。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

IBM Cloud Private (ICP) 用の各種 CLI を含む Dockerfile を作成しました

はじめに

IBM Cloud Private (ICP) では kubectlhelm など各種 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.md

Dockerfile の使い方

環境

  • 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 Tiller

A: サーバーの 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.ini
192.168.27.100  mycluster.icp 
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

一足遅れて 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 created

Kubernetesでは、基本的にはマニフェストファイルを作成し、applyで適用するのが一般的のようです。それは、新規作成だけでなく、更新や削除も同様です。createreplace,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          13m

kubectlでは、どのリソース種類(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という直接編集する方法もありますが、一時的な対応のみに利用するべきとのことです。
せっかくの宣言的ファイルが意味ないですよね。

余談ですが、servicesvcという風に省略できたりします。
(備忘)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で全部出すという荒業も覚えました。(笑)

次回はこちらです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docker コマンド チートシート

DockerHub

https://hub.docker.com/


Docker イメージ関連のコマンド

DockerHubからDockerイメージを検索

$ docker search <IMAGE>

--------------------------------------------------
[ex] 'nginx' で検索
$ docker search nginx

Dockerイメージの取得(Pull)

$ docker pull <IMAGE>[:TAG]

--------------------------------------------------
[ex] 'nginx:1.12' のDockerイメージを取得
$ docker pull nginx:1.12

tag指定を省略した場合、デフォルトで latest が指定される

取得した Dockerイメージ 一覧を表示

$ docker images

Dockerイメージの削除

$ docker rmi <IMAGE>[:TAG]

--------------------------------------------------
[ex] 'nginx:1.12' のDockerイメージを削除
$ docker rmi nginx:1.12

Dockerコンテナ操作関連のコマンド

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/bash

Dockerコンテナ からログアウト

$ exit

Dockerコンテナ と ホスト間で、ファイルやフォルダのコピー

### コンテナからホストへコピー
$ docker cp <CONTAINER>:<コンテナのパス> <保存するホストのパス>

### ホストからコンテナへコピー
$ docker cp <ホストのパス> <CONTAINER>:<保存するコンテナのパス>

Dockerコンテナ情報を確認

$ docker inspect <CONTAINER>

[ex] test-nginx コンテナ情報を確認
$ docker inspect test-nginx

Dockerコンテナログを取得

$ docker logs <CONTAINER>

[ex] test-nginx コンテナのログを取得
$ docker logs test-nginx

--tail=10:末尾から10行表示
-f:出力を表示しつづける

Dockerコンテナ 停止

$ docker stop <CONTAINER>

[ex] test-nginx コンテナを停止
$ docker stop test-nginx

Dockerコンテナ 再起動

$ docker start <CONTAINER>

[ex] test-nginx コンテナを再起動
$ docker start test-nginx

Dockerコンテナ 削除

$ docker rm <CONTAINER>

[ex] test-nginx コンテナを削除(コンテナを停止させてから実行)
$ docker stop test-nginx
$ docker rm test-nginx
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker コマンド チートシート

はじめに

本ページでは、コンテナ型仮想化環境 Docker について、
初めて触るという方のために 主要なコマンド を掲載しています。

Docker コマンドの チートシート としてお使いいただくこともできますし、
掲載しているコマンドを上から順にお試しいただくことで、
Docker の動作を確認できる ハンズオン としてお使いいただくこともできます。

前提条件

  • Docker がインストールされていること
    ※未インストールの場合は、こちら を参考にインストールを実施してください。

DockerHub

https://hub.docker.com/
Dockerコンテナを公開可能なインターネット上の共有リポジトリです。
世界中から、Dockerコンテナを取得・公開・共有することができます。


Docker コマンド

上から順にコマンドを追うことで、ハンズオンとしてもお使いいただけます。

Docker イメージ関連のコマンド

DockerHubからDockerイメージを検索

$ docker search <IMAGE>

--------------------------------------------------
[ex] 'nginx' で検索
$ docker search nginx

Dockerイメージの取得(Pull)

$ docker pull <IMAGE>[:TAG]

--------------------------------------------------
[ex] 'nginx:1.12' のDockerイメージを取得
$ docker pull nginx:1.12

tag指定を省略した場合、デフォルトで latest が指定される。

取得した Dockerイメージ 一覧を表示

$ docker images

Dockerイメージの削除

$ docker rmi <IMAGE>[:TAG]

--------------------------------------------------
[ex] 'nginx:1.12' のDockerイメージを削除
$ docker rmi nginx:1.12

Dockerコンテナ操作関連のコマンド

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/bash

Dockerコンテナ からログアウト

$ exit

Dockerコンテナ と ホスト間で、ファイルやフォルダのコピー

### コンテナからホストへコピー
$ docker cp <CONTAINER>:<コンテナのパス> <保存するホストのパス>

### ホストからコンテナへコピー
$ docker cp <ホストのパス> <CONTAINER>:<保存するコンテナのパス>

Dockerコンテナ情報を確認

$ docker inspect <CONTAINER>

[ex] test-nginx コンテナ情報を確認
$ docker inspect test-nginx

Dockerコンテナログを取得

$ docker logs <CONTAINER>

[ex] test-nginx コンテナのログを取得
$ docker logs test-nginx

--tail=10:末尾から10行表示
-f:出力を表示しつづける

Dockerコンテナ 停止

$ docker stop <CONTAINER>

[ex] test-nginx コンテナを停止
$ docker stop test-nginx

Dockerコンテナ 再起動

$ docker start <CONTAINER>

[ex] test-nginx コンテナを再起動
$ docker start test-nginx

Dockerコンテナ 削除

$ docker rm <CONTAINER>

[ex] test-nginx コンテナを削除(コンテナを停止させてから実行)
$ docker stop test-nginx
$ docker rm test-nginx

後片付け

ハンズオンとしてコマンドを上から順にお試しいただいた方は、
最後に Dockerイメージを削除すれば元どおりの状態になります。

$ docker rmi nginx:1.12

以上です。お疲れ様でした。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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一通り触ってみようって時には
いいかもしれません

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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');});

.envMAIL_HOSTMAIL_PORT の設定を書き換えます。
tinkerを起動して、テストメールを送信してみます。

http://127.0.0.1:3504

スクリーンショット 2019-05-02 1.04.12.png

テストメールを受信できていればokです。

MailHog とは

MailHogは開発者向けの電子メールテストツールです。
Laravelで送信したメールの内容をブラウザ上で確認できます。
宛先に設定した実際のメールアドレス宛には送信されません。

Homebrewでインストールできたり、DockerHubにイメージが公開されているので導入が非常に簡単です。

  • SMTPサーバーの標準ポートは 1025
  • HTTPサーバーの標準ポートは 8025
  • メモリ内のメッセージストレージを使用(コンテナを再起動するとクリアされる)
  • 届いたメールはほぼリアルタイムで受信トレイに表示

docker-compose.yml の設定例

実際の設定はこちらのご参考ください。
https://github.com/ucan-lab/docker-laravel5/pull/8/files

DockerHubにMailHogのイメージが登録されているので、
docker-compose.yml で指定すると簡単に導入できます。

# docker-compose.yml

  mail:
    image: mailhog/mailhog
    ports:
      - ${MAILHOG_PORT}:8025

Laravel側の .envMAIL_HOST には コンテナ名を指定します。
MAIL_PORT には MailHog の SMTP のポート番号を指定します。

# .env

MAIL_HOST=mail
MAIL_PORT=1025

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

開発環境も本番環境もDocker

作業環境

■前提
- Docker for Macインストール済み
- AWS EC2インスタンス作成済み

■環境
- macos high sierra 10.13.6
- EC2 Amazon Linux AMI release 2018.03

なぜ興味を持った

今年の1月〜4月までは開発環境の構築の仕事をする時には差分を調べて本番環境に合わすことに多くの時間を使いました。Docker/Kubernetes 実践コンテナ開発入門という本を読んで開発環境も本番環境もDockerにすれば環境差異問題からの脱却することができるを知って、もうすでにかもしれませんがこれからはこれだと思いました!!!

解説

全体の流れ

  1. Docker for Macで開発環境を作って開発をする。
  2. インフラとアプリケーションを同梱した箱のようなコンテナのイメージを作成してDocker Hubにプッシュ。
  3. EC2のLinux上のDockerを使ってDocker Hubにプッシュしたイメージを取得してこれを使って本番環境を作成する。
    ※ 開発環境はDocker for Windowsだと本番環境はLinux環境で上手く行かないの情報はありましたが、Docker for Macでは問題なくできました。

開発環境

  • ディレクトリの構成
    スクリーンショット 2019-05-02 13.03.07.png
    • delusion_quiz
      アプリケーションの実体
    • Dockerfile
      Dockerコンテナの構成内容をまとめて記述されているファイル
    • docker-compose.yml
      yaml でDocker コンテナに関する起動オプションを記述したファイル
Dockerfile
    FROM php:7.0.21-apache
    COPY ./delusion_quiz/ /var/www/html
docker-compose.yml
    version: "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で以下を実行する

  1. Docker Hubからイメージを取得
    docker pull iiwao/delusion_quiz:version1
  2. イメージをコンテナにビルドする
    docker build -t iiwao/delusion_quiz .
  3. Docker実行環境の80ポート経由でHTTPリクエストを受けられるようにする
    docker run -dit -p 80:80 iiwao/delusion_quiz:version1

以上で簡単な開発環境も本番環境もDockerが完成
EC2にデプロイしたアプリケーション

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

zshでdockerコマンドを補完する

すでに他のコマンドで補完が効いている前提です。

mkdir -p ~/.zsh/completion
curl -L https://raw.githubusercontent.com/docker/cli/master/contrib/completion/zsh/_docker > ~/.zsh/completion/_docker
.zshrc
fpath=(~/.zsh/completion $fpath)
zstyle ':completion:*:*:docker:*' option-stacking yes
zstyle ':completion:*:*:docker-*:*' option-stacking yes
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

過去遺産:触れられない(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/1561f910c275b22d7c9f

Windows, macOS, Linux

普段はmacOS、サーバ系はLinux, 顧客の半分くらいはWindows。
3つのOSを継ぎ目なく利用できるようにするのが課題。

特に、Windowsが過去遺産。

Windows(M.S.)にPython3(Anaconda3)を導入する(7つの罠)
https://qiita.com/kaizen_nagoya/items/7bfd7ecdc4e8edcbd679

MacintoshでWindows導入失敗記録
https://qiita.com/kaizen_nagoya/items/d1ef10056c011f247fbf

Ubuntu導入(32bit)
https://qiita.com/kaizen_nagoya/items/67c2e69156e11a94229c

EnterPrise 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 午後

このエントリーをはてなブックマークに追加
http://b.hatena.ne.jp/guide/bbutton

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelチュートリアル - 汎用業務Webアプリを作る(1/4) Laradockで環境構築

はじめに

これまで私はDjangoでいくつかのWebアプリを作ってきましたが、とある事情から今後Laravelに触れる必要が出てきました。

そこで、既存のDjangoアプリをLaravelで再現するチュートリアル記事を作成し、その過程を通してLaravelについて学ぶことにしました。

題材には、CRUD機能、検索機能、認証機能を持ち、Djangoを勉強する際にも大変お世話になった、下記Webアプリとさせていただきました。

Djangoチュートリアル - 汎用業務Webアプリを最速で作る - Qiita

チュートリアル全体の構成

  1. Laradockで環境を構築する(本記事)
  2. テーブルとCRUD画面を作る(作成中)
  3. 検索機能を作る(作成予定)
  4. 認証機能を作る(作成予定)

環境

  • 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 .env

PostgreSQLのバージョンの指定

PostgreSQLは9.6.12を使用することにします。
PostgreSQLのDockerファイルを以下の通り編集します。

laradock/postgres/Dockerfile
FROM 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 nginx

Laravelのインストール

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=# \q

Laravelのタイムゾーンを日本時間にする

Laravelのタイムゾーンを日本時間にします。

src/config/app.php
<?php
return [
//略
  'timezone' => 'Asia/Tokyo',
//略
];

.envファイルの編集

Laravelの.envファイルを編集し、LaravelからPostgreSQLに接続できるようにします。

src/.env
DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=sample
DB_USERNAME=default
DB_PASSWORD=secret

最後に

以上で環境構築は完了です。

次の記事では、テーブルとCRUD画面の作成を行います。

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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 bash

PHPファイルを作成

echo '<?php phpinfo();'> index.php

ブラウザで確認

http://localhost/

以下の画面が表示される。
php画面.PNG

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む