docker安装

常用操作

# 以root身份进入容器
docker exec -u 0 -it <container_id_or_name> /bin/bash

# ctr基本操作,建议安装nerdctl,兼容docker指令
ctr c ls
ctr t ls 
ctr t exec -t --user 0 --exec-id 0 weaviate-1 /bin/sh
ctr t rm -f weaviate-1
ctr c rm weaviate-1

查看日志

journalctl 是 systemd 管理的日志系统的主要接口。systemd 是现代 Linux 发行版中广泛使用的初始化系统和系统管理器,它负责管理系统的进程、服务和日志记录

# 显示详细日志,定位到末尾
journalctl -xe
# 查看docker服务的日志
journalctl -u docker.service

卸载旧版本

yum remove docker-ce docker-ce-cli containerd.io docker-ce-rootless-extras docker-buildx-plugin docker-compose-plugin

离线安装

如果你的服务器无法连接外网,可以使用离线包来安装docker和启动容器,官方文档:https://docs.docker.com/engine/install/centos/#install-from-a-package

sudo yum install containerd.io-1.6.28-3.2.el7.x86_64.rpm docker-ce-25.0.4-1.el7.x86_64.rpm docker-ce-cli-25.0.4-1.el7.x86_64.rpm docker-ce-rootless-extras-25.0.4-1.el7.x86_64.rpm docker-buildx-plugin-0.13.0-1.el7.x86_64.rpm docker-compose-plugin-2.6.0-3.el7.x86_64.rpm
sudo systemctl start docker
#verify
yum list installed | grep docker
sudo docker run hello-world

镜像导出与导入

docker pull <imageId:tag>
docker save -o <imageId>-<tag>.tar <imageId:tag>

# import
docker load -i <imageId>-<tag>.tar
# 查看刚导入的image
docker images
docker tag <image_id> <repo>:<tag>

容器镜像站:

  • https://dockerproxy.com/
  • docker.nju.edu.cn

设置镜像存储目录

tee /etc/docker/daemon.json << EOF
{
  "data-root": "/data/docker",
}
EOF

systemctl restart docker
docker info | grep 'Root Dir'

断点续传

Containerd 是一个开源的容器运行时(container runtime),设计用于管理容器的生命周期,包括镜像管理、容器执行、存储管理等核心功能。它最初是从 Docker 中的容器运行时组件提取出来的,后来成为一个独立的项目,被广泛地用于多种容器管理平台和工具中,其中包括 Docker、Kubernetes 等。

containerd-snapshotter 负责管理 Docker 镜像的快照。在拉取镜像时,Docker 引擎会通过 containerd-snapshotter 为每一层镜像创建快照。这些快照可以看作是文件系统的快照,包含了每一层镜像的文件和元数据。

docker存储驱动支持的文件系统类型

Storage driverSupported backing filesystems
overlay2xfs with ftype=1, ext4
fuse-overlayfsany filesystem
btrfsbtrfs
zfszfs
vfsany filesystem

当你使用 Docker Engine 作为容器运行时时,Docker 镜像通常会存储在 /var/lib/docker 目录下。这个目录包含:

  • containers/:存放容器的运行时状态和元数据。
  • image/:存放 Docker 镜像的各个层(layers)和元数据。
  • volumes/:存放 Docker 卷的数据。

当你使用 containerd 作为容器的运行时时,它默认使用 /var/lib/containerd 存储运行时的数据,类似 Docker Engine 的 /var/lib/docker 目录。

# 查看当前docker是不是用的containerd
systemctl status docker
# CGroup: /system.slice/docker.service
#         └─28173 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

systemctl status containerd
# 查看containerd runtime支持的文件系统,目前我这台机器支持:overlayfs, native
ctr plugin ls | grep io.containerd.snapshotter.v1
# io.containerd.snapshotter.v1          aufs                     linux/amd64    skip
# io.containerd.snapshotter.v1          btrfs                    linux/amd64    skip
# io.containerd.snapshotter.v1          devmapper                linux/amd64    error
# io.containerd.snapshotter.v1          native                   linux/amd64    ok
# io.containerd.snapshotter.v1          overlayfs                linux/amd64    ok
# io.containerd.snapshotter.v1          zfs                      linux/amd64    skip

# 如果使用了containerd,默认下载在(最后的目录是你指定文件系统):/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs

# 修改默认存储路径
echo 'root = "/data/docker/containerd"' > /etc/containerd/config.toml
# 重启containerd
systemctl restart containerd

# 启用containerd-snapshotter 来支持断点续传功能
tee /etc/docker/daemon.json << EOF
{
  "storage-driver": "overlayfs",
  "features": {
    "containerd-snapshotter": true
  }
}
EOF
# 重启docker
systemctl restart docker

从老版本升级docker后,可能会造成docker pull镜像成功后,docker images看不到的问题,但是重新pull立刻又成功,也可以运行容器。主要原因就是老版本用的是docker runtime不是dockerd,它读取的是/etc/docker/daemon.json里配置的data-root路径,新版本下载的镜像读的是/etc/containerd/config.toml配置的root路径(默认/var/lib/dockerd),两边冲突了。如果解决不了,可以考虑删除以前的docker runtime和containerd的目录,重启一次。

systemctl stop docker
systemctl stop containerd
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
systemctl start containerd
systemctl start docker

镜像

tee /etc/docker/daemon.json << EOF
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://huecker.io",
    "https://dockerhub.timeweb.cloud",
    "https://noohub.ru"
  ]
}
EOF

代理

docker pull代理

docker pull是由守护进程dockerd来执行的。

cat <<EOF > /etc/docker/daemon.json
{
  "proxies": {
    "http-proxy": "http://your_proxy_server:port/",
    "https-proxy": "http://your_proxy_server:port/",
    "no-proxy": "localhost,127.0.0.1"
  }
}
EOF

镜像构建代理

基本思路是使用宿主机的网络来使用代理。

# 宿主机执行,需要修改你的实际端口
export http_proxy="http://127.0.0.1:10809"
export HTTP_PROXY="http://127.0.0.1:10809"
export https_proxy="http://127.0.0.1:10809"
export HTTPS_PROXY="http://127.0.0.1:10809"

# 构建镜像使用宿主机网络
docker build --network host . -t <imagId>:<tag>

ctr相关操作

# 查看状态
systemctl status containerd
# 查看所有的命名空间
ctr namespaces ls

# 查看镜像,默认查看default空间下的
ctr images ls
ctr -n k8s.io images ls
# 简化输入命名空间动作
alias ctrk='ctr -n k8s.io'

# 拉取镜像
ctr images pull docker.io/library/alpine:latest
# 删除镜像
ctr images rm harbor.qihoo.net/finloan-dev/xinference:v0.10.3
# 删除所有镜像
for image in $(sudo ctr images ls -q); do
  sudo ctr images rm $image
done

push多平台镜像

# 查看镜像的manifest文件,提取平台对应的hash
docker manifest inspect semitechnologies/weaviate:1.25.7

# 拉取镜像,hash信息从manifest文件获取
docker pull semitechnologies/weaviate:1.25.7@sha256:57521bc9730de02b7af614d844fddfe07f52e0589cafa92aef625abe5ade1e9d
docker pull semitechnologies/weaviate:1.25.7@sha256:5b0236662d5f87e439b71cef2ea5d14214212173f493c6abd1e0bdc15d3ad64a

# 修改镜像tag
docker tag semitechnologies/weaviate:1.25.7@sha256:57521bc9730de02b7af614d844fddfe07f52e0589cafa92aef625abe5ade1e9d registry.cn-shenzhen.aliyuncs.com/docker-mirror2/weaviate:1.25.7-amd64
docker tag semitechnologies/weaviate:1.25.7@sha256:5b0236662d5f87e439b71cef2ea5d14214212173f493c6abd1e0bdc15d3ad64a registry.cn-shenzhen.aliyuncs.com/docker-mirror2/weaviate:1.25.7-arm64

# push镜像
docker push registry.cn-shenzhen.aliyuncs.com/docker-mirror2/weaviate:1.25.7-amd64
docker push registry.cn-shenzhen.aliyuncs.com/docker-mirror2/weaviate:1.25.7-arm64

# 创建多平台manifest后push
docker manifest create registry.cn-shenzhen.aliyuncs.com/docker-mirror2/weaviate:1.25.7 --amend registry.cn-shenzhen.aliyuncs.com/docker-mirror2/weaviate:1.25.7-amd64 --amend registry.cn-shenzhen.aliyuncs.com/docker-mirror2/weaviate:1.25.7-arm64
docker manifest push registry.cn-shenzhen.aliyuncs.com/docker-mirror2/weaviate:1.25.7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值