1. 为什么Docker比VM快?
docker有着比VM更少的抽象层
-
由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源
因此在CPU、内存利用率上Docker将会在效率上有明显优势
docker利用的时宿主机的内核,而不需要加载操作系统OS内核
-
当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统内核
进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程时分钟级别的。
-
而Docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个Docker容器只需要几秒钟
差异化:
Docker容器 | 虚拟机(VM) | |
---|---|---|
操作系统 | 与宿主机共享OS | 宿主机OS上运行虚拟机OS |
存储大小 | 镜像小、便于存储与传输 | 镜像庞大(vmdk、vdi等) |
运行性能 | 几乎无额外性能损失 | 操作系统额外的CPU、内存消耗 |
移植性 | 轻便、灵活,适应于Linux | 笨重、与虚拟机技术耦合度高 |
硬件亲和性 | 面向软件开发者 | 面向硬件运维这 |
部署速度 | 快速、秒级 | 较慢、10s以上 |
2. 常用启动命令
功能 | 命令 |
---|---|
启动docker | systemctl start docker |
停止docker | systemctl stop docker |
重启docker | systemctl restart docker |
查看docker状态 | systemctl status docker |
开机启动 | systemctl enable docker |
查看docker概要信息 | docker info |
查看docker总体帮助文档 | docker --help |
查看docker命令帮助文档 | docker 具体命令 --help |
3. 镜像命令
3.1 docker images
列出本地镜像:
docker images
各个选项说明:
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签版本号
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
同一仓库源可以有多个TAG版本,代表中国仓库源的不同个版本,我们使用
REPOSITORY:TAG
定义不同的镜像
如果不指定一个镜像的版本版本标签,docker默认使用 REPOSITORY:latest 最新版本镜像
如上图:就是 nacos:latest —— nacos镜像:最新版
3.1.1 OPTIONS说明
-a :列出本地所有的镜像(包含历史映像层)
-q :只显示镜像ID
docker images -a
docker images -q
3.2 docker search
- 查找某个镜像
docker search [OPTIONS] 镜像名字
参数 | 说明 |
---|---|
NAME | 镜像名称 |
DESCRIPTION | 镜像说明 |
STARS | 点赞数量 |
OFFICIAL | 是否是官方的 |
AUTOMATED | 是否是自动构建的 |
- OPTIONS说明:
--limit:只列出N个镜像,默认25个
docker search --limit 5 redis
常见报错:Error response from daemon: Get “https://index.docker.io/v1/search?q=redis&n=5”: dial tcp 199.96.63.177:443: connect: connection refused
这代表您没有连接到仓库
3.3 docker pull
- 下载镜像
docker pull 镜像名称[:TAG]
# 或者
docker pull 镜像名称
如果不规定TAG,那么就会使用latest 采用最新版本镜像
- 等价于:
docker pull 镜像名称:latest
3.4 docker system df
查看镜像/容器/数据卷所占的空间
3.5 docker rmi
- 删除某 个/些 镜像
docker rmi 镜像ID
功能 | 代码 |
---|---|
删除单个 | docker rmi-f 镜像ID |
删除多个 | docker rmi -f 镜像名1:TAG 镜像名2:TAG |
删除全部 | docker rmi -f ${docker images -qa} |
docker images -qa
的作用:列出所有的镜像ID
3.6 docker commit
docker commit
命令用于将容器的当前状态保存为一个新的 Docker 镜像。
docker commit
命令通常用于创建镜像来保存容器的状态,以便在将来可以重用或分发该镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
- **-a 😗*提交的镜像作者。
- **-c 😗*使用 Dockerfile 指令来创建镜像。
- **-m 😗*提交时的说明文字。
- **-p 😗*提交镜像前暂停容器(默认为 true)。
3.7 docker push
docker push
命令用于将本地构建的 Docker 镜像推送(上传)到 Docker 注册表(如 Docker Hub 或私有注册表)
这使得镜像可以在其他系统或环境中共享和使用
docker push [OPTIONS] NAME[:TAG]
NAME
: 镜像名称,通常包含注册表地址(如docker.io/myrepo/myimage
)。TAG
(可选): 镜像标签,默认为latest
。
OPTIONS 说明:
- **–disable-content-trust 😗*忽略镜像的校验,默认开启
4. 容器命令
注意,有镜像才能创建容器,这是根本前提,如果只是演示,可以使用nginx来做测试
docker pull nginx
4.1 新建+启动 容器
docker run [OPTINOS] IMAGE [COMMAND] [ARG...]
OPTIONS 说明:有些是一个减号,有些是两个减号
代码 | 说明 |
---|---|
–name=“容器新名称” | 为容器制定一个名称 |
-d | 后台运行容器并返回容器ID 即 启动守护式容器(后台运行) |
-i | 以交互模式运行容器,通常与 -t 同时使用 |
-t | 为容器重新分配一个伪输入终端,通常与 -i 同时使用 也即 启动交互式容器(前台有伪终端,等待交互) |
-P | 大写P,**随机 **端口映射 |
-p | 小写p,**指定 **端口映射 |
例如:
docker run -it nginx /bin/bash
4.2 列出正在运行的容器
docker ps [OPTIONS]
OPTIONS说明(常用):
-
-a :列出当前所有正在运行的容器+历史上运行过的
-
-l :显示最近创建的容器。
-
-n :显示最近n个创建的容器。
-
-q :静默模式,只显示容器编号。
4.3 进入/退出容器
如何进入一个守护式容器内部?两种方式:
docker exec -it 容器ID /bin/bash
# 或者
docker attach -it 容器ID /bin/bash
更推荐以 exec 形式进入容器
exec命令,会进入容器内部,并且启动一个新进程。
attach这个命令会将你带入容器当前正在执行的终端,不会启动新的进程。这种方法适合于需要直接接管容器主进程的场景。
当进入到交互式容器内部后,有两种退出方式
- exit :使用这种方式退出容器,会将容器停止
- 快捷键ctrl+p+q :容器不会停止
4.4 启动已停止运行的容器
代码 | 功能 |
---|---|
docker start 容器ID或容器名称 | 启动已停止运行的容器 |
docker restart 容器ID或容器名称 | 重启容器 |
docker stop 容器ID或容器名称 | 停止容器 |
docker kill 容器ID或容器名称 | 强制停止容器 |
docker rm 容器ID | 删除已停止的容器 |
docker rm -f ${docker ps -a -q} | 删除多个 |
docker ps -a -q | xargs docker rm | 删除多个 |
4.5 重要部分
4.5.1 启动守护式容器(后台启动)
大部分情况下,我们希望docker的服务是在后台运行的,我们可以通过 -d 指定容器的后台运行模式
docker run -d 镜像名
-
前台启动
docker run -it nginx
-
后台启动
docker run -d nginx
4.5.2 查看容器日志、运行进程、内部细节
# 查看容器日志
docker logs 容器ID
# 查看容器内运行的进程
docker top 容器ID
# 查看容器内部细节
docker inspect 容器ID
4.5.3 进入容器内部
更加推荐 exec 方式进入容器内部,因为使用exit退出不会导致容器停止
docker exec -it 容器ID /bin/bash
4.5.4 拷贝
从容器内拷贝到主机(Linux)上
docker cp 容器ID:容器内路径 目标主机路径
4.5.5 导入和导出容器
export
导出容器的内容作为一个tar归档文件[对应import命令]
import
从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]
docker export 容器ID > 文件名.tar
cat 文件名.tar | docker import -镜像用户/镜像名:镜像版本号
4.6 常用
指令 | 说明 |
---|---|
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 | kill 指定 docker 容器 |
load | 从一个 tar 包中加载一个镜像[对应 save] |
login | 注册或者登陆一个 docker 源服务器 |
logout | 从当前 Docker registry 退出 |
logs | 输出当前容器日志信息 |
port | 查看映射端口对应的容器内部源端口 |
pause | 暂停容器 |
ps | 列出容器列表 |
pull | 从docker镜像源服务器拉取指定镜像或者库镜像 |
push | 推送指定镜像或者库镜像至docker源服务器 |
restart | 重启运行的容器 |
rm | 移除一个或者多个容器 |
rmi | 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除] |
run | 创建一个新的容器并运行一个命令 |
save | 保存一个镜像为一个 tar 包[对应 load] |
search | 在 docker hub 中搜索镜像 |
start | 启动容器 |
stop | 停止容器 |
tag | 给源中镜像打标签 |
top | 查看容器中运行的进程信息 |
unpause | 取消暂停容器 |
version | 查看 docker 版本号 |
wait | 截取容器停止时的退出状态值 |