Docker
Docker Compose
Compose
Nginx
一直都聽說docker的厲害及方便,寫前端的我其實也根本懶得去碰後台,所以只有網路上看一些文章了解一下下,但剛好最近負責後台的同事有警急任務上身,不想一直打擾他作業的情況下,我就跟同事提出你簡單說明一下,我自行研究看看怎麼使用docker,自己去後台來使用,就不用一直麻煩你了,同事就說可以喔,非常簡單你只要docker-compose up -d 就萬事ok,然後就丟了一個文件docker-compose.yml檔給我,我說~這麼簡單???同事露出邪惡的笑容說就是那麼簡單,然後我就採坑了一個禮拜,才把它給up起來,所以就一一把過程記錄下來,提醒自己順便給需要的人看看吧!
這次是我需要架設一個獨立的環境,來提供網頁來運行,所以用docker把前後端全部一次打包起來,這個環境包有:
apache felix 可以替換成node或是php等等能提供一個給網頁使用的api services就好,因為我們公司都是用這個框架寫後台,所以等等看到felix的東西可以忽略沒關係
因為我只是個初學者就不寫詳細的教學文件,因此不介紹其他的技術方面,只描述這次專案如何在docker上面使用
一開始看到docker-compose.yml文件老實說完全不知道在幹嗎,所以try了一個早上怎麼run都報錯,既然無法用靠賽的,那就果斷放棄,還是老老實實地了解後才能針對錯誤來修改,測試是在mac環境上
小提醒一下:了解容器的觀念很重要,因為在後面我就是卡在要怎麼配置端口上面,花了非常多的時間
先來個最簡單的run
$ docker run --name my-nginx -d -p:8888:80 nginx
成功後就可以在 http://localhost:8888/ 看到nginx的歡迎畫面
因為每個container都是一個系統,所以可以透過exec進入這個容器來查看一些東西,最基本的就是開啟一個容器的 /bin/bash
$ docker exec -it [container id/name] /bin/bash
-it 是能夠讓容器接收鍵盤輸入與螢幕輸出的指令
為什麼我直接帶入docker-compose,而不是先從dockerfile,或是其他的地方先開始,因為我覺得這樣對測試了解docker上非常的方變,不用打一堆指令跟刪除一堆container
剛剛上面的docker run 指令就可以寫成下面這樣,而這樣的好處就是我們只要cd到這個目錄下,並且執行 docker-compose up -d 就可以了,不需要打額外多餘的指令,而且之後只要修改這個檔案再執行一次docker-compose up -d就可以無痛更新,非常的方便
version: "3.4"
services:
nginx:
image: nginx
container_name: my-nginx
ports:
- "8888:80"
因為docker每個container都是一個獨立的容器,你把它關掉後他就會完全消失不見,如果你在裡面新增了一些檔案,他在關掉的時候也會不見,所以這邊要使用volumes去把你想留下的東西,mount到本機的目錄上,也可以用這個去改變docker裡面的設定檔
用nginx來舉例,因為nginx的歡迎頁面html是放在/usr/share/nginx/html下面的index.html,所以如果你想改變這個畫面的內容,你只要把你的index.html修改到這個目錄下,他就會去開啟這個檔案,以我vue產生的disk來說
version: "3.4"
services:
nginx:
image: nginx
container_name: my-nginx
ports:
- "8888:80"
volumes:
- ./html/dist:/usr/share/nginx/html
很重要的是前面是docker-compose.yml目錄下的路徑,所有的東西一定都要在這個目錄下,他不能參考到你電腦中其他的地方,因為這個跟docker的引擎有關,所以要在你新創的目錄下,放入你要顯示的網頁內容,我的話是 ./html/disk
這樣修改完後存檔只要下docker-compose up -d, http://localhost:8888/ 就會變成你要顯示的畫面了
重啟nginx
docker exec <nginx_container_id> nginx -s reload
$ docker inspect $image_name
$ docker exec -it [Container 名稱或 ID] /bin/bash