部署上次的Hapi到Windows+Docker,WindowsDocker
前言:
理論的就不多說了,具體的架構看圖。web這裏是上篇文章開發的Hapi服務,數據庫Mysql,廢話不多說,粗略的畫了下,架構圖如下:
Mysql鏡像拉取,配置
數據庫鏡像查找
docker search mysql
不多解釋,這裏我直接拉取Mysql鏡像,並且把端口映射到宿主機8087,數據庫默認密碼設置123456 -d mysql 為剛剛上面查詢到的鏡像NAME,此時鏡像和容器都已經創建
docker run --name test-mysql -p 8087:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
查看Images,和容器,test-mysql 已經運行在容器上
docker images
docker ps
進入Mysql的運行環境
docker exec -it test-mysql /bin/bash
mysql -uroot -p123456
第一句執行成功會root權限進入容器的環境
上面語句我分為了二段,可以直接合並使用。
測試下連接,輸入如下:
show databases;
此時用宿主機的數據庫管理工具,提示如下
OK,正常連接,有的可能會連接失敗,解決方法如下:
對數據庫授權
GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘root‘ WITH GRANT OPTION;
特殊情況可能還是無法使用,這時候嘗試改一下密碼,再連接,OK! 這只是我遇到的情況。
update user set authentication_string = password(‘root‘) where user = ‘root‘;
連接成功,說明docker中的mysql已經可以在局域網中訪問了。
打包項目文件,生成鏡像,綁定數據庫
打開項目文件主目錄,新建 Dockerfile,內容輸入如下
#Dockerfile文件 FROM docker.io/node //node版本這裏不指定了,默認最新版 WORKDIR/home/Service //指定工作目錄為容器中的/home...下 # Bundle app source COPY . /home/Service RUN npm install EXPOSE 8888 //開放8888端口 CMD [ "npm", "start" ]
註意運行程序中,如node的項目,我們需要配置一樣的端口,還需要配置站點地址,如下:
配置完畢,打包鏡像 .不能少,代表當前路徑
docker build -t test-hapi .
運行鏡像,與數據庫容器建立連接
docker run --name my-hapi --link test-mysql:test-mysql -p 8088:8888 -d test-hapi
進入容器日誌查看運行情況
docker logs eb01307bc408 //容器id docker ps 查看
完美。
OK,搭建就這麽完成了。需要註意的如下:
容器用了--Link,那麽web應用的配置文件數據庫連接,應該改成剛剛link 的名字,並且不能帶端口,如下
為什麽用localhost,因為你把容器的地址映射到了宿主機,並且映射端口到了宿主機的8088 ,實際請求就被轉回了容器地址,也就是 8888。
node項目可能有點特殊,還需要配置為容器的IP:
網絡方面,用windows系統會自動生成虛擬機,我需要容器訪問內網,配置如下:
部署上次的Hapi到Windows+Docker,WindowsDocker