Docker#

删除旧版本#

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc
do
  sudo apt-get remove $pkg
done

安装 Docker#

sudo apt-get install apt-transport-https \
  ca-certificates \
  curl \
  software-properties-common \
  docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

验证 Docker 是否安装成功#

sudo docker run hello-world

卸载 Docker#

sudo apt-get purge docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

列出本地所有镜像#

docker images

删除镜像#

# 删除指定镜像
docker image rm <镜像名称>:<标签名>

# 只删除 <none> 标签的镜像
docker image rm -f $(docker images | grep '<none>' | awk '{print $3}')

# 无提示地删除所有没有被至少一个容器使用的镜像(慎用)
docker image prune -a -f

删除容器#

# 删除指定容器
docker rm -f <容器 ID>

# 删除状态为 Exited 的容器
docker rm $(docker ps -a | grep Exited | awk '{print $1}')

# 强制删除正在运行的容器(慎用)
docker rm -f $(docker ps -a | grep Exited | awk '{print $1}')

交互式启动容器#

以交互模式启动一个容器并进入其 shell 环境:

docker run -it ubuntu:20.04 /bin/bash

对于没有安装 bash 的镜像(如 Alpine):

docker run -it alpine sh

查看运行中的容器#

docker ps

查看所有容器(包括停止的):

docker ps -a

构建镜像#

从当前目录下的 Dockerfile 构建镜像:

docker build -t <镜像名称>:<标签名> .

推送镜像到私有仓库#

docker tag <镜像名称>:<标签名> <Registry-URL>/<镜像名称>:<标签名>
docker push <Registry-URL>/<镜像名称>:<标签名>

下载镜像#

# 从指定 Docker Registry 拉取镜像
docker pull <Registry-URL>/<镜像名称>:<标签名>

# 从默认的 Docker Registry 拉取镜像
docker pull <镜像名称>:<标签名>

# 示例
docker pull myregistry.com/ubuntu:20.04

离线安装 Git 到现有镜像#

# 确保 apt 源与 Docker 容器中的 Ubuntu 版本保持一致
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo tee /etc/apt/sources.list <<EOF
deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
EOF
sudo apt-get clean all
sudo apt-get update

# 下载 deb 文件
PKGNAME="build-essential git"
apt-get download $(apt-cache depends --recurse --no-recommends \
  --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances \
  $PKGNAME | grep "^\w" | sort -u)

# 将 Git 安装包目录(绝对路径)挂载到 /mnt 目录
docker run -v $PWD:/mnt -it ubuntu:20.04 /bin/bash

# 在容器内,进入挂载点并开始安装
cd /mnt
dpkg -i *.deb

# 强制重新配置未正确配置的软件包
dpkg --configure -a
dpkg -i *.deb

# 保存当前容器的状态(假设容器正在运行),并制作新的镜像
docker ps
docker commit <容器 ID> <新镜像名称>:<标签名>

离线安装时,一些常见的错误:

#
# dpkg: error: duplicate file trigger interest for filename
#
mv /var/lib/dpkg/triggers/File /var/lib/dpkg/triggers/File.bak
apt-get --fix-broken install
dpkg -i *.deb