Docker基础命令

Docker常用命令

docker run

复制代码
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

-e设置环境变量;-e username=yjy

--name为容器指定一个名称;--name=yjy

-p指定端口映射,格式为:主机(宿主)端口:容器端口 -p 80:8080

-t为容器重新分配一个伪输入终端,通常与 -i 同时使用;

-i以交互模式运行容器,通常与 -t 同时使用;

-d后台运行容器,并返回容器ID;

-v宿主机目录:容器目录。将宿主机目录挂载到容器内。

docker cp

复制容器内的文件到宿主机

docker start

启动一个或多个已经被停止的容器

docker stop

停止一个运行中的容器

docker restart

重启容器

docker rm

删除容器

docker pause

暂停容器中所有的进程;

docker unpause

恢复容器中所有的进程;

docker exec

在运行的容器中执行命令

复制代码
docker exec -it mynginx /bin/sh /root/runoob.sh

docker logs

获取容器的日志;

docker ps

列出UP的容器;docker ps -a列出所有容器。包括Exited等状态的容器;

docker top

查看容器中运行的进程信息,支持 ps 命令参数;

docker inspect

获取容器/镜像的元数据;

docker login

登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub;

docker logout

登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub;

docker tag

标记本地镜像,将其归入某一仓库;

docker push

将本地的镜像上传到镜像仓库,要先登陆到镜像仓库;

docker pull

从镜像仓库中拉取或者更新指定镜像;

从Docker Hub查找镜像;

docker images

列出本地镜像;

docker rmi

删除本地一个或多少镜像;

docker build

命令用于使用 Dockerfile 创建镜像。

复制代码
docker build -t runoob/ubuntu:v1 .

会默认使用当前目录的Dockerfile进行编译镜像,编译后的镜像名为runoob/ubuntu:v1

docker history

查看指定镜像的创建历史

复制代码
docker history runoob/ubuntu:v3

docker save

将指定镜像保存成 tar 归档文件。-i参数指定输入的文件。

复制代码
docker load -i my_ubuntu_v3.tar

docker info

显示 Docker 系统信息,包括镜像和容器数。

docker version

显示 Docker 版本信息。

Docker的存储驱动

Docker支持AUFS、Btrfs、Device mapper、OverlayFS、ZFS五种存储驱动;

写时复制(CoW)

所有驱动都用到的技术------写时复制(CoW)。CoW就是copy-on-write,表示只在需要写时才去复制,这个是针对已有文件的修改场景。比如基于一个image启动多个Container,如果为每个Container都去分配一个image一样的文件系统,那么将会占用大量的磁盘空间。而CoW技术可以让所有的容器共享image的文件系统,所有数据都从image中读取,只有当要对文件进行写操作时,才从image里把要写的文件复制到自己的文件系统进行修改。写操作会在每个容器的文件系统里生成一个复本,每个容器修改的都是自己的复本,相互隔离,相互不影响。使用CoW可以有效的提高磁盘的利用率。

用时分配(allocate-on-demand)

而写时分配是用在原本没有这个文件的场景,只有在要新写入一个文件时才分配空间,这样可以提高存储资源的利用率。比如启动一个容器,并不会为这个容器预分配一些磁盘空间,而是当有新文件写入时,才按需分配新空间。

Overlay VS Device mapper

devicemapper将所有的镜像和容器存储在自己的虚拟块设备上,所有的操作都是直接对块进行操作,而不是文件。当要写入一个新文件时,在容器的镜像内为其分配新的块并写入数据,这个叫用时分配。当要修改已有文件时,再使用CoW为容器快照分配块空间,将要修改的数据复制到在容器快照中新的块里再进行修改。

overlay是基于文件级的存储。只有两层:一个upper文件系统和一个lower文件系统,分别代表Docker的镜像层和容器层。当需要修改一个文件时,使用CoW将文件从只读的lower复制到可写的upper进行修改,结果也保存在upper层。

Overlay是文件级存储,Device mapper是块级存储,当文件特别大而修改的内容很小,Overlay不管修改的内容大小都会复制整个文件,对大文件进行修改显示要比小文件要消耗更多的时间,而块级无论是大文件还是小文件都只复制需要修改的块,并不是整个文件,在这种场景下,显然device mapper要快一些。因为块级的是直接访问逻辑盘,适合IO密集的场景。而对于程序内部复杂,大并发但少IO的场景,Overlay的性能相对要强一些。

Overlay VS Overlay2

overlay驱动只工作在一个lower OverlayFS层之上,因此需要硬链接来实现多层镜像,但overlay2驱动原生地支持多层lowerOverlayFS镜像(最多128层)。因此overlay2驱动在合层相关的命令(如build和commit)中提供了更好的性能,与overlay驱动对比,消耗了更少的inode。

Docker的网络模式

可以看:docker的五种网络模式总结

【docker】CMD ENTRYPOINT 区别 终极解读!_entrypoint:-CSDN博客

安装 Docker 时,它会自动创建 3 个网络。可以使用 docker network ls命令列出这些网络。

这 3 个网络包含在 Docker 实现中。运行一个容器时,可以使用 the --net标志指定您希望在哪个网络上运行该容器。您仍然可以使用这 3 个网络。

  • bridge 网络表示所有 Docker 安装中都存在的 docker0 网络。除非使用docker run --net=选项另行指定,否则 Docker 守护进程默认情况下会将容器连接到此网络。在主机上使用 ifconfig命令,可以看到此网桥是主机的网络堆栈的一部分。

  • none 网络在一个特定于容器的网络堆栈上添加了一个容器。该容器缺少网络接口。

  • host 网络在主机网络堆栈上添加一个容器。容器中的网络配置与主机相同。可以通过主机IP访问,端口也会使用主机端口。所以主机端口不能被占用,否则容器启动会有问题。

相关推荐
闲云自留地2 小时前
K8s 的记忆大脑!ETCD 集群部署、etcdctl 命令与备份恢复全通关
容器·kubernetes·etcd
讯捷蓝达2 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
爱和冰阔落5 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
lisanmengmeng5 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮6 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
上火的金鱼妹6 小时前
k8s生产实际问题排查(网关,数据库读写等)
运维·服务器
孙克旭_6 小时前
k8s基础组件与创建资源
运维·docker·容器·kubernetes
孙克旭_7 小时前
云原生基础之Containerd容器运行时
运维·云原生
分布式存储与RustFS7 小时前
RustFS 自建对象存储实战目录:110 篇按场景分类(持续更新)
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
无忧_wy7 小时前
MoneyPrinterTurbo 自动化视频生成实战指南
运维·人工智能·自动化·音视频