整理了一下常用的容器
1.移除老容器
sudo apt-get remove docker docker-engine docker.io containerd runc
2.安装容器环境
curl -fsSL https://get.docker.com | bash -s docker —mirror Aliyun
docker info
systemctl enable docker
systemctl enable docker
systemctl enable docker.socket
3.修改容器目录
systemctl stop docker.socket
systemctl stop docker
vi /usr/lib/systemd/system/docker.service
# 增加容器的数据目录 --data-root=/data/docker
systemctl daemon-reload
systemctl start docker.socket
systemctl start docker
systemctl status docker.socket
systemctl status docker
docker info
4.换源
vi /etc/docker/daemon.json
{
"registry-mirrors" : [
"https://ustc-edu-cn.mirror.aliyuncs.com/",
"https://mirror.ccs.tencentyun.com",
"http://registry.docker-cn.com",
"http://docker.mirrors.ustc.edu.cn",
"https://mirror.baidubce.com",
"http://hub-mirror.c.163.com"
],
"insecure-registries" : [
"registry.docker-cn.com",
"docker.mirrors.ustc.edu.cn"
],
"debug" : true,
"experimental" : true
}
gitlab
docker pull gitlab/gitlab-ce:latest
mkdir -p /opt/gitlab
mkdir -p /opt/gitlab/config # 映射到 Glitlab 容器中的配置目录
mkdir -p /opt/gitlab/logs # 映射到 Glitlab 容器中的日志目录
mkdir -p /opt/gitlab/data # 映射到 Glitlab 容器中的数据目录
docker run --detach \
--hostname=192.168.1.50 \
--publish 443:443 \
--publish 9001:80 \
--publish 8022:22 \
--name=mygitlab \
--restart=always \
--volume /opt/gitlab/config:/etc/gitlab \
--volume /opt/gitlab/logs:/var/log/gitlab \
--volume/opt/gitlab/data:/var/opt/gitlab \
--volume /etc/localtime:/etc/localtime:ro \
--privileged=true \
gitlab/gitlab-ce:latest
修改gitlab仓库http下载链接
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
#修改gitlab.yml如下:
gitlab:
## Web server settings (note: host is the FQDN, do not include http://)
host: 192.168.1.50
port: 9001
https: false
time_zone: "Asia/Shanghai"
ssh_host: 192.168.1.50
ssh_port: 1022
gitlab-ctl restart
portainer
docker run -d --name=portainer \
--publish 9091:9000 \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /opt/portainer/:/data:rw \
portainer/portainer-ce:latest
mariadb
docker run -d \
--name db \
--restart=always \
-v /opt/db/sqlbak:/sqlbak:rw \
-v /opt/db/data:/var/lib/mysql:rw \
-e MYSQL_ROOT_PASSWORD=09UKtHVPTH2NnxKjhiq3JzAFGNVyHHTC \
mariadb
phpmyadmin
docker run -d \
-e PMA_HOST=db \
--name phpmyadmin \
--restart=always \
phpmyadmin:latest
mm-wiki
docker container run -d \
--restart=always \
--name wiki \
-p 8081:8080 \
--network coust-net \
-v /opt/mm-wiki/bin:/mm-wiki \
-v /opt/mm-wiki/data:/data \
217heidai/mm-wiki
caddy
docker search caddy
深度学习 nvidia-docker2
# 配置源
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu18.04/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
# 安装nvidia docker
sudo apt-get install nvidia-docker2
sudo systemctl restart docker
# 测试CUDA是否能够运行
# https://gitlab.com/nvidia/container-images/cuda/blob/master/doc/supported-tags.md
sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
docker run --rm --gpus all nvidia/cuda:11.0.3-base nvidia-smi
docker run --rm --gpus all nvidia/cuda:12.2.0-base nvidia-smi
labelimg
docker pull ludwigprager/labelimg
# 远程 export DISPLAY=192.168.0.111:0.0
# 本地 export DISPLAY=:0.0
xhost +
docker run -ti --rm \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $DIR/images/:/images/ \
ludwigprager/labelimg:1
# --device=/dev/video0:/dev/video0 \
#export DISPLAY=$1:0.0
DIS=$(who -mu | awk '{print $NF}'):0.0
DISPLAY=`echo $DIS | sed 's/[()]//g'`
xhost +
docker run -ti --rm \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v /data/cloudeye/comm_img:/images/ \
ludwigprager/labelimg:1
labelme
docker pull wkentaro/labelme
xhost +
docker run -it \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=$DISPLAY \
-v /opt/work_docker/labelme/:/root/workdir \
wkentaro/labelme
#export DISPLAY=$1:0.0
DIS=$(who -mu | awk '{print $NF}'):0.0
DISPLAY=`echo $DIS | sed 's/[()]//g'`
xhost +
docker run -it --rm \
-v /data/cloudeye/comm_img:/root/workdir \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=$DISPLAY \
wkentaro/labelme
yolov5_gpu
#指定端口映射、指定GPU模式进行启动
sudo docker run -it \
--runtime=nvidia \
-v /opt/work_docker/yolov5:/project \
-p 16022:22 \
-p 16027:6066 \
--ipc=host \
--name yolov5_gpu \
--gpus all \
ultralytics/yolov5:latest
FROM ubuntu:latest
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:123456' | chpasswd
RUN sed -ri 's/^PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
https://github.com/ultralytics/yolov5
mkdir -p /usr/src/datasets/coco128/images/train2017/
cp -r /work/coco128/* /usr/src/datasets/coco128/images/train2017/
cp /work/taoguan_imgs/yolov5n.pt ./
apt install openssh-server
/etc/sshd_config
PermitRootLogin yes
password root
/etc/profile env
service ssh restart
ssh 到 docker
训练
nohup python train.py --data /work/imgs/coco128_cfg1.yaml --weights yolov5n.pt >train_task1.txt &
导出
python export.py --data /work/imgs/coco128_cfg1.yaml --weights best.pt --train --simplify --include onnx
paddleocr
# jupyter notebook
docker run --name ppocr \
-v $PWD:/mnt \
-p 8888:8888 \
--shm-size=32g \
paddlecloud/paddleocr:2.5-cpu-latest
#CPU
# 这是加上参数 --shm-size=32g 是为了防止容器里内存不足
docker run --name ppocr\
-v $PWD:/mnt \
-p 8888:8888 \
-it --shm-size=32g \
paddlecloud/paddleocr:2.5-cpu-efbb0a /bin/bash
#GPU
docker run --name ppocr \
--runtime=nvidia \
-v $PWD:/mnt \
-p 8888:8888 \
-it --shm-size=32g \
paddlecloud/paddleocr:2.5-gpu-cuda10.2-cudnn7-latest /bin/bash
相关文档
ESXI 显卡直通
驱动下载 https://www.nvidia.cn/Download/index.aspx?lang=cn
找到相应平台的驱动下载
上传到 /PATH 目录
安装
esxcli software vib install -v /PATH/NVIDIA-vGPU-kepler-VMware_ESXi_6.5_Host_Driver_367.134-1OEM.650.0.0.4598673.vib --maintenance-mode
web管理界面 管理 硬件-->PCI设备-->直通活动 选择相应的硬件 激活 直通
虚拟机配置
内存设置 预留 64G
高级参数配置
hypervisor.cpuid.v0=FALSE #这个代码是欺骗显卡,让它误以为自己运行在物理机上
pciPassthru.64bitMMIOSizeGB=64
#注意:这里的数值计算公式为显卡数量与单卡显存数的乘积向上舍入到下一个2的次幂,
例如我的p40(24G)计算方式为:1*24=24≈32;如果是三张p40(24G)计算方式为3*24=72≈128。
但是我实际测试下来,如果填写32就无法打开机,只有写64才能开机。
pciPassthru.use64bitMMIO=TRUE #这个是调用内存映射
克隆vm 只考虑了一个虚拟硬盘的情况 ./clone vm1name newvmname
#!/bin/bash
echo $1 $2
if [ ! -d "$PWD/$1" ]; then
echo "src vm not exist $PWD/$1"
exit 0
fi
if [ -d "$PWD/$2" ]; then
echo "des vm is exist $PWD/$2"
exit 0
fi
mkdir "$PWD/$2"
vmkfstools -i $PWD/$1/$1.vmdk -d thin $PWD/$2/$2.vmdk
cp $PWD/$1/$1.nvram $PWD/$2/$2.nvram
cp $PWD/$1/$1.vmsd $PWD/$2/$2.vmsd
cp $PWD/$1/$1.vmx $PWD/$2/$2.vmx
echo 's|$1|$2|g' "$PWD/$2/$2.vmx"
sed -i "s|$1|$2|g" "$PWD/$2/$2.vmx"
vim-cmd solo/registervm "$PWD/$2/$2.vmx"
exit 0