安裝
sudo dnf update -y sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io #Start and Enable Docker sudo systemctl start docker #sudo systemctl enable docker #Verify Installation sudo docker run hello-world sudo usermod -aG docker YOUR_USER sudo systemctl enable docker
更換 Docker 源
時間來到 2024 年,默認的軟件源不是{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}就是Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": read tcp 192.168.1.42:55114->54.236.113.205:443: read: connection reset by peer.,可以通過修改軟件源比如 https://docke.eu.org 來解決。
sudo nano /etc/docker/daemon.json
#內容為:
{
"registry-mirrors": ["https://docke.eu.org"]
}
#然後重啟服務
sudo systemctl restart docker
使用代理
如果更換 Docker 源也不行,還有一個簡單的辦法,就是使用代理。
sudo mkdir -p /etc/systemd/system/docker.service.d sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment="HTTP_PROXY=socks5://127.0.0.1:44082" Environment="HTTPS_PROXY=socks5://127.0.0.1:44082" Environment="NO_PROXY=localhost,127.0.0.1,::1" #restart docker sudo systemctl daemon-reload sudo systemctl restart docker #verify the setting systemctl show docker | grep -i proxy
postgres Docker
#file:docker-compose.yml
services:
db:
image: postgres
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
ports:
- "5432:5432"
volumes:
- ./docker-data-pg:/var/lib/postgresql/data
deploy:
resources:
limits:
cpus: ${POSTGRES_CPU_LIMIT}
memory: ${POSTGRES_MEM_LIMIT}
restart: ${POSTGRES_RESTART_POLICY}
#file:.env POSTGRES_USER=userp POSTGRES_PASSWORD=passwordp POSTGRES_DB=dbname #restart | no POSTGRES_RESTART_POLICY=no POSTGRES_CPU_LIMIT=2.0 POSTGRES_MEM_LIMIT=1024M
#啟動 docker sudo docker compose up -d
在網上看到有人提醒說,compose 文件中的資源限制(CPU、內存)會導致容器內服務重啟。推薦的做法是在容器內服務中配置硬件限制。
遷移 Docker 與數據
在舊電腦上:
#查看 docker 名字 docker ps #導出所有數據庫數據 docker exec -t <container_name> pg_dumpall -U <username> > all_databases.sql
複製 docker-compose.yml 和 all_databases.sql 到新電腦上,然後:
#啟動 docker sudo docker compose up -d #導入所有數據庫數據(方法一) sudo docker exec -i <container_name> psql -U <username> -d postgres < all_databases.sql #導入所有數據庫數據(方法二) sudo docker cp all_databases.sql <container_name>:/tmp/all_databases.sql sudo docker exec -i <container_name> psql -U <username> -d postgres -f /tmp/all_databases.sql
Docker 常用命令
#build new docker docker compose up -d --build #查看 docker 名字 docker ps #進入 docker 容器 docker exec -it DOCKER_NAME bash #If You Change environment, volumes, ports, or depends_on (data safe) docker compose up -d #If You Change the Dockerfile or build Settings docker compose up -d --build #stop and remove docker container cleanly docker compose down #remove everything even data docker compose down -v #If you've removed services or images and want to reclaim disk space docker system prune