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;

Docker基础命令_第1张图片

-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基础命令_第2张图片

docker login

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

docker logout

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

docker tag

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

docker push

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

docker pull

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

docker search

从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基础命令_第3张图片

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基础命令_第4张图片

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访问,端口也会使用主机端口。所以主机端口不能被占用,否则容器启动会有问题。

你可能感兴趣的:(Docker,docker,容器,运维)