Bootstrap

docker基本使用总结

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进行保存出来

;