docker學習系列16使用過程的一些經驗總結
- COPY 和 ADD 命令具有相同的特點:只複製目錄中的內容而不包含目錄自身。
比如 backend 目錄的結構如下:
--- backend
-- model
-- controller
如果執行
WORKDIR /app
COPY backend .
容器內app底下會是model和controller目錄,並不是backend目錄。
如果要拷貝整個目錄,應該:COPY backend ./backend
- 如果修改了 Dockerfile,記得要重新執行build,即生成新的映象。這樣啟動後才能看到效果。
- 打包node專案中的node_modules問題。
某node專案結構:
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
...
我們在容器內生成了專案所依賴的node_modules檔案。這是docker的build階段。
之後在run啟動階段時,在mouted共享目錄時要特別小心,如果掛載整個專案,容器內的node_modules會被專案中的覆蓋。
最好把需要掛載的檔案單獨放到一個目錄中。
- 關於專案目錄是掛載好,還是COPY ADD好,stackoverflow上有人也問過
- COPY/ADD 檔案是映象的一部分,在docker構建階段執行。比較適合專案的生產環境,比如自動化。對於成熟穩定的專案,把編譯後的可以直接執行的程式碼打包進映象內也利於分發。
- volumn 是在docker執行階段,本地檔案變化能方便的反應到容器中,比較適合專案的開發階段。
要根據實際情況,掛載可以節省空間,便於修改。如果是想檔案COPY到容器,每次修改檔案都需要重新制作映象。
- 關於 docker-compose,對於映象的版本,資料庫密碼等不建議直接寫死到 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}
表示優先去.env
檔案找定義的key值,如果沒有則使用預設值,即123456。
docker-compose.yml 受版本控制,.env不受。更多細節參考
- 在 Laravel 專案中,如果資料庫跑在容器裡,在宿主機直接執行
php aritsan
是不行的,
需要進到容器裡執行,或者在宿主機執行docker-compose exec <mycontainer> php artisan
或者是docker exec -it <mycontainer> php artisan
- 如果php專案用的nginx的php-fpm容器,想重啟php-fpm,容器內使用
kill -USR2 1
,容器外執行docker exec -it <mycontainer> kill -USR2 1
- docker-compose down要慎用,他會銷燬所有容器和網路等。如果你之前在容器裡修改過檔案,都會沒有。當然docker也不推薦直接在容器動手腳,建議寫個shell指令碼,啟動之後在容器內執行。
- 還是 mysql 資料庫問題,如果容器啟動了 mysql,之後通過配置修改了密碼,可能會造成重新連線後死活顯示”Access denied”。
這是因為如果建立了共享卷volume,裡面存的還是老的user資訊,需要docker-compose rm -v
清除卷然後重連。 - 刪除日誌
find /var/lib/docker/containers/ -type f -name "*.log" -delete
相關文章
- Mask RCNN測試過程經驗總結CNN
- Javascript Promise學習過程總結JavaScriptPromise
- docker使用經驗總結(三、Docker compose基礎應用)Docker
- docker的學習總結Docker
- [Docker 系列]docker 學習十一,docker 總結和麵試題整理Docker
- 分享一些我自己的docker使用經驗Docker
- 開發中的一些經驗總結
- 使用七牛雲端儲存的一些經驗總結
- 【原】深度學習的一些經驗總結和建議 | To do v.s Not To Do深度學習
- 學習UbuntuLinux作業系統過程和經驗UbuntuLinux作業系統
- 總結Django一些開發經驗Django
- c primer plus 章節學習,經驗總結。
- Docker實踐過程中遇到的一些問題總結(持續更新中)Docker
- 學習 CodeWhisperer 的一些總結
- 分享一些自己的學習過程和學習方法
- 神經網路與深度學習 課程複習總結神經網路深度學習
- Git Flow 使用經驗總結Git
- mysql索引使用經驗總結MySql索引
- 學習和使用 Vue 過程中的一些資源分享Vue
- 分享 | OpenVINO的安裝、上手、學習路線經驗總結
- Java學習過程中實戰開發經驗重要嗎?Java
- Vue學習筆記 - 關於過渡效果的一些總結Vue筆記
- 【MySQL精品學習資源合集】含入門課程、學習筆記、運維經驗總結(建議收藏!!)MySql筆記運維
- 內部業務系統的一些經驗總結
- 韓語學習經驗總結,給韓語初學者指路
- 爬蟲學習中的一些總結爬蟲
- 學習C過程中的筆記系列-2筆記
- WSL 中學習 Laravel 過程中的一些配置Laravel
- 演算法工程師老潘總結的一些經驗演算法工程師
- Windows RocketMQ使用方法經驗總結WindowsMQ
- 使用 Golang 寫爬蟲經驗總結Golang爬蟲
- AOT使用經驗總結m8
- 【Docker 系列】docker 學習 三Docker
- [Docker 系列]docker 學習 三Docker
- Elasticsearch 一些命令彙總 以及學習總結Elasticsearch
- JS/JSP學習的一些問題總結JS
- 工作經驗總結
- 過來人的大資料學習經驗大資料