1. 程式人生 > 其它 >Docker 實踐遇到的問題(持續更新)

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 builddocker 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/

More Information