標籤:use work bubuko docker bin 就是 npm 分享 新版
前言:
理論的就不多說了,具體的架構看圖。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/bashmysql -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 sourceCOPY . /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