跟小編玩轉Docker到天亮 —— 利用Bind Mouting提高開發調試效率

一、引言

闊愛帥氣的小編又來了 , 那麼麼麼麼今天所寫的文章也是在實際使用docker所遇到的問題。

新開發一個項目、或者新寫一個功能需求,那肯定避免不了調試開發,然後測試,測試完又要改源碼。

但每次修改一次源碼都需要重新build的一下鏡像,我滴天,這麼麻煩的嗎?

如果你也是遇到類似相同的問題,請問繼續往下看......

二、數據持久化之Bind Mouting

遇到這個問題小編首先想到的就是,能不能把容器的項目和我本地項目的目錄關聯一下,瞭解過docker容器的小夥伴,容器是可以進行讀寫操作的。

小編之前使用容器搭建了一套Mysql做爲測試環境用,但考慮到了數據持久化的問題,最後也是通過把文件持久化的方式存放到本地,這樣就不會因爲容器的丟失導致數據也沒了的情況。

然後小編就看了Bind Mouting,咦~ 這個好像符合我的需求 ,然後小編就使用Nginx鏡像容器測試了一下。

  

# 使用nginx做爲基礎鏡像
FROM nginx:latest

# 指定啓動容器之後所在當前路徑
WORKDIR /usr/share/nginx/html

# 把當前目錄下的index.html 拷貝過去
COPY index.html index.html

以上是小編所編寫的DockerFile文件內容,然後我們直接build一下,最後生成鏡像 。

使用Bind Mouting的關鍵所在就是啓動的時候需要加一個選項 : -v

docker run -d -v $(pwd):/usr/share/nginx/html -p 80:80 --name web 172.0.0.0.1:5000/web

$(pwd) ,這個代表本地電腦的當前目錄,小夥伴可以在命令窗口嘗試輸入pwd,顯示的應該是當前所在目錄的路徑

冒號後面這個路徑/usr/share/nginx/html,這個是容器中nginx存放html靜態頁面的路徑,然後兩個目錄就好像進行了關聯綁定。

現在只需要修改本地電腦的index.html,對應容器這個這個目錄(/usr/share/nginx/html)下的index.html內容也會隨之而更改。

三、實際項目演示

既然方法找到了,小編就隨便拿個springboot的項目來試試

需求:在我們修改源代碼之後,只需要在開發環境重新編譯源碼,然後重啓容器即可。

準備:小編新建了一個文件夾叫docker-jar(路徑在:/var/docker-jar),在使用Maven的install的時候,會自動往這個文件夾添加編譯後的源碼(也可以直接使用默認targer目錄下的也行)

Dockerfile文件內容:build命令小編就不多講了,最後得到鏡像名稱是:jiannan/springboot

# 首先我們需要依賴一個JDK
FROM hub.c.163.com/library/java:8-alpine

# 將targer下的jar文件,添加到容器的/jar目錄下
ADD target/*.jar /jar/app.jar

# 這個就代表我們容器啓動之後需要執行的命令
ENTRYPOINT ["java","-jar","/jar/app.jar"]

啓動容器:這裏記得加上-v的選項,將兩個目錄進行關聯綁定,後面我們每一次install,jar文件都會自動更新到容器當中。

 docker run -d -p 8080:8080 -v /var/docker-jar:/jar --name web  jiannan/springboot

重啓容器:更換後到jar文件,因爲我們這個是jar,並不是靜態文件,所以我們得重啓一下docker容器。

docker restart web(容器ID或者容器名稱)

四、最後插兩句嘴

這個Bind Mouting最主要的目的是使容器中的文件和本地磁盤某一個路徑,兩者文件可以相互進行同步,以防容器被刪除導致文件也被刪除了。

因爲我們部署在容器中的程序,可能會有文件上傳到功能,如果這個時候你直接保存到容器當中並且沒有持久化,就很有可能容器沒了,那數據就都沒了。

docker持久化的方式當然不止這一種啦,小編下篇docker文章再講如何持久化mysql鏡像中的數據。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章