[DAY2]建立容器(一)

一边把容器建立起来,一边看有没有什麽地方要修改的~

1.network

跟着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模式是用在多部实体主机的状况下,之後有时间再来试试@@

2.MySQL

根据官方提供的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的密码

https://ithelp.ithome.com.tw/upload/images/20210917/20127692bEOPLogqHt.png

可以看到container被建立起来了~

https://ithelp.ithome.com.tw/upload/images/20210917/20127692M1VOBmOFEe.png

检查了cake这个database确实存在。

3. nicolaka/netshoot

nicolaka/netshoot (https://github.com/nicolaka/netshoot)

为了要连接mysql容器里的资料库,需要用到这个管理网路功能的容器。

docker run -it \
 --name netToolsInCake --network cake-app nicolaka/netshoot

会看到这个画面:

https://ithelp.ithome.com.tw/upload/images/20210917/20127692wgsUZ3z7FN.png

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做操作。

4. phpMyadmin

大概会是比较复杂的部份,先看一下官方的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登入看看

https://ithelp.ithome.com.tw/upload/images/20210917/20127692O6OSSYFi0k.png

跑出了警告QQ

虽然这只是个阳春版,但还是要确认一下是不是有其他问题,因此明天再来整理看看为什麽不能set session cookie。


<<:  从 IT 技术面细说 Search Console 的 27 组数字 KPI (17) :结构化资料(收录)

>>:  【後转前要多久】# Day02 HTML - 基本观念复习

ISO 27001 资讯安全管理系统 【解析】(十二)

资通安全责任等级 依照资通安全责任等级分级办法,由主管机关核定相对应之等级,按照等级决定导入系统之...

前端工程师也能开发全端网页:挑战 30 天用 React 加上 Firebase 打造社群网站|Day18 即时更新留言

连续 30 天不中断每天上传一支教学影片,教你如何用 React 加上 Firebase 打造社群...

Day21:安全性和演算法-共用金钥密码系统(shared-key crypto system)

前言 前一天我们有稍微提到安全性演算法的其中一个,也就是今天的主题「共同金钥密码系统」(shared...

[Day 25] LocalStorage 介绍

前言 HTML5 的 Web Storage 是一种可让网页将资料储存於本地端的技术,其作用如同 c...

D19 第九周 後端基础 PHP 与 MySQL

这周新接触到 PHP 和 MySQL,然後是第一次使用到 session 机制实作登入功能 我自己的...