以前使用Docker时的笔记,记录一下。
提示:以下命令供参考,个别需要根据实际修改。
一、Docker基础命令
导入镜像:docker load -i xxx.tar
以交互模式创建一个容器并运行命令:docker run -t -i python /bin/bash
退出容器:exit
查看正在运行的容器:docker ps
查看所有容器:docker ps -a
退出容器后重新进入:docker start [CONTAINER ID]
,然后docker attach [CONTAINER ID]
进入容器
进入后台运行的容器:docker attach [NAMES]
或者 docker attach [CONTAINER ID]
退出而不关闭容器(后台运行):Ctrl+P+Q
在运行的容器中执行命令或进入正在运行的容器:docker exec -i -t [CONTAINER ID] /bin/bash
运行docker里面的文件:docker run -d -P python:V1 python /home/docker_test.py
删除镜像:docker rmi image_id
通过image_id查找依赖镜像:docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=image id)
本地向容器传文件:docker cp <本地文件路径> container_id:<容器保存路径>
容器向本地传文件:docker cp container_id:<容器文件路径> <本地保存路径>
将容器打包成镜像:docker commit IMAGE_ID REPOSITORY:TAG
将指定镜像保存为tar文件:docker save -o name.tar REPOSITORY:TAG
网络端口映射:docker run -d -p 127.0.0.1:5001:5000 python:V1 python /home/docker_test.py
(例子表示可以通过127.0.0.1:5001来访问容器的5000端口,docker_test.py是简单的前端访问测试代码。)
-p:是容器内部端口绑定到指定的的主机端口。
二、Docker私有仓库
私有仓库搭建 :Docker官方提供了搭建私有仓库的镜像registry,只需要拉取镜像,运行容器并开放5000端口就可以使用。
-v选项可以将本地目录挂载到容器内的/tmp/registry下,容器被删除后镜像还在。
sudo docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
下面以milvus为例子:
镜像打标签:docker tag milvusdb/milvus:latest localhost:5000/milvus:latest
上传镜像到私有库:docker push localhost:5000/milvus
(本地)/ sudo docker push 10.99.xx.xxx:5000/registry
(远程)
从私有库拉取镜像:sudo docker pull 10.99.xx.xxx:5000/milvus:latest
(远程)
首次拉取私有仓库镜像需要配置私有仓库地址:
修改/etc/docker/daemon.json
文件
{
"registry-mirrors": [ "https://registry.docker-cn.com"],
"insecure-registries": [ "10.99.xx.xxx:5000"] # 私有仓库的IP:端口号
}
systemctl restart docker
# 重启docker
查看私有仓库:curl http://127.0.0.1:5000/v2/_catalog
(本地)、curl http://10.99.xx.xxx:5000/v2/_catalog
(远程)
查看镜像有哪些版本: http://127.0.0.1:5000/v2/<image_name>/tags/list
删除私有仓库镜像
查看默认配置:docker exec -it registry sh -c 'cat /etc/docker/registry/config.yml'
开启删除:
docker exec -it registry sh -c "sed -i '/storage:/a\ delete:' /etc/docker/registry/config.yml"
docker exec -it registry sh -c "sed -i '/delete:/a\ enabled: true' /etc/docker/registry/config.yml"
重启:docker restart registry
删除镜像:DELETE /v2/<image name>/manifests/<sha256>
删除版本镜像:curl -I -X DELETE http://127.0.0.1:5000/v2/backgroundremove/manifests/sha256:35c499a67b00778dd837a53c693776d9f89e40ed807559782e536cba382ee02f
sha256可以在挂载盘中找到:/data/registry/docker/registry/v2/repositories/backgroundremove/_manifests/tags/v1/index/sha256/
registry垃圾回收(容器内):registry garbage-collect /etc/docker/registry/config.yml
三、Docker源修改
软件源修改(/etc/apt/sources.list),没有vim的情况下可以使用cat修改:
root@d76cfe8e92ba:/etc/apt# cat << EOF > sources.list
> deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
> deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
> deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
> deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
> EOF
root@d76cfe8e92ba:/etc/apt# apt-get update
pip清华源修改:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
四、Docker使用GPU
安装Nvidia-container-runtime,下载地址:http://mirror.cs.uchicago.edu/nvidia-docker/libnvidia-container/stable/ubuntu18.04/amd64/
# 按顺序安装
dpkg -i libnvidia-container1_1.3.3-1_amd64.deb
dpkg -i libnvidia-container-tools_1.3.3-1_amd64.deb
dpkg -i nvidia-container-toolkit_1.4.2-1_amd64.deb
dpkg -i nvidia-container-runtime_3.4.2-1_amd64.deb
systemctl restart docker
创建容器需要加–gpus all,例如:docker run -t -i --gpus all backgroundremove:v1 /bin/bash,进入容器后执行nvidia-smi可以看到显卡信息。
总结
本文是仅仅是个人的Docker使用记录总结,方便日后查阅。