保存如下脚本文件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
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
这个操作是为了创建的文件什么的所属权限一致, 方便双方访问文件
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
首先是,我们要在宿主机上执行
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。
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安装成功后再重启才有效。