Docker:docker的基本操作详解

本文介绍Docker的核心概念,包括镜像、容器和仓库,并详细讲解如何使用Docker进行镜像和容器的管理,如获取镜像、创建和启动容器等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

写不动了,搞论文去了~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值