windowsの方を対象にしています
windowsの方を対象にしてしていますが、仮想環境内でのインストールする物などは同じなので、Macの方も参考程度になるとは思います。
windows homeでもdocker desktopが使える!
これまではwindows pro以上の環境が求められていましたが、windows homeでもdocker desktopが使える様になりました。
docker desktopの何がいいって分かりやすさです。
docker psしなくても何が動いているのか一目瞭然です。
ただdocker psは使う事にはなるんですけどね。
しかしコマンドを覚えなければというより、docker psしたくなるのです。
それは追々話しましょう。
まずはdocker desktopをインストールしましょう。
すいません、インストールする際の画面で何が聞かれるか覚えていないです。
基本的に[next]あるいは[次へ]で進めていって問題ないです。
少し時間がかかりますが、docker desktop(長いのでここからdockerと省略します)がインストール出来たと思います。
かわいいクジラアイコンがデスクトップにありますね、あるいはインストール後開くで既に開いているかもしれません。
特に問題なく開けた方はおめでとうございます。
これでdockerはあなたの物です。
しかし、開くと何かエラーが出て起動出来ないという方がいるんじゃないでしょうか。
私もそうでした。
windowsではdockerを動かす為にHyper-Vという機能をONにしてあげる必要があります。
パワーシェルを管理者モードで開いて下さい。
真っ青な画面が出てきましたね。
そこに
bcdedit /set hypervisorlaunchtype auto
と打ち込んでエンターです。
成功しました的な文字が出ればOKです。
一旦再起動しましょう。
hello docker
おそらくdockerは正常に開けたと思います。
チュートリアルでhello dockerが出てくると思いますが、操作になれておきたい人はやってみて下さい。
ちょっとだけdockerの説明をすると、dockerはイメージを元にコンテナを作成します。
意味が分かりませんね。
あまり例えが上手くないのですが、ゲームのドラクエをイメージだとします。
これを起動すると当然ドラクエがスタートする訳ですが、このドラクエいい所まで進んだら普通はセーブをしますね。
dockerの場合はイメージをセーブするのです。
次回からはセーブしたイメージを元にコンテナを作るとセーブした内容が残っているので続きからプレイ出来ます。
意味不明だったら突っ込んで下さい。
要はコンテナは一時的な物で起動している間は内容を覚えてくれていますが、電源を落とすとリセットされてまっさらな状態からスタート出来ます。
ただソースコードやDBの内容などはwindows側にdockerとの共有フォルダを作れるので保存しておく事が出来ます。
では元となるイメージを探してみましょう。
今回もvagrant編と同じようにcentos7を使用します。
また前回の記事を読んで頂けたならお気づきでしょうが、laravelが既にセットされているイメージもあります。
ただdockerはイメージを繋いで起動する事が出来るので、上記のイメージはlaravel8のフォルダがあるだけのイメージかもしれません。
そういえば重要な事を書いていなかったのですが、dockerは言語、webサーバー、DB、FWもしかしたらもっと小さい単位で細分化されたイメージがあります。
イメージを使えばいちいち自分でインストールする事なくその環境を手に入れる事が出来るのですが、docker初心者の私からすると最初はベースのOSのイメージとDBの組み合わせが分かりやすいと思います。
勿論慣れてる方ややってみたい方は細分化されたイメージを繋いで色んな言語、DBなどを繋いで遊んでもいいと思います。
なぜベースイメージ+DBをオススメするかと言うと前述した通りdockerのコンテナはストップさせると中の状態をリセットします。
その際ソースコードやDBの中身もリセットされてしまうので共有フォルダに保存しておきます。
そうする事でコンテナがリセットされても途中まで書いていたソースやDBの中身を再現する事が出来る訳です。
なので最低限この2つのイメージを組み合わせると便利という訳です。
という事でcentos7とまたherokuにアップするのが目的なのでposgreのイメージをDLします。
すいません、その前にprojetフォルダを作っておいて下さい。
Cの直下などがオススメです。
そのフォルダの中にdockerなど好きな名前でフォルダを作って下さい。
一応注意として半角英数字でのみで作ったフォルダのパスまでいける様にしておいた方がトラブルが無いと思います。
dockerフォルダでまたパワーシェルを開いて下さい。
そこで
docker pull centos7
と入力してエンターです。
もし失敗してしまったらgitが入っていない可能性があります。
その場合gitを入れて再トライしてください。
さぁどうでしょうcentos7は落とせたでしょうか。
パワーシェルで
docker ps -a
をしてあげたらcentos7が表示されていると思います。
またせっかくdocker desktopを入れたのでそちらで確認も出来ます。
centos7がイメージの中にありますね。
この要領でpostgresSQLの9.6もDLします。
docker pull bitnami/postgresql:9.6
無事イメージの取得は出来たでしょうか。
さてdockerの起動にはいくつか方法があります。
docker run -it centos7
と書いてあげれば起動します。
これにDBを繋いで・・・。
うんやり方が分からない。難しい。
ちなみに上で起動したcentos7はshellの指定なども行わないと操作できません。
毎回長いコマンドを打たないといけないなんて大変だ、docker難しい・・・。
そんな事はありません。
毎回指定してあげないといけない物はdocker-composeファイルに書いて置いて、それを元に起動してあげればあら不思議。
とっても簡単にDBとの連携も共有フォルダも全部やってくれます。
さぁさぁcomposeファイルを作りましょう。
先ほど作成したdockerフォルダの中に
docker-compose.yml
というファイルを作りましょう。
このファイルはvisual studio codeで開けます。
多分メモ帳でも開けるのですが、何かしらのエディタをオススメします。
というのもこのymlファイルは段落で設定の重要さ?を判定しているので段落がずれると正常に起動しません。
要は段落が分かればいいので、スペースなどが可視化できるエディターの方が書きやすいです。
では中身を見てみましょう。
↓ここから中身
version: '3.7' services: web2: container_name: "centos" image: centos:centos7 volumes: - C:\project\docker\data:/home/data privileged: true command: /sbin/init tty: true ports: - 8080:80 postgres: image: bitnami/postgresql:9.6 restart: always environment: POSTGRES_HOST_AUTH_METHOD: 'trust' POSTGRES_USER: postgres POSTGRES_PASSWORD: pikatyuu4188 PGPASSWORD: pikatyuu4188 POSTGRES_DB: mydb TZ: "Asia/Tokyo" ports: - 5432:5432 volumes: - C:\project\docker\postgres:/var/lib/postgresql/data volumes: web1: postgres:
↑ここまで中身
とりあえず上記をコピペして保存して下さい。
私も分かっていない部分があるので、全部は説明できないのですが、まず
web2:←ここは好きに変えてOKです。docketの中に入るときにコレを指定するので長すぎると覚えるのが大変だよねという位です。
image: centos:centos7←これはそのイメージを使うよという意味になります。
volumes:←これは左側がwindowsのパスで右側がdockerの中のパスになります。windows側は相対パスでもいけるかもしれませんが私はダメだったので絶対パスにしています。
privileged: true
command: /sbin/init
tty: true ←この辺りは中で操作できる様のおまじないだと思って下さい。
ttyは中でデーモンがゾンビ化するのを防ぐとかだったと思います。
ports:←これはwebサーバーの通り道やDBの通り道になります。
察しのいい方はwebサーバーのポートとposgreのポートだと分かりますね。
DB側の設定については何となく予想がつくと思います。
laravelなどをインストールした後、この値でDBに繋ぐ事が出来ます。
勿論ユーザー名モロモロ変えちゃってOKです。
そういえば大事な事を書き忘れていました。
起動の前に共有フォルダをwindows側で作ってあげておかないとダメです。
上の設定通りだとdockerフォルダの中に[data]と[postgres]フォルダを作ってあげてください。
さぁ準備が出来ました。
パワーシェルで
docker-compose up -d
と打ってください。
数秒でコンテナが出来上がります。
エラーが出た方は突っ込みお願いします。
docker desktopでも起動しているのが分かりますね。
※dockerコンテナは既にあって作れなかったのでcentosとしています
では中に入ってみましょう。
パワーシェルで
docker-compose exec web2 /bin/bash
と打ち込んで下さい。
[root@c5453bb31251 /]# みたいな表示に変わったでしょうか。
これで後はこの中でnginxを入れたり、phpを入れたりするだけです。
ただ気になる点がある方もいるかもしれません。
パワーシェルで操作するのかよ!そうです、割とやりにくいです。
私も最初tera-tarmで繋ごうと思ったのですが、ググったり設定している最中にdockerは外部から接続するのはナンセンスという事だったのでパワーシェルで操作しています。
どうしても見た目が・・・という方はgit bashを使う方法があります。
git bashはgitを入れると一緒についてくるコンソールツールで見た目もなかなかいいです。
これを使うにはgit bashのexeまで行ってまずショートカットを作ります。
そのショートカットのプロパティで作業用フォルダの中を空にして今作ったdockerフォルダの中に入れてあげます。
これでOKらしいのですが、私の環境だとdockerの中の現在位置が表示されなかったのでなくなくパワーシェルで作業しています。
パワーシェルだとディレクトリが非常に見にくいので(青背景に青文字)なんで青なんだ!と思いますが、コンテナを設定してイメージをセーブしてしまえば対して使わないのでめちゃめちゃ使う時が来たらその時また考えます。
追記:少し調べたら背景色はすぐ変更出来ました。
Color Toolというのを使うとパワーシェルの表示が変えられるっぽいのですが、なぜかコマンドプロンプトがpopになりましたw
まぁ背景色を変えるだけで大分みやすいので問題ないです。
さて話が脱線してしまいましたが、コンテナで作業した後イメージにセーブしないといけません。
今はdockerの中にいると思いますが、exitコマンドで一度抜けて下さい。
その後docker ps してあげます。
今起動中のコンテナが表示されます。
何か作業をして残しておきたい時はイメージをセーブすればOKです。
セーブするコマンドは、
docker commit [コンテナのID] [好きな名前]
です。
もし画像の状態のcentosをセーブするなら
docker commit c5453bb31251 test
の様になります。
正直この運用方法がdocker的に正しいのか分かりませんが、作業履歴が残せます。
もっと正しい運用方法があれば教えてください!
さて上のコマンドでtestイメージが作られました。
次回からはこのtestイメージを使う訳ですが、docker-composeを少し変えてあげるだけです。
version: '3.7' services: web2: container_name: "centos" image: test:latest ←ココを変えただけ volumes: - C:\project\docker\data:/home/data privileged: true command: /sbin/init tty: true ports: - 8080:80 postgres: image: bitnami/postgresql:9.6 restart: always environment: POSTGRES_HOST_AUTH_METHOD: 'trust' POSTGRES_USER: postgres POSTGRES_PASSWORD: pikatyuu4188 PGPASSWORD: pikatyuu4188 POSTGRES_DB: mydb TZ: "Asia/Tokyo" ports: - 5432:5432 volumes: - C:\project\docker\postgres:/var/lib/postgresql/data volumes: web1: postgres:
セーブする際に毎回同じイメージ名でコミットするなら常に最後のセーブポイントから復帰できますし、イメージを自動で上書きしてくれるので余計なイメージを量産する事にもなりません。
逆に分けたい場合はイメージ名を変えてあげればOKです。
ちょっと長くなってしまいましたが、docker desktopの使い方は以上になります。
もっと賢い使い方もあるかもしれませんが、私自身初級者なので是非教えて下さい。
肝心にlarabelのインストールについてですが、作業自体は全く同じなので、vagrant編の[まずはnginxを入れてみよう]あたりから参考にしてみて下さい。
同じcentos7なので全く同じ作業で入るはずです。
ここが分からないなどあれば突っ込みお願いします。
コメント