Docker 實踐遇到的問題(持續更新)
本文列舉了使用 Docker 過程中遇到的問題。
時區
基於 Debian
的映象通過設定 環境變數
改變時區,在 Dockerfile 中增加 ENV
或在啟動容器時指定 $ docker run -e TZ=Asia/Shanghai ...
。
ENV TZ=Asia/Shanghai
基於 Alpine
的映象先安裝 tzdate
,再設定環境變數
RUN apk add --no-cache tzdata
ENV TZ=Asia/Shanghai
交叉執行
https://github.com/justincormack/cross-docker
x86_64
架構執行其他架構( armhf 等)容器,原理是運用 QEMU
macOS 不用以上指令碼,實際測試中與樹莓派對比,效能較差,畢竟是虛擬機器。
網路
macOS
macOS 不能 ping 通容器(Linux docker0 預設為 172.17.0.1),所以容器想要 ping 主機,必須填寫路由器分配給主機的 IP(192.168.199.100,而不是 172.17.0.1)。
DNS、host
不能在檔案中寫入配置,寫入也不生效。在 daemon.json
中可以配置 DNS
, 設定 hosts
請通過 docker build
、docker run
時的命令引數進行設定。
使用 Docker Compose
本部落格系列文章執行容器方式由 docker run
docker-compose
。
必須使用 .env.example
檔案來定義變數。使用時將 .env.example
複製為 .env
檔案。
規範
一個容器,一個服務
比如不要在一個容器中安裝 LNMP,可以使用 Docker Compose 分配到 3 個容器,集中啟動、管理。
一個容器執行多個服務:https://docs.docker.com/engine/admin/multi-service_container/
命令
使用 docker image
管理映象 代替 docker images
使用 docker container
管理容器 代替 docker ps
使用 docker volume
使用 docker network
管理容器網路
資料管理
詳細內容請檢視 Docker 資料管理
開發環境
Use bind mounts
to give your container access to your source code
生產環境
Use volumes
to store container data.
不贊成使用
容器互聯
反對 --link
,請使用自定義的 Docker 網路來連線多個容器
資料管理
反對 -v
或 --volume
,請使用 --mount
廢棄功能
https://docs.docker.com/engine/deprecated/