数据卷:独立于容器的生命周期
指令
==下载一个镜像==
docker pull nginx
docker pull pytorch/pytorch:1.8.1-cuda10.2-cudnn7-devel
==镜像-->启动容器==
docker run -d -P 80:80 ngix #运行一个容器 -d表示后台运行 -P后代表端口映射 ngix为镜像名
docker run --env http_proxy="http://192.168.1.38:7890" ngix # 运行容器 仅会执行镜像默认命令,运行后就退出了-env 设置环境变量代理
docker run -it ubuntu:18.04 bash #运行容器 开启终端
docker run -it -p 127.0.0.1:4000:22 ubuntu:18.04 bash #运行容器 开启终端 映射22端口到宿主机的4000
docker run -it --rm ubuntu:18.04 bash # 运行容器 -it开启交互式终端 --rm 容器退出后立即删除 bash 开启交互式shell
docker run --gpus all -it --rm 8b92 bash # 运行一个容器 并开放主机的gpus资源
docker run -it --privileged=true -v /test:/soft 8b92 bash # 运行 挂载宿主机test目录到容器内/soft内 解决无权限问题
docker run --gpus all --shm-size=16g -it --name torch181 pytorch/pytorch:1.8.1-cuda10.2-cudnn7-devel 指定名称
docker run --gpus all --shm-size=8g -it -v {DATA_DIR}:/mmfewshot/data mmfewshot # --shm-size=8g限制使用8g内存
docker run --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=0,1 --shm-size 8G -it ******* env LANG=C.UTF-8 /bin/bash # --shm-size 8G设置内存
==运行、执行容器==
docker start $CONTAINER_ID 运行退出的容器
docker attach $CONTAINER_ID ##连接上容器实时查看
或者两行变一行直接
docker start -i $CONTAINER_ID
docker exec dcnet /etc/init.d/ssh restart 也可以直接执行命令但不交互
docker logs $CONTAINER_ID ##在container外面查看它的输出
docker exec -it [CONTAINER ID] /bin/bash #进入运行中/后台运行的容器
docker rename oldcontainer newcontainer 更改容器名称
dockers cp src/ 96:/myfile/ 复制主机某文件至容器内 96为容器id
dockers cp 96:/myfile/ src/ 复制容器内某文件至宿主机 96为容器id
docker commit [CONTAINER ID] myimage:myversion #将==容器保存为本地镜像== 不推荐 一般采用Dockerfile生成镜像
docker rm -f 5f #==删除==id为5f的容器 -f 强制删除
docker kill -s KILL mynginx #==杀掉==一个运行中的容器
docker rmi m2 #==删除==m2镜像
docker save m2 > 1.tar # 将m2镜像保存为归档文件
docker load < 1.tar #加载文件中的镜像
docker build -t m2 . # 用Dockerfile创建镜像 m2为镜像名 点.为表示当前目录
docker ps -a # 查看历史容器
docker ps #查看运行中的容器
docker images #列出所有镜像
==登入登出
docker login -u [用户名] -p [密码] [服务器网站] #一般不推荐这样登录 密码可见 服务器网站不填为docker官方的 填的话是对应的服务器 例如registry.cn-shenzhen.aliyuncs.com是阿里的
docker login -u [用户名] [服务器网站]
docker login --username=[用户名] registry.cn-shenzhen.aliyuncs.com
docker login registry.cn-shenzhen.aliyuncs.com --username=[用户名] # 服务器也可以放前面
docker logout
二次挂载、端口映射
先停止容器服务
systemctl stop docker
vi /var/lib/docker/containers/{container_id}/hostconfig.json
systemctl start docker
权限问题
通过将用户添加到docker用户组可以将sudo去掉,命令如下
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
newgrp docker #更新用户组
为docker设置代理,非容器内
有时候docker pull下载镜像很慢 可以设置代理
1。停止docker
systemctl stop docker
2.更改docler服务文件,一般需要sudo
sudo vim /lib/systemd/system/docker.service
3.找到[Service]那一项,在其下添加如下,127.0.0.1:8889是我自己的代理IP及端口,更换为你的端口
Environment=HTTP_PROXY=http://127.0.0.1:8889/ HTTPS_PROXY=http://127.0.0.1:8889/
最后重启docker
systemctl daemon-reload
systemctl start docker
Dockerfile
# Base Images
## 从天池基础镜像构建(from的base img 根据自己的需要更换,建议使用天池open list镜像链接:https://tianchi.aliyun.com/forum/postDetail?postId=67720)
FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3
##安装依赖包
RUN pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
##或者从requirements.txt安装
##RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
## 把当前文件夹里的文件构建到镜像的根目录下,并设置为默认工作目录
ADD . /
WORKDIR /
## 镜像启动后统一执行 sh run.sh
CMD ["sh", "run.sh"]
docker build -t myimage:1.0 .
天池docker cuda gpu笔记
下载pycocotools失败 github下载好复制进去再装
pip install Cython -i https://mirrors.aliyun.com/pypi/simple/
docker cp PythonAPI 68:/mmdetection/ #将githun下载到的PythonAPI 导入进去
cd PythonAPI
pip install pycocotools
pycharm 调试docker内程序
docker run --gpus all -it -p 127.0.0.1:4000:22 ubuntu:18.04 bash #运行容器 开启终端 映射22端口到宿主机的4000
passwd
apt-get update
apt-get install openssh-server # 安装ssh
apt-get install openssh-client # 安装ssh
apt-get install vim # 安装vim
/etc/init.d/ssh restart # 启动ssh
执行后如图