目录

「Docker」从初识到绝交

记录 Docker 从安装到使用中的问题。

安装引擎

参考官方教程

  1. Windows 10 参考这里
  2. Debian Buster(10)/Bullseye(11) 参考这里
  3. Install with convenience script 参考这里
# install with convenience script (not recommended for production environments)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh --dry-run
# or simply run
curl -fsSL https://get.docker.com | sudo sh

加速

Aliyun
  1. 登陆阿里云
  2. 进入镜像加速器
  3. 按照提示操作

开放远程服务

基于物理机(或ESXI、PVE虚拟机)的 Docker

Debian Linux (Firstly)

Ubuntu 18.04LTS / Debian Buster(10) PASSED

vim /lib/systemd/system/docker.service
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock --containerd=/run/containerd/containerd.sock

sudo systemctl daemon-reload
sudo systemctl restart docker.service
Ubuntu 18.04LTS (Secondly)
# 确认防火墙状态
sudo ufw status verbose
# 开启ufw
sudo ufw enable
# 开启端口
sudo ufw allow 2375/tcp
# 编号ufw规则以便操作(删除)
sudo ufw status numbered
sudo ufw delete 2
# 直接删除
sudo ufw delete allow 2375/tcp

基于 Vmware Workstation 虚拟机的 Docker

# config group
sudo groupadd docker
sudo usermod -aG docker $USER
# enable service
sudo systemctl enable docker
# expose port
sudo vim /lib/systemd/system/docker.service
## 定位到ExecStart=,并在最后加入 `-H tcp://0.0.0.0:2375`
# restart
sudo systemctl daemon-reload
sudo systemctl restart docker

https://store.yirami.xyz/review/other/docker_nat转发.jpg!review

基于 Docker for Windows

连接服务

Windows 10 WSL

参考前述安装步骤在对应WSL中安装docker,注意:对于WSL1这不是完整安装

# 添加环境变量
sudo vim ~/.profile
# 最后增加 `export DOCKER_HOST="tcp://service_ip:2375"`
source ~/.profile

Windows 10 WSL2

Pycharm

连接 Docker 服务

https://store.yirami.xyz/review/other/docker_pycharm连接docker.jpg!review

连接 Docker 镜像

https://store.yirami.xyz/review/other/docker_pycharm连接docker镜像.jpg!review

硬件直通

Nvidia GPU

refer to docker docs

# install latest Nvidia GPU driver and try this command to test GPU is enabled
docker run --rm -it --gpus=all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
FFmpeg 配置使用 Nvidia GPU 加速
  1. install FFmpeg binary with nvenc support

    # refer to: https://deb-multimedia.org
    echo "deb https://mirrors.aliyun.com/debian-multimedia bookworm main non-free" >> /etc/apt/sources.list
    # echo "deb https://www.deb-multimedia.org bookworm main non-free" >> /etc/apt/sources.list
    
    wget https://www.deb-multimedia.org/pool/main/d/deb-multimedia-keyring/deb-multimedia-keyring_2024.9.1_all.deb
    dpkg -i deb-multimedia-keyring_2024.9.1_all.deb
    apt update && apt dist-upgrade -y
  2. run docker container with parameters

    --gpus=all -e NVIDIA_DRIVER_CAPABILITIES=compute,video,utility

代理设置

Pull / Push

pull/push 的操作由受 systemd 管理的 dockerd 完成,因此代理需设置 systemd

mkdir -p /etc/systemd/system/docker.service.d
sh -c 'cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:10808"
Environment="HTTPS_PROXY=http://127.0.0.1:10808"
EOF'

# 重命名该服务配置,可以禁用代理
# mv /etc/systemd/system/docker.service.d/http-proxy.conf /etc/systemd/system/docker.service.d/http-proxy.conf.disabled

systemctl daemon-reload
systemctl restart docker

Build

可以在 docker build 构建时临时指定代理。

docker build \
  --build-arg http_proxy="http://10.0.0.50:10808" \
  --build-arg https_proxy="http://10.0.0.50:10808" \
  --build-arg HTTP_PROXY="http://10.0.0.50:10808" \
  --build-arg HTTPS_PROXY="http://10.0.0.50:10808" \
  -t my-app:latest .

用法

常用命令

  1. ctrl+p+q | 退出容器但不关闭

常见需求

  1. 保存临时容器为镜像

    docker ps -a  # 旧终端不关闭,新开终端,查看当前容器ID
    docker commit [id] rqalpha_tushare  # 提交容器
    # 删除失效的镜像
    docker ps -a
    docker stop xxx
    docker rm xxx
    docker rm $(docker ps -aq)
    docker rmi xxx
  2. 本地存储占用查询及清理

    # 查询当前 docker 系统占用
    docker system df
    
    # 删除已停止的容器、未被使用的网络、悬空镜像(无标签镜像)及悬空构建缓存
    docker system prune
    # 进一步,额外删除所有未被任何容器使用的镜像
    docker system prune -a
    
    # 删除悬空镜像(无标签镜像)
    docker image prune
    
    # 删除已停止容器
    docker container prune
    
    # 删除未被使用的卷
    docker volume prune
    
    # 删除悬空(或所有)构建缓存
    docker builder prune [-a]
  3. 清理容器中 VS Code Server 历史版本的二进制文件

    # vscode -> Help -> About,记录当前版本的 commit hash
    # 或者(如果在挂载卷中),可在 `Windows` 的 `Docker` 客户端中查看该卷的最近修改文件夹
    find /root/.vscode-server/bin -maxdepth 1 -mindepth 1 -not -name "replace_with_currrent_vscode_hash" -exec rm -rf {} +