友情提示
本文学习需要了解一些Linux简单命令
个人博客:https://linzyblog.netlify.app/
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker的守护进程运行在宿主机上,通过Socket从客户端访问!DockerServer 接收到 Docker-Client 的指令,就会执行这个命令。
容器的实质是进程,与宿主机上的其他进程是共用一个内核,但与直接在宿主机执行的进程不同,容器进程运行在属于自己的独立的命名空间。命名空间隔离了进程间的资源,使得 a,b 进程可以看到 S 资源,而 c 进程看不到。
Docker有着比虚拟机更少的抽象层。
1)虚拟机是硬件层抽象,虚拟硬件和操作系统。
2)Docker是应用层抽象,只虚拟化操作系统 。
Docker是基于宿主机的内核,VM是基于虚拟机虚拟化后的内核。
1)当新建一个容器时,docker不需要像虚拟机需要加载一个操作系统内核。然而避免引寻、加载操作系统内核是比较费时费资源的过程。
2)当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返回一个新建过程至少是分钟级别的。
3)docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。
特性 | Docker容器 | 虚拟机(VM) |
---|---|---|
操作系统 | 与宿主机共享OS | 宿主机OS上运行虚拟机OS |
存储大小 | 镜像小,便于存储和传输 | 镜像庞大(vmdk\vdi)等 |
运行性能 | 几乎无额外性能损失 | 操作系统额外的CPU、内存消耗 |
移植性 | 轻便、灵活,适应于Linux | 笨重,与虚拟化技术耦合度高 |
硬件亲和性 | 面向软件开发者 | 面向硬件运维者 |
部署速度 | 快速,秒级 | 较慢,10s以上 |
学习一下大佬的文章:https://blog.csdn.net/Tencent_TEG/article/details/109505143?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166122025416782391822038%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=166122025416782391822038&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~pc_rank_34-4-109505143-null-null.142v42pc_rank_34,185v2control&utm_term=docker%E5%BA%95%E5%B1%82%E5%8E%9F%E7%90%86&spm=1018.2226.3001.4187
帮助文档地址:https://docs.docker.com/reference/
docker 命令 --help
docker version [OPTIONS]
名称,简写 | 默认 | 解释 |
---|---|---|
–format,-f | 使用给定的 Go 模板格式化输出 |
docker info [OPTIONS]
名称,简写 | 默认 | 解释 |
---|---|---|
–format,-f | 使用给定的 Go 模板格式化输出 |
docker images [OPTIONS] [REPOSITORY[:TAG]]
名称,简写 | 默认 | 解释 |
---|---|---|
–all,-a | 显示所有镜像(默认隐藏中间镜像) | |
–filter,-f | 根据提供的条件过滤输出 | |
–format | 使用 Go 模板格式化打印镜像 | |
–quiet,-q | 仅显示图像 ID |
该docker images命令采用一个可选[REPOSITORY[:TAG]]参数,将列表限制为与参数匹配的镜像。如果您指定 REPOSITORY但 no TAG,该docker images命令会列出给定存储库中的所有镜像。
名词 | 解释 |
---|---|
REPOSITORY | 镜像的仓库源 |
TAG | 镜像的标签 |
IMAGE ID | 镜像的id |
CREATED | 镜像的创建时间 |
SIZE | 镜像的大小 |
docker search [OPTIONS] 镜像名
名称,简写 | 默认 | 解释 |
---|---|---|
–filter,-f | 根据提供的条件过滤输出 | |
–format | 使用 Go 模板格式化打印搜索 | |
–limit | 25 | 最大搜索结果数 |
–filter filter 通过搜索来过滤,例如–filter=STARS=300表示搜索出来的镜像STARS大于300的
docker pull [OPTIONS] 镜像名[:tag|@DIGEST]
名称,简写 | 默认 | 解释 |
---|---|---|
–all-tags,-a | 下载存储库中的所有标记镜像 | |
–disable-content-trust | true | 跳过镜像验证 |
–platform | 如果服务器支持多平台,则设置平台 | |
–quiet,-q | 抑制详细输出 |
注意:Docker 镜像可以由多个层组成。图层可以被镜像重用,例如,debian:jessie图像与debian:latest.拉取debian:jessie镜像只会拉取其元数据,而不是其层,因为所有层都已在本地存在。
Docker 使用内容可寻址的镜像存储,镜像 ID 是涵盖镜像配置和层的 SHA256 摘要。在上面的示例中, debian:jessie并且debian:latest具有相同的图像 ID,因为它们实际上是用不同名称标记的相同图像。因为它们是同一个镜像,所以它们的层只存储一次,不会消耗额外的磁盘空间。
docker rmi [OPTIONS] 镜像id [镜像id...]
名称,简写 | 默认 | 解释 |
---|---|---|
–force,-f | 强制删除镜像 |
docker rmi -f $(docker images -aq)
注意:必须存在镜像才能运行容器
我们这里使用centos作为例子来理解容器命令,需要先拉取centos的镜像
docker pull centos
docker run [OPTIONS] 镜像id [COMMAND] [ARG...]
名称,简写 | 默认 | 参数说明 |
---|---|---|
–name | 为容器分配名称,用来区分容器 | |
–detach,-d | 在后台运行容器并打印容器 ID | |
-it | 使用交互式运行,进入容器查看内容 | |
-p | -p xxxx:yyyy:宿主机上xxxx端口对应容器中yyyy端口,在外部访问时用的是宿主机上的端口 | |
-P(大写) | 随机指定端口 |
启动并进入容器
docker run -it centos bin/bash
docker ps [OPTIONS]
名称,简写 | 默认 | 参数说明 |
---|---|---|
–all,-a | 显示所有容器(默认显示刚刚运行) | |
–last,-n | -1 | 显示 n 个最后创建的容器(包括所有状态) |
–quiet,-q | 仅显示容器 ID |
docker rm [OPTIONS] 容器id [容器id...]
名称,简写 | 默认 | 参数说明 |
---|---|---|
–force,-f | 强制删除正在运行的容器(使用 SIGKILL) | |
–link,-l | 删除指定链接 | |
–volumes,-v | 删除与容器关联的匿名卷 |
删除所有容器:
docker rm -f $(docker ps -aq)
docker ps -a -q|xargs docker rm
强制删除容器:
docker rm -f 容器id
docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill 容器id
docker run -d 镜像名
注意:docker 容器后台运行的时候,必须要有一个前台进程运行,如果docker发现没有应用,就会自动停止容器。
docker logs [OPTIONS] CONTAINER
名称,简写 | 默认 | 解释 |
---|---|---|
–details | 显示提供给日志的额外详细信息 | |
–follow,-f | 关注日志输出 | |
–since | 显示自时间戳(例如 2013-01-02T13:23:37Z)或相对时间(例如 42m 42 分钟)以来的日志 | |
–tail,-n | all | 从日志末尾显示的行数 |
–timestamps,-t | 显示时间戳 | |
–until | 在时间戳(例如 2022-08-24T17:57:37Z)或相对时间(e.g. 42m for 42 minutes)之前显示日志 |
自己先编写一段shell脚本,以便容器可以有进程运行,不会自动停止:
docker run -d centos /bin/bash -c "while true;do echo linzy;sleep 1;done"
shell脚本:一直循环,每秒输出一条日志信息linzy
docker top 容器id
docker inspect [OPTIONS] 镜像id|镜像名 [镜像id|镜像名...]
名称,简写 | 默认 | 解释 |
---|---|---|
–format,-f | 使用给定的 Go 模板格式化输出 | |
–size,-s | 如果类型是容器,则显示总文件大小 | |
–type | 返回指定类型的 JSON |
docker exec -it 容器id baseShell
docker attach 容器id
命令 | 作用 |
---|---|
attach | 当前 shell 下 attach 连接指定运行镜像 |
build | 通过 Dockerfile 定制镜像 |
commit | 提交当前容器为新的镜像 |
cp | 从容器中拷贝指定文件或者目录到宿主机中 |
create | 创建一个新的容器,同 run 但不启动容器 |
diff | 查看 docker 容器变化 |
events | 从 docker 服务获取容器实时事件 |
exec | 在已存在的容器上运行命令 |
export | 导出容器的内容流作为一个 tar 归档文件[对应 import] |
history | 展示一个镜像形成历史 |
images | 列出系统当前的镜像 |
import | 从 tar 包中的内容创建一个新的文件系统映像[对应 export] |
info | 显示系统相关信息 |
inspect | 查看容器或镜像的详细信息 |
kill | 杀死指定 docker 容器 |
load | 从一个 tar 包中加载一个镜像[对应 save] |
login | 注册或登录一个docker hub |
logout | 从当前 docker history 退出 |
logs | 输出当前容器日志信息 |
port | 查看映射端口对应的容器内部源端口 |
pause | 暂停容器 |
ps | 列出容器列表 |
pull | 从docker hub拉取镜像 |
push | 推送指定镜像或库镜像到docker hub |
restart | 重启运行容器 |
rm | 移除一个或多个容器 |
rmi | 移除一个或多个镜像[无容器使用该镜像才能删除,否则要删除相关容器或者 -f 强制删除] |
run | 创建一个新的容器并运行一个命令 |
save | 保存一个镜像为 tar 包[对应 load] |
search | 在docker hub 中搜索镜像 |
start | 启动容器 |
stop | 停止容器 |
tag | 给源中镜像打标签 |
top | 查看容器中运行的进程信息 |
unpause | 取消暂停容器 |
version | 查看容器版本号 |
wait | 截取容器停止时的退出状态值 |