Rancher DesktopでDocker環境を構築する!①
雰囲気でなんとなく触っていたDockerをいちから勉強してみたい!
というわけで今回は、Dockerの基礎勉強がてら環境を作ったときの作業記録です。
目標
完全に一からDockerを導入してdockerfileのみでPHPを動かす最小構成の環境構築をつくってみる
動作確認済み環境
- MacBook Air(M1, 2020)
- メモリ: 16GB
- macOS: Ventura 13.0.1
- Rancher Desktop Version 1.7.0 (1.7.0)
本記事の想定読者
- VirtualBoxやVagrantは使ったことあるけどDockerは触ったことがない方
- なんとなく誰かが作ってくれたDocker環境で開発してるけどもうちょっとDockerに詳しくなりたい方
本記事執筆の目的
-
なんとなく誰かが作ってくれたDocker環境で開発してるけどもうちょっとDockerに詳しくなりたい方
→ まさに自分がこの状態だったので、改めてDockerの知識を基礎から身につける - Docker初心者が最低限の知識を獲得できる内容であること
- エラーなど失敗ケースも含めて記載し、知見共有ができるような記事であること
本記事では取り扱わないこと
- docker compose
- Windowsでの環境構築
事前準備
既存のDocker環境を削除する
私のPCにはDocker limaが入っていたので、まずはこれをアンインストールします(Docker for Desktop等が入っている場合も同様にアンインストールしてください)
お使いのPCにDocker環境がない方はアンインストールの箇所はスキップして読み進めてください。
brewでインストール済みのlimaをアンインストール
brew uninstall lima
💀 Rancher Desktopをbrewでインストール
brewでRancher Desktopをインストール(ちょっと時間かかる)
brew install --cask rancher
Running `brew update --auto-update`...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> New Formulae
agg hermit portablegl
(----- 中略 ------)
mighty-mike youtype
mints
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
You have 30 outdated formulae installed.
You can upgrade them with brew upgrade
or list them with brew outdated.
==> Downloading https://github.com/rancher-sandbox/rancher-desktop/releases/download/v1.7.
==> Downloading from https://objects.githubusercontent.com/github-production-release-asset
######################################################################## 100.0%
==> Installing Cask rancher
==> Moving App 'Rancher Desktop.app' to '/Applications/Rancher Desktop.app'
🍺 rancher was successfully installed!
↑このように表示されれば成功です
Rancher Desktop.appを起動します(ちょっと時間かかります)
↑特に何もいじらずAcceptします
↑左下で色々インストールが動いているのでしばらく放置
念の為右上「歯車」アイコン > Application > Administrative Access から、管理者権限をAccept(許可)にします↓
もう一度、右上「歯車」アイコン > Application > Container Engine で、「dockerd (moby)」を選択して右下からApplyします↓
(また読み込みが入るのでちょっと待つ)
なぜこのような設定を行うのかというと、dockerコマンドやdocker-composeコマンドを利用する上で、Container Engineがdockerdである必要があるからです。セットアップ後にcontainerdやdockerdの切り替えをすることもできます。
https://www.orzs.tech/rancher-desktop-of-docker/
もう一度、右上「歯車」アイコン > Application > Vurtial Machine で、
メモリを8GB, CPUを4GBにしてApplyします (公式推奨の設定値)
ターミナルで「docker info」を実行します
なんか失敗しました
↑のケースは、ポート番号2375が使えない(塞がってる=既に使われてる?)からダメっぽい?
sudo lsof -P -i:2375 でポートの使用状況を確認します
(→何も出ませんでした)
docker-machine start
をすればよさそう?
↓
docker-machine start
は既に廃止になってた・・・
原因が気になるところですが、ここはさっさと諦めてRancher Desktopをアンインストールします
(brewでインストールすると何かが足りないらしい)
brew uninstall --cask rancher
brew listしてcaskのところにrancherがなくなっていればアンインストール成功です
😇 インストーラでRancher Desktopを導入
普通にここ↓のインストーラを使います(自分の場合はMacOSかつM1を選択しました)
改めてRancher Desktop.appを起動します
かつ管理者権限OKに設定します
docker info
で状態を確認します
docker info
Client:
Context: rancher-desktop
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc., v0.9.1)
compose: Docker Compose (Docker Inc., v2.14.0)
Server:
Containers: 22
Running: 0
Paused: 0
Stopped: 22
Images: 8
Server Version: 20.10.20
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc io.containerd.runc.v2 io.containerd.runtime.v1.linux
Default Runtime: runc
Init Binary: docker-init
containerd version: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
runc version: 5fd4c4d144137e991c4acebb2146ab1483a97925
init version:
Security Options:
seccomp
Profile: default
Kernel Version: 5.15.78-0-virt
Operating System: Alpine Linux v3.16
OSType: linux
Architecture: aarch64
CPUs: 4
Total Memory: 7.752GiB
Name: lima-rancher-desktop
ID: ZTKF:IUPS:PXC2:R5DC:3L3W:6WRU:GV2H:IZV7:WNDS:6BCU:I3L6:JM3K
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
このようなテキストが表示されればDockerの準備はOKです
PHP環境構築
いわゆるLAMP環境を作っていきます
作業ディレクトリの用意
今回は~/dev/sandbox_php8/に
→ dockerfile
→ index.php
この2つだけ用意します。
今の段階でsandbox_php8ディレクトリだけ作っておきましょう。
Linux環境の用意
今回はDebianの最新版(11.6)を使います。
docker image pull debian:bullseye-slim
を実行します
docker image pull dockerio/debian:bullseye-slim
でもOKです。
docker image ls
を実行して今手元に存在するDockerイメージを一覧で確認します。
先頭に debian
があればOKです
Dockerコンテナ(Linux -> debian)を実行してみる
docker container run -it debian:bullseye-slim bash
このようにrootでコンテナに入ることが出来ます。
cat /etc/debian_version
でdebianのバージョン確認してみましょう
前述した通り、
まずはLinux。今回はDebianの最新版(11.6)を使う
https://www.debian.org/releases/index.en.htmldocker image pull debian:bullseye-slim を実行
このように一致していればOKです。
docker container ls -a
で現在Mac上にあるDockerコンテナの一覧が分かります(Macのターミナルで実行)
↑コンテナID/NAMESはランダムに設定されます
ちなみに任意の名前を付けることも可能です。
docker container run --name=名前 イメージ名 コマンド
でコンテナを実行(↓例: hogeという名前を指定)
docker container run --name=hoge -it debian:bullseye-slim bash
なお、debianコンテナから抜ける時は exit
コマンドで元のMacのターミナルに戻れます。
コンテナを名前を指定して実行してみましょう
docker container run --name=debian11.6 -it debian:bullseye-slim bash
docker container ls -a (Macのターミナルで実行)
付けた名前に変わりました。
使い終わった/使わないコンテナは終了しておきましょう。
docker container stop debian11.6 (←さっきつけた名前を指定)
コンテナのステータスを確認してみます
docker container ls -a (Macのターミナルで実行)
Exited
となっており、停止状態になったことがわかります。
コンテナの再起動・削除
- 再起動
docker container restart debian11.6
- 削除
docker container debian11.6
→コンテナは簡単に再構築できるので気軽にやり直しができます。
(複数コンテナをまとめて削除することも可能)
dockerイメージを作る
debian11.6の中にPHPの実行環境を用意します。
→ dockerfile
という設定ファイルを作ります。
~/dev/sandbox_php8の中で、テキストエディタを使ってdockerfile, index.phpを作成します。
- dockerfile の中身
FROM docker.io/php:8.0.16RC1-apache-bullseye
ADD index.php /var/www/html/
EXPOSE 80
- index.php の中身
<html>
<body>
<h1>index</h1>
<?php
echo("Hello World!");
?>
</body>
</html>
dockerfileの設定を元にPHPのdockerイメージをビルドする
cd ~/dev/sandbox_php8
docker image build -t sandbox_php8 .
docker image時に sandbox_php8
と指定しましたがここは任意の名前で大丈夫です。
今回はディレクトリ名と揃えて命名しました。
このように表示にされていれば成功です。
イメージの確認もしてみましょう。
docker image ls | grep sandbox_php8
作成したdockerイメージを使ってコンテナを作成する
docker container run --name=sandbox_php8 -d -p 8080:80 -it sandbox_php8
ブラウザで表示確認してみます。
→ http://localhost:8080
index.phpの内容が表示されていれば成功です。
index.phpの内容を変更してブラウザ上の表示を変えてみる
ホスト側(Mac上のテキストエディタ)で変更したソースコードを、コンテナ側に反映させてブラウザ上の表示を変えてみるという試みです。
※ 実際の開発において今回のような方法は一般的ではありません。普通にdocker composeを使いましょう。
<html>
<body>
<h1>index</h1>
<?php
echo("こんにちは");
?>
</body>
</html>
docker container ls -a
でコンテナのIDを調べます(sandbox_php8のやつ)
今回は 57a7d8dc98c7
と設定されていました(一番左側の項目)
ホストのindex.phpをsandbox_php8コンテナindex.phpにコピーします
cd dev/sandbox_8
docker cp -a index.php 57a7d8dc98c7:var/www/html/index.php
docker cp -a (ホストのファイル名) (コンテナのID):(コンテナのファイル ※絶対パスで書く)
再度ブラウザで表示確認してみます。
→ http://localhost:8080
反映されていれば成功です。
以降、ホスト側で変更された内容は都度 docker copy
でコンテナ側に反映させれば同様にブラウザでの表示確認が可能です。
おわりに
これで最低限PHP8をDocker上で動かすことが出来たわけですが、
前述しましたが、変更をかけてその度にコピーしてブラウザで確認して・・・
非 常 に め ん ど う く さ い
なのでもっといい方法でDocker環境を作りましょう。
次回はdokcer composeを使ってLEMP環境を作ってみます。
続く
Discussion