docker
创建:2025-04-19 23:15
更新:2025-04-19 23:15

debain下安装docker

保存如下脚本文件install_docker.sh

#!/bin/bash
set -x
set -e

# curl -fsSL https://get.docker.com -o install-docker.sh 
# bash install-docker.sh --mirror Aliyun

## 安装docker
systemname=`cat /etc/os-release |grep VERSION_CODENAME|awk -F= '{print $2}'`
apt install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL "https://mirrors.aliyun.com/docker-ce/linux/debian/gpg" -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.aliyun.com/docker-ce/linux/debian $systemname stable" > /etc/apt/sources.list.d/docker.list
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin
docker version

## 更改镜像配置
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
    "registry-mirrors": [
        "https://docker.xuanyuan.me",
        "https://docker.m.daocloud.io",
        "https://docker.1ms.run"
    ]
}
EOF
systemctl enable docker
systemctl restart docker

## 手动添加rootless
set +e
groupadd docker
chgrp docker /var/run/docker.sock

echo "======================================================"
echo "添加用户到docker用户组: sudo usermod -aG docker <username>"
echo "然后重新登录"
echo "======================================================"

root权限下执行

sudo bash install_docker.sh

安装轻量级管理工具portainer

rootless

docker run -d -p 9000:9000 --name=portainer --restart=always \
    -v /$XDG_RUNTIME_DIR/docker.sock:/var/run/docker.sock \
    -v ~/.local/share/docker/volumes:/var/lib/docker/volumes \
    -v ~/data/portainer:/data \
    portainer/portainer-ce

root

sudo docker run -d \
    --name=portainer \
    --restart=always \
    -p 9000:9000 \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /data/portainer:/data \
    portainer/portainer-ce

让非root启动的docker中的用户与主机用户相同

这个操作是为了创建的文件什么的所属权限一致, 方便双方访问文件

docker run -d -it --name $container_name \
    --security-opt seccomp=unconfined --ulimit core=-1 \
    -m 512M --memory-swap -1 --cpus=1 \
    -v $HOME/.bashrc:$HOME/.bashrc:ro \
    -v /etc/group:/etc/group:ro \
    -v /etc/passwd:/etc/passwd:ro \
    -v /etc/subuid:/etc/subuid:ro \
    -v /etc/subgid:/etc/subgid:ro \
    --user $(id -u):$(id -g) \
    -v $cwd:/data \
    -w /data \
    --net=host \
    --log-opt max-size=100m \
    ubuntu:22.04 ./server -q

Docker中产生core dump文件

https://abcdabcd987.com/core-dump-file-in-docker/

首先是,我们要在宿主机上执行

echo '/tmp/core.%t.%e.%p' | sudo tee /proc/sys/kernel/corepattern 这是因为系统在产生 Core Dump 文件的时候是根据 /proc/sys/kernel/corepattern 的设定。而默认的设定是 |/usr/share/apport/apport %p %s %c %P,也就是用管道传给 apport。然而 Docker 里面的系统不一定有装 apport,并且 /proc 又是直接挂到 Docker 里面的,所以我们就得改成放到固定的位置去,也就是 /tmp。

另外,在 docker run 的时候要加上以下参数

--ulimit core=-1 --security-opt seccomp=unconfined
前者就是把 Core Dump 文件的大小设置为无限制,后者是为了开放 ptrace 系列高权限的系统调用,这样我们才可以在 Docker 里面使用 GDB。

OCI runtime create failed

https://github.com/docker/for-linux/issues/841

Swap is disabled on the host.

swap建议

mem <= 4g:       4G
mem 4 ~ 16G:     8G
mem 16G ~ 64G:   16G
mem 64G ~ 256G:  32G

添加swap

sudo dd if=/dev/zero of=/var/swap bs=1M count=8192
sudo mkswap -f /var/swap
sudo swapon /var/swap
free -h
cat /proc/swaps

## 开机自动挂载
sudo vim /etc/fstab
/var/swap swap swap defaults 0 0

## 卸载swap
## sudo swapoff /var/swap

然后重启主机就可以了,docker安装成功后再重启才有效。