「Docker」从初识到绝交
目录
记录 Docker 从安装到使用中的问题。
安装引擎
参考官方教程
# 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
- 登陆阿里云
- 进入镜像加速器
- 按照提示操作
开放远程服务
基于物理机(或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.serviceUbuntu 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
基于 Docker for Windows
连接服务
Windows 10 WSL
参考前述安装步骤在对应WSL中安装docker,注意:对于WSL1这不是完整安装
# 添加环境变量
sudo vim ~/.profile
# 最后增加 `export DOCKER_HOST="tcp://service_ip:2375"`
source ~/.profileWindows 10 WSL2
Pycharm
连接 Docker 服务

连接 Docker 镜像

硬件直通
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 -benchmarkFFmpeg 配置使用 Nvidia GPU 加速
install
FFmpegbinary withnvencsupport# 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 -yrun 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 dockerBuild
可以在 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 .用法
常用命令
- ctrl+p+q | 退出容器但不关闭
常见需求
保存临时容器为镜像
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本地存储占用查询及清理
# 查询当前 docker 系统占用 docker system df # 删除已停止的容器、未被使用的网络、悬空镜像(无标签镜像)及悬空构建缓存 docker system prune # 进一步,额外删除所有未被任何容器使用的镜像 docker system prune -a # 删除悬空镜像(无标签镜像) docker image prune # 删除已停止容器 docker container prune # 删除未被使用的卷 docker volume prune # 删除悬空(或所有)构建缓存 docker builder prune [-a]清理容器中
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 {} +