分類
软件

在 Alma Linux 9 上安裝和使用 Docker

安裝

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *