docker 的好处开箱即用,一次配置环境,后续永无后顾之忧;学习docker首先要明白镜像与容器的区别,该文是在了解这两者区别基础上给出了一些常用命令的操作
安装docker请参考我的另一篇文章
x86国产化麒麟系统上安装docker及问题解决
刚安装完docker的一个报错解决
docker: Got permission denied while trying to connect to the Docker daemon socket at unix
groupadd docker
gpasswd -a oneUser docker #oneUser为需要授权的用户
newgrp docker
docker ps #test
docker镜像获取
1.1、从网站上拉docker镜像
从网站:https://hub.docker.com/
进行查找适合的基础镜像
#网站
https://hub.docker.com/search?page=1&ordering=last_updated&q=cuda10.0
#拉取镜像命令
docker pull rogerchen/cuda10.0-cudnn7-py3.6
1.2 docker hub网站无法访问获取镜像方法
1.2.1登录docker账户(适合已经注册用户)
sudo docker login
然后根据提示输入用户名和密码即可,登录成功后有“Login Succeeded”提示,如下图
1.2.2通过命令查找公开的镜像
sudo docker search xxx
如下图,我搜索gcc相关镜像
1.2.3拉取镜像
sudo docker pull xxx
如上图,我想拉取第二个公开镜像
2、镜像操作
2.1、查看镜像
docker images
结果如下:
首行标签为:镜像仓库名称,版本标签,镜像ID,创建日期,大小
2.2、修改镜像
docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
样例:(REPOSITORY和TAG都要求小写字母,否则提示修改不成功)
docker tag ccbcea8a6757 test:test
2.3、删除镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]
# OPTIONS:
# -f,--force:强制删除
删除镜像前需要删除掉所有该镜像运行的容器,参考删除容器命令
2.4、保存镜像
docker save:导出镜像为镜像文件
docker export:导出容器为镜像文件
save命令类似对一个加载的镜像进行另存为到本地。
如果对容器内容进行更改后需要用export命令把一个更改好的容器保存为一个镜像
save -o /mnt/hgfs/share/V1.tar 848be2582b0a
若保存异常:“ open ./.docker_temp_xxx: permission denied问题”,解决方案
sudo docker save 镜像id > 压缩文件名字.tar
2.5、运行容器
docker run -it 镜像ID /bin/bash
#运行样例
docker run -it 3b9cc4a571e7 /bin/bash
2.6、挂载本地目录到docker镜像目录(设置本地共享目录到容器)
docker run -itd -v 本地目录:docker镜像目录 镜像ID /bin/bash
#运行样例
sudo docker run -itd -v /home/zhupenghui/MyWork/Work/BJGF:/share 81bcf752ac3d /bin/bash
2.7、加载本地镜像到docker
注意:docker save的镜像包,需要docker load载入
docker load < 镜像名.tar.gz
docker load < perl.tar.gz 或 docker load -i perl.tar.gz
如果用load加载export的镜像包,则会出现下面错误
open **** no such file or directory
3、容器操作
3.1、查看所有容器
docker ps -a
3.2、查看运行着的容器
docker ps
3.3、启动、停止、重启容器
docker start CONTAINER [CONTAINER...]
docker stop CONTAINER [CONTAINER...]
docker restart CONTAINER [CONTAINER...]
3.4、进入容器
docker exec -it containerID bash
进入容器修改里面内容前要启动容器
进入样例:
docker exec -it 8d1aff98b462 bash
3.5、保存容器为镜像文件
docker save:导出镜像为镜像文件
docker export:导出容器为镜像文件
注意:一般容器文件修改后需要用export进行导出保存成镜像,不能使用save命令,save命令类似一个另存为镜像,镜像内容还是没有变化
注意,存储的时候文件名都使用小写英文字母,不要使用大写英文字母,否则加载的时候可能有异常,详见加载容器方法
Docker export -o 保存容器绝对路径 容器ID(CONTAINER ID)
【使用样例: docker export -o /mnt/hgfs/share/exportv1.0.tar 8e084eefc292】
3.6、加载容器
docker export保存的容器,需要docker import载入
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
docker import deeplabv3_py36_v2_20220805.tar deeplab_py36:v1.0
注意,容器压缩包名用小写字母,大写字母会报如下错
加载成功界面
3.7、 删除容器
删除容器前要停止容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
# OPTIONS:
# -f:通过 SIGKILL 信号强制删除一个运行中的容器
# -l:移除容器间的网络连接,而非容器本身
# -v:删除与容器关联的卷
删除所有的ps -a 记录
docker rm `docker ps -a -q`
3.8提交修改的容器到新镜像
docker commit -m="描述信息" -a="作者" 容器id 目标镜像名: [TAG]
也可以简写:
docker commit 容器id 新镜像名:新tag
例:
sudo docker commit 40d6af00ea32 super_env:v1.1
执行完后可以再使用docker images查看保存的新镜像,后续可以使用save进行保存出来