Docker 學(xué)習(xí)系列16 使用過程的一些經(jīng)驗(yàn)總結(jié)

  1. COPY 和 ADD 命令具有相同的特點(diǎn):只復(fù)制目錄中的內(nèi)容而不包含目錄自身麻蹋。
    比如 backend 目錄的結(jié)構(gòu)如下:
 --- backend
     -- model
     -- controller

如果執(zhí)行

WORKDIR /app
COPY backend .

容器內(nèi)app底下會是model和controller目錄,并不是backend目錄忙芒。
如果要拷貝整個目錄铅搓,應(yīng)該:
COPY backend ./backend

  1. 如果修改了 Dockerfile计福,記得要重新執(zhí)行build概作,即生成新的鏡像沪袭。這樣啟動后才能看到效果田度。
  2. 打包node項(xiàng)目中的node_modules問題妒御。
    某node項(xiàng)目結(jié)構(gòu):
src
node_modules
package.json
package-lock.json

dockerfile部分代碼

FROM node:8.12-alpine
RUN mkdir -p /app
WORKDIR /app
COPY package.json .
COPY package-lock.json .
RUN npm install
...

我們在容器內(nèi)生成了項(xiàng)目所依賴的node_modules文件。這是docker的build階段镇饺。
之后在run啟動階段時乎莉,在mouted共享目錄時要特別小心,如果掛載整個項(xiàng)目奸笤,容器內(nèi)的node_modules會被項(xiàng)目中的覆蓋惋啃。
最好把需要掛載的文件單獨(dú)放到一個目錄中。

  1. 關(guān)于項(xiàng)目目錄是掛載好监右,還是COPY ADD好边灭,stackoverflow上有人也問過
  • COPY/ADD 文件是鏡像的一部分,在docker構(gòu)建階段執(zhí)行健盒。比較適合項(xiàng)目的生產(chǎn)環(huán)境绒瘦,比如自動化。對于成熟穩(wěn)定的項(xiàng)目扣癣,把編譯后的可以直接運(yùn)行的代碼打包進(jìn)鏡像內(nèi)也利于分發(fā)惰帽。
  • volumn 是在docker運(yùn)行階段,本地文件變化能方便的反應(yīng)到容器中父虑,比較適合項(xiàng)目的開發(fā)階段该酗。
    要根據(jù)實(shí)際情況,掛載可以節(jié)省空間频轿,便于修改垂涯。如果是想文件COPY到容器,每次修改文件都需要重新制作鏡像航邢。
  1. 關(guān)于 docker-compose,對于鏡像的版本骄蝇,數(shù)據(jù)庫密碼等不建議直接寫死到 docker-compose.yml 中膳殷,可以新建.env文件。
    docker-compose部分
  mysql:
      build: ./docker-build/mysql
      ports:
        - "33060:3306"
      volumes:
        - ./docker-build/mysql/data:/var/lib/mysql
      environment:
        MYSQL_ROOT_PASSWORD: ${DOCKER_MYSQL_PASSPORD-123456}

.env文件
DOCKER_MYSQL_PASSPORD=mypassord
比如下面的${DOCKER_MYSQL_PASSPORD-123456}表示優(yōu)先去.env文件找定義的key值,如果沒有則使用默認(rèn)值赚窃,即123456册招。
docker-compose.yml 受版本控制,.env不受勒极。更多細(xì)節(jié)參考

  1. 在 Laravel 項(xiàng)目中是掰,如果數(shù)據(jù)庫跑在容器里,在宿主機(jī)直接執(zhí)行 php aritsan是不行的辱匿,
    需要進(jìn)到容器里執(zhí)行键痛,或者在宿主機(jī)執(zhí)行docker-compose exec <mycontainer> php artisan或者是docker exec -it <mycontainer> php artisan
  2. 如果php項(xiàng)目用的nginx的php-fpm容器,想重啟php-fpm匾七,容器內(nèi)使用kill -USR2 1絮短,容器外執(zhí)行docker exec -it <mycontainer> kill -USR2 1\
  3. docker-compose down要慎用,他會銷毀所有容器和網(wǎng)絡(luò)等昨忆。如果你之前在容器里修改過文件丁频,都會沒有。當(dāng)然docker也不推薦直接在容器動手腳邑贴,建議寫個shell腳本席里,啟動之后在容器內(nèi)執(zhí)行。
  4. 還是 mysql 數(shù)據(jù)庫問題拢驾,如果容器啟動了 mysql胁勺,之后通過配置修改了密碼,可能會造成重新連接后死活顯示"Access denied"独旷。
    這是因?yàn)槿绻⒘斯蚕砭韛olume署穗,里面存的還是老的user信息,需要docker-compose rm -v 清除卷然后重連嵌洼。
  5. 刪除日志 find /var/lib/docker/containers/ -type f -name "*.log" -delete
  6. 刪除所有停止的容器 docker rm $(docker ps -a -q)
  7. Docker 提供了方便的 docker system prune 命令來刪除那些已停止的容器案疲、dangling 鏡像、未被容器引用的 network 和構(gòu)建過程中的 cache.
    安全起見麻养,這個命令默認(rèn)不會刪除那些未被任何容器引用的數(shù)據(jù)卷褐啡,如果需要同時刪除這些數(shù)據(jù)卷,你需要顯式的指定 --volumns 參數(shù)鳖昌。比如你可能想要執(zhí)行下面的命令:
    docker system prune --all --force --volumns

注意备畦,使用 --all 參數(shù)后會刪除所有未被引用的鏡像而不僅僅是 dangling 鏡像。

何為 dangling images许昨,其實(shí)可以簡單的理解為未被任何鏡像引用的鏡像懂盐。比如在你重新構(gòu)建了鏡像后,那些之前構(gòu)建的且不再被引用的鏡像層就變成了 dangling images

我們還可在不同在子命令下執(zhí)行 prune糕档,這樣刪除的就是某類資源:

docker container prune # 刪除所有退出狀態(tài)的容器
docker volume prune # 刪除未被使用的數(shù)據(jù)卷
docker image prune # 刪除 dangling 或所有未被使用的鏡像
  1. docker diff 容器名或ID莉恼,可以查看容器發(fā)生的文件系統(tǒng)的變化信息
    如下圖,我在容器里新建了個demo.txt文件,在docker diff中可以查看出來
    A 添加俐银, C 修改刃榨, D 刪除
image.png

參考:http://blog.51cto.com/13954634/2294107

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末撞蜂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瑟俭,老刑警劉巖曲掰,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件埋心,死亡現(xiàn)場離奇詭異墨微,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)陪捷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門回窘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人市袖,你說我怎么就攤上這事啡直。” “怎么了苍碟?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵酒觅,是天一觀的道長。 經(jīng)常有香客問我微峰,道長舷丹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任蜓肆,我火速辦了婚禮颜凯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仗扬。我一直安慰自己症概,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布早芭。 她就那樣靜靜地躺著彼城,像睡著了一般。 火紅的嫁衣襯著肌膚如雪退个。 梳的紋絲不亂的頭發(fā)上募壕,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機(jī)與錄音语盈,去河邊找鬼舱馅。 笑死,一個胖子當(dāng)著我的面吹牛黎烈,可吹牛的內(nèi)容都是我干的习柠。 我是一名探鬼主播匀谣,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼照棋,長吁一口氣:“原來是場噩夢啊……” “哼资溃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起烈炭,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤溶锭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后符隙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趴捅,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年霹疫,在試婚紗的時候發(fā)現(xiàn)自己被綠了拱绑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡丽蝎,死狀恐怖猎拨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情屠阻,我是刑警寧澤红省,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站国觉,受9級特大地震影響吧恃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜麻诀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一痕寓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蝇闭,春花似錦呻率、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至苞七,卻和暖如春藐守,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蹂风。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工卢厂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惠啄。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓慎恒,卻偏偏與公主長得像任内,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子融柬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容