目录
- 1.docker镜像(Image),容器(Container),仓库(Repository)的基本概念
- 1.2 主要流程
- 2.1 镜像的获取(pull):
- 2.2 查看已安装的镜像(images)
- 2.3 删除镜像(rmi)
- 2.4 查看镜像详细信息(inspect)
- 2.5 tag命令为本地镜像添加新标签(tar)
- 2.6 使用histroy 查看镜像历史(history)
- 2.7 利用现有容器创建新镜像(commit)
- 2.8 载入与导出镜像(save/load)
- 3.1 创建容器(run/create)
- 3.2 启动容器(start)
- 3.3 暂停容器(pause/unpause)
- 3.4 终止容器运行(stop):
- 3.5 进入容器(attach/exec)
- 3.6 查看容器情况(ps)
- 3.7 删除容器(rm)
- 3.8 容器与本地之间传输文件(cp):
- 3.9导入和导出容器(import/export):
- 4.1 安装python
- 4.2 安装pip
1.docker镜像(Image),容器(Container),仓库(Repository)的基本概念
Dockers的三大核心概念是镜像,容器,仓库。
镜像(Image):镜像是容器运行的前提。镜像可以理解为虚拟机里的系统ISO文件,只不过内存大大减小;就像是面向对象中的类,相当于一个模板。
容器(Container):容器就像是在面向对象中被实例化的对象。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID 空间。
仓库(Repository):仓库,从认识上,就像是软件包上传下载站,有各种软件的不同版本被上传供用户下载。
1.2 主要流程
1.拉取(pull)或导入(load)镜像
2.利用镜像创建容器(run/create),也可直接进入容器,跳过3
3.进入容器(exec/attach)
4.下载需要的文件(apt install/pip install)
5.下载完成后退出容器(exit)
6.利用修改过的容器创建新的镜像(commit)
7.导出镜像(save)
2.1 镜像的获取(pull):
格式:docker [image] pull NAME [ :TAG] 。
docker pull ubuntu
意思就是从DockerHub中下载的Ubuntu.
Tip1: 因为没有指定TAG版本号,所以默认下载最新的版本。ubuntu
实质上就是ubuntu:latest
Tip2: 严格地讲,镜像的仓库名称中还应该添加仓库地址(即registry, 注册服务器)作为前缀 ,只是默认使用的是官方DockerHub服务 ,该前缀可以忽略。 例如:docker pull ubuntu
相当于docker pull registry.hub.docker.com/ubuntu:latest
。当从非官方仓库下载镜像时,就必须在仓库名称前加上完整的仓库地址。
docker pull ubuntu:18.04
2.2 查看已安装的镜像(images)
docker images
2.3 删除镜像(rmi)
删除最新版的ubuntu镜像
docker rmi ubuntu:latest
然后重新查看:
当然也有可能会出现删除报错的情况,比如先运行一个容器
然后再删除ubuntu:18.04就会报错
表示着有ID为801a301a31e0
的容器占用着该镜像,不可以直接删除镜像。
方式一:强制删除,不推荐
docker rmi -f ubuntu:18.04
方式二:先删除占用该镜像的容器,再删镜像
删除镜像可以根据之前提示的ID去删除,例如:
可以使用ps指令查看所有容器:
docker ps -a
使用rm去删除容器
docker rm 801a301a31e0
但也会出现多个容器占用一个镜像的情况,一条一条删容器太慢了。
还可以通过docker桌面程序直接删除容器:
然后再删除镜像就可以了。
2.4 查看镜像详细信息(inspect)
docker inspect ubuntu:18.04
2.5 tag命令为本地镜像添加新标签(tar)
先查看镜像
docker images
然后,为ubuntu:18.04添加新的标签,
docker tag ubuntu:18.04 myubuntu:latest
然后再次查看:
2.6 使用histroy 查看镜像历史(history)
docker history ubuntu:18.04
2.7 利用现有容器创建新镜像(commit)
即先利用镜像创建一个容器,在容器中进行修改后,再提交创建一个新的镜像。
先创建一个容器:
docker run -it ubuntu:18.04 /bin/bash
然后创建一个test文件,这样该容器的环境就会与原镜像的环境产生差异
touch test
exit
然后利用该容器commit提交创建一个新镜像:
docker commit -m "Added a new file" -a "Docker Newbee" 72fb7719f9b8 test:5.20
参数说明:
--author/-a "Xiao Ming"
--message或者 -m "Added a new file"
其中 --author 是指定修改的作者,而 --message 则是记录本次修改的内容。
这点和 git 版本控制相似,不过这里这些信息可以省略留空。
72fb7719f9b8
表示提交容器的ID
test:5.20
表示即将生成的镜像名及版本号
然后我们再查看镜像就会发现多了一个我们刚创建的:
docker images
最后我们利用这个新镜像再创建一个容器,则可以发现该容器内部就会有之前创建的test文件。
docker run -it test:5.20 /bin/bash
ls
说明我们的新镜像已经存在了之前的修改部分,不同于原始镜像。
2.8 载入与导出镜像(save/load)
导出镜像save:
格式: docker save -o 导出文件名 镜像名:版本号
docker save -o ubuntu_18.04.tar ubuntu:18.04
然后再终端的当前目录可找到导出的tar压缩包
载入镜像load:
docker load -i ubuntu_18.04.tar
3.1 创建容器(run/create)
参数说明:
OPTIONS说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
方式一:run,创建并启动
因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。所需要的命令主要为 docker run 。
在后台创建并运行:
docker run -itd --name workspace ubuntu:18.04 bash
创建容器并直接进入交互界面
docker run -it --name workspace2 ubuntu:18.04 bash
退出交互界面:
exit
方式二:先使用create创建容器,再使用start启动容器:
docker create -it --name workspace3 ubuntu:18.04 bash
注意:此时容器workspace3
已创建,但并没有被启动
使用ps查看所有容器
docker ps -a
在这里插入图片描述
然后用start启动容器:
docker start -a -i workspace3
3.2 启动容器(start)
在create创建容器或已经从容器exit退出后,可以再次启动容器。
方式一:start
docker start workspace
3.3 暂停容器(pause/unpause)
docker pause workspace
恢复
docker unpause worksapce
3.4 终止容器运行(stop):
docker stop workspace
然后重新启动看3.2的容器启动部分
3.5 进入容器(attach/exec)
当使用 -d时,程序进入后台,用户无法对容器进行操作,此时就需要进入容器。
前提:容器必须处于运行状态,否则就会报错。
方式一:使用attach
docker attach workspace
方式二:使用exec
docker exec -it workspace3 /bin/bash
3.6 查看容器情况(ps)
查看全部容器:
docker ps -a
查看当前正在运行的容器:
docker ps
3.7 删除容器(rm)
格式: docker rm [容器名/容器ID]
docker rm workspace3
当容器正在运行时删除会报错,此时可以先使用stop
终止容器,或者使用docker rm -f
强制删除。
3.8 容器与本地之间传输文件(cp):
1. 本地向容器传输文件
docker cp [本地文件路径] [容器名或ID]:[需要传输到容器的指定路径]
e.x:
sudo docker cp /home/yolov5-master/requirements.txt torch1.9:/home/
2. 容器向本地传输文件
docker cp [容器名或ID]:[需要传输到容器的指定路径] [本地文件路径]
e.x:
sudo docker cp torch1.9:/home/requirements.txt /home/yolov5-master
3.9导入和导出容器(import/export):
导出容器:
docker export -o mytest.tar workspace
然后在当前文件夹就可以找到导出的压缩包:
导入容器:
docker import mytest.tar mytest/ubuntu:18.04
可以看出,虽然是以容器导出的,但导入后依旧是镜像。
但其实也没多少差别,有模板就可以实例化。
4.1 安装python
apt-get install python3.6
4.2 安装pip
apt-get install python3-pip
写不动了,搞论文去了~~