安裝
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