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
相關文章
- 使用Docker部署Python應用的一些經驗總結DockerPython
- Hadoop平臺學習過程的一些總結Hadoop
- Mask RCNN測試過程經驗總結CNN
- Javascript Promise學習過程總結JavaScriptPromise
- .NET的C# 學習經驗總結C#
- 4年使用經驗,總結Django一些開發經驗Django
- docker的學習總結Docker
- Linux 核心學習經驗總結Linux
- [Docker 系列]docker 學習十一,docker 總結和麵試題整理Docker
- docker使用經驗總結(三、Docker compose基礎應用)Docker
- 使用七牛雲端儲存的一些經驗總結
- 分享一些我自己的docker使用經驗Docker
- phpcms使用過程的總結PHP
- 開發中的一些經驗總結
- mysql使用經驗總結MySql
- 【原】深度學習的一些經驗總結和建議 | To do v.s Not To Do深度學習
- 我的一些學習經驗:ONVIF
- 我2年學習程式設計的經驗總結程式設計
- 在學習OCLint自定義規則的過程中對AST的一些總結AST
- 總結Django一些開發經驗Django
- 學習UbuntuLinux作業系統過程和經驗UbuntuLinux作業系統
- 創業失敗的一些經驗總結創業
- 神經網路與深度學習 課程複習總結神經網路深度學習
- 分享一些自己的學習過程和學習方法
- c primer plus 章節學習,經驗總結。
- Docker實踐過程中遇到的一些問題總結(持續更新中)Docker
- 深度學習DeepLearning.ai系列課程學習總結:7. 深層神經網路理論學習深度學習AI神經網路
- mysql索引使用經驗總結MySql索引
- Git Flow 使用經驗總結Git
- 分享 | OpenVINO的安裝、上手、學習路線經驗總結
- 學習和使用 Vue 過程中的一些資源分享Vue
- Java學習過程中實戰開發經驗重要嗎?Java
- Android開發的16條小經驗總結Android
- 內部業務系統的一些經驗總結
- 學習 CodeWhisperer 的一些總結
- RunLoop的一些學習與總結OOP
- 【MySQL精品學習資源合集】含入門課程、學習筆記、運維經驗總結(建議收藏!!)MySql筆記運維
- JavaCPP技術使用經驗總結Java