一邊把容器建立起來,一邊看有沒有什麼地方要修改的~
跟著Multi container apps,先把多個容器要連結的network建立起來。
docker network create cake-app
接著用docker network ls 就可以看到有個name叫做cake-app的network被建立起來了,預設的Driver是bridge,這邊可以用 -d的方式修改成overlay
If you want to create a network that spans multiple Docker hosts each running an Engine, you must create an overlay network.
overlay模式是用在多部實體主機的狀況下,之後有時間再來試試@@
根據官方提供的command小改一下,mysql的tag成最新版的8.0
docker run -d --name cont1-mysql \
--network cake-app --network-alias mysql \
-v cake-mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=secret \
-e MYSQL_DATABASE=cake \
mysql:8.0
Mysql - Official Image | Docker Hub
根據官方image說明,-v所創的資料夾對應到container內用來存放data的資料夾。另外這個container只會用來做資料庫,所以只使用root,設定他root的密碼
可以看到container被建立起來了~
檢查了cake這個database確實存在。
nicolaka/netshoot (https://github.com/nicolaka/netshoot)
為了要連接mysql容器裡的資料庫,需要用到這個管理網路功能的容器。
docker run -it \
--name netToolsInCake --network cake-app nicolaka/netshoot
會看到這個畫面:
dig mysql
Inside the container, we’re going to use the dig command, which is a useful DNS tool. We’re going to look up the IP address for the hostname mysql.
所以這邊的mysql是指前面設定的--network-alias mysql,因此我們確實可以知道network裡面是有這個container的,而且可以利用network-alias來指定到這個ip,對container做操作。
大概會是比較複雜的部份,先看一下官方的run怎麼寫的…
docker run -dp 3000:3000 \
-w /app -v "$(pwd):/app" \
--network todo-app \
-e MYSQL_HOST=mysql \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=secret \
-e MYSQL_DB=todos \
node:12-alpine \
sh -c "yarn install && yarn run dev"
先試一個版本:-dp的部分應該會沿用,port改成8081:80。phpmyadmin的部分 -w跟-v應該用不到先省略好了。
docker run --name cont2-phpmyadmin --network cake-app -p 8081:80 phpmyadmin/phpmyadmin:latest
跑出來的結果是這樣
Status: Downloaded newer image for phpmyadmin/phpmyadmin:latest
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message
[Fri Sep 17 14:31:34.695089 2021] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.38 (Debian) PHP/7.4.20 configured -- resuming normal operations
[Fri Sep 17 14:31:34.695152 2021] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
使用docker建立apache2伺服器的時候,十之八九都有servername的問題,用httpd、phpmyadmin、cakephp都是……
echo "ServerName localhost" >> /etc/apache2/apache2.conf
通常我用localhost,之後這點要寫到dockerfile才行。
先進到http://localhost:8081/index.php 試著用root登入看看
跑出了警告QQ
雖然這只是個陽春版,但還是要確認一下是不是有其他問題,因此明天再來整理看看為什麼不能set session cookie。