1. 程式人生 > >部署上次的Hapi到Windows+Docker,WindowsDocker

部署上次的Hapi到Windows+Docker,WindowsDocker

exp -m uil 程序 link docke 行程 star string

前言:

理論的就不多說了,具體的架構看圖。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