目录
一、体系管理命令
1、启动Docker服务
2、制止Docker服务
3、重启Docker服务
4、设置Docker开机启动
5、查看Docker服务状态
6、查看Docker版本信息
- docker version 或 docker info
复制代码
二、镜像管理命令
1、查看本地镜像
- REPOSITORY:镜像仓库名称
- TAG:镜像的标签信息
- 镜像ID:唯一用来标识镜像,如果两个镜像的ID雷同,说明他们实际上指向了同一个镜像,只是具有不同标签名称而已
- CREATED:创建时间,说明镜像的末了更新时间
- SIZE:镜像大小
2、搜索Docker Hub上的镜像
2.1、常见选项
- -f, --filter filter:这个选项允许你根据特定条件过滤搜索效果。常见的条件是stars
- --format string:此选项允许你使用Go模板语法来自定义输出格式。
- --limit int:这个选项用来限制返回的搜索效果数量。
- --no-trunc:使用--no-trunc选项后,所有输出都不会被截断,会看到完整的描述和其他信息。
2.2、示例:搜索星数大于100的MySQL镜像并限制搜索效果为5个
- docker search -f stars=100 --limit 5 mysql
复制代码
docker search进行搜索返回的效果中不仅会列出直接名为 mysql的镜像,还会包括描述中带有 mysql 的其他镜像
3、从Docker Hub上拉取镜像
不加tag(版本号)即默认拉取最新版本latest
3.1、常见选项
- -a, --all-tags:下载仓库中的所有带标签的镜像。
- --disable-content-trust:跳过镜像验证,默认值为true,意味着默认情况下不进行验证。
- --platform string:如果服务器支持多平台,则设置平台。例如,可以指定为linux/amd64、linux/arm64等。
- -q, --quiet:抑制冗长的输出,使命令执行过程中淘汰信息打印,使得输出更加简洁。
3.3、示例:拉取redis-5.0.14
Docker Hub官网
4、标签管理
- docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
复制代码为本地镜像添加或更改标签。
4.1、示例:给刚下载的redis添加标签
- docker tag redis:5.0.14 myredis:5.0.14
复制代码
当 docker images 显示出两个标签看起来一样的镜像(除了仓库名不同),它们实际上指向同一个底层镜像数据。,只是通过不同的名称和标签来区分。
5、获取镜像详细信息
- docker inspect [OPTIONS] NAME|ID
复制代码 5.1、常见选项
- -f, --format string:此选项允许你使用自定义的模板格式化输出。默认情况下,输出是 JSON 格式。你可以指定 'json' 直接得到 JSON 输出,或者使用一个自定义的 Go 模板字符串(例如 '{{.Name}} {{.Image}}')来提取特定信息。
- -s, --size:当查抄类型为容器时,这个选项会让输出包含每个层的总文件大小,有助于了解容器占用的空间情况。
- --type string:指定要返回 JSON 信息的对象类型。这在处理多种类型对象时非常有用,但通常默认为主动检测对象类型。
5.2、示例:查抄reids:5.0.14镜像的ID和创建时间
- docker inspect --format '{{println .Id}}{{println .Created}}' redis:5.0.14
- docker inspect --format '{{printf "%s\n%s" .Id .Created}}' redis:5.0.14
复制代码
6、展示镜像的构建历史
用于展示一个Docker镜像的构建历史,列出构建该镜像时的每一层及其相干信息
- docker history [OPTIONS] IMAGE
复制代码 6.1、常见选项
- --format string:
- 'table': 默认值,以表格形式展示输出,并包含列标题。
- 'table TEMPLATE': 自定义模板的表格输出,允许你使用特定的Go模板来格式化输出。
- 'json': 以JSON格式输出历史信息。
- 'TEMPLATE': 使用指定的Go模板格式化输出,提供高度自定义的输出格式。
- -H, --human: 是否以人类可读的格式显示大小和日期,默认为 true。
- --no-trunc: 不截断输出,尤其是在显示镜像ID或层ID时,会完整显示而不做缩短处理。
- -q, --quiet: 仅显示镜像ID列表,而不包括其他详细信息,适用于当你只必要镜像ID而不必要附加信息时。
6.2、示例:列出redis:5.0.14各层创建的信息
- docker history redis:5.0.14
复制代码
7、镜像的导入导出
7.1、导出
- 方式一:
- docker save redis:5.0.14 -o /opt/redis.tar.gz
- ll /opt/redis.tar.gz
复制代码
- 方式二:
- docker save myredis:5.0.14 > /opt/myredis.tar.gz
- ll /opt/myredis.tar.gz
复制代码
7.2、导入
- 方式一:
- docker load -i /opt/redis.tar.gz
复制代码
- 方式二:
- docker load < /opt/myredis.tar.gz
复制代码
8、删除镜像
8.1、常见选项
- --force, -f:强制删除镜像,即使有依靠也不提示。
- --no-prune:不删除未被标志的父镜像。
8.2、通过镜像名称+标签删除镜像
8.3、通过镜像id删除镜像
- docker images
- docker rmi 99ee9af2b6b1
复制代码
8.4、删除所有无容器使用的镜像
三、容器管理命令
1、Docker容器的生命周期
- 创建(Created):当你使用docker create命令创建一个容器时,容器就处于创建状态。在这个阶段,容器已经被创建,但还没有被启动。
- 启动(Running):当你使用docker start命令启动一个已经创建的容器时,容器就会进入运行状态。在这个阶段,容器内的进程正在运行。
- 停息(Paused)︰你可以使用docker pause命令来停息一个正在运行的容器,使得容器内的所有进程都会被挂起。
- 恢复(Unpaused):使用docker unpause命令可以恢复一个被停息的容器,使得容器内的进程继承运行。
- 制止(Stopped):当你使用docker stop命令制止一个运行中的容器时,容器会进入制止状态。在这个阶段,容器内的进程会被发送SIGTERM信号,然后等待一段时间后被强制终止。
- 删除(Deleted):使用docker rm命令可以删除一个已经制止的容器,开释其占用的体系资源。
- docker create触发create变乱,容器进入stopped状态;
- docker rm触发destory变乱使容器完成从stopped->deleted状态迁移;
- docker start触发start变乱使容器完成从stopped->running状态;
- docker run触发create变乱颠末stopped,触发start变乱后进入running状态
- docker kill 使容器完成从running->stopped状态迁移。docker kill先后触发的die和kill变乱,然后会kill掉当前容器中的进程,
- docker stop使容器完成从running->stopped状态迁移。docker stop先后触发的die和stop变乱,并不会杀掉当前容器的进程。
- docker restart使容器完成从running->running状态迁移。先后触发了die、start、restart变乱;
- docker paused使容器完成从running->paused状态迁移。触发了pause变乱;
- docker unpause使容器完成从paused->running状态迁移。触发了unpause变乱;
2、创建容器
当使用docker create命令创建一个容器时,容器就处于创建状态。在这个阶段,容器已经被创建,但还没有被启动。
- dcoker create IMAGE[:TAG]
复制代码 2.1、示例:创建一个nginx容器
3、启动容器
- docker start CONTAINER ID
复制代码 3.1、示例:启动nginx容器
- [root@localhost ~]# docker start b0
- b0
复制代码
这里容器ID输入了b0也启动了容器
只要这些字符足以唯一标识一个容器。Docker会主动匹配并尝试启动
与之相匹配的第一个容器。
4、创建并启动容器
- docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
复制代码 4.1、常见选项
选项描述--add-host添加自定义的主机到IP映射(格式:主机:IP)-a, --attach毗连到容器的 STDIN、STDOUT 或 STDERR--annotation给容器添加注解(通过OCI运行时传递)-c, --cpu-sharesCPU份额(相对权重)-d, --detach后台运行容器并打印容器ID--env设置环境变量-e, --env-file从文件读取环境变量-h, --hostname设置容器的主机名-i, --interactive即使不毗连也保持 STDIN 打开-l, --label设置容器的元数据标签--name为容器指定名称-p, --publish将容器的端口发布到主机-P, --publish-all将所有暴露的端口随机映射到主机-t, --tty分配一个伪TTY-u, --user指定用户名或UID(格式:用户名--volume, -v挂载一个卷--workdir, -w设置容器内部的工作目录--cap-add添加Linux本领--cap-drop移除Linux本领--device添加主机设备到容器--device-read-bps限制从设备读取速率(每秒字节数)--memory内存限制--network毗连容器到网络--privileged给予容器额外权限--read-only以只读方式挂载容器的根文件体系--restart容器退出后的重启计谋--rm容器退出后主动删除--security-opt设置安全选项--ulimit设置ulimit限制--volume-driver为容器指定卷驱动--volumes-from从其他容器挂载卷--health-cmd设置健康查抄命令--memory-swappiness调整容器内存交换行为--sysctl设置sysctl选项--tmpfs挂载暂时文件体系目录--stop-signal设置制止容器的信号--cpu-period, --cpu-quota限制CPU使用周期和配额(CFS)4.2、示例:创建并启动一个hello-world容器
4.3、示例:后台启动个nginx容器,保持尺度输入打开并分配一个终端(-itd)
4.4、示例:后台启动个redis:5.0.14容器,保持尺度输入打开,分配一个终端并取别名为redis-v1(-itd --name)
- docker run -itd --name redis-v1 redis:5.0.14
复制代码
4.5、示例:后台启动个centos容器,保持尺度输入打开,分配一个终端并取别名为centos-v2,并设置随docker服务启动而启动(-itd --name --restart=always)
- docker run -itd --name centos-v2 --restart=always centos
复制代码
5、查看正在运行的容器
6、查看所以容器(包含运行和已制止的)
7、挂起容器
- docker pause CONTAINER ID/CONTAINER NAMES
复制代码 7.1、示例:挂起nginx容器
- docker ps
- docker pause angry_proskuriakova
复制代码
8、取消挂起容器
- docker pause CONTAINER ID/CONTAINER NAMES
复制代码 8.1、示例:取消挂起的nginx容器
- docker unpause angry_proskuriakova
复制代码
9、终止容器
- docker stop [OPTIONS] CONTAINER [CONTAINER...]
复制代码 9.1、示例:终止nginx容器
10、删除容器
- docker rm [OPTIONS] CONTAINER [CONTAINER...]
复制代码 10.1、常见选项
- -f, --force:此选项强制删除容器,即使容器正在运行也会立即删除。如果不使用这个选项,Docker 会拒绝删除正在运行的容器,要求你先制止容器。
- -l, --link:在 Docker 的早期版本中,它用于移除两个容器之间的链接关系。由于 Docker 网络的改进,特殊是自 Docker 1.9 引入了用户定义网络之后,容器链接功能已不再保举使用
- -v, --volumes:当删除容器时,如果容器中挂载了匿名卷(即由 Docker 主动创建且未命名的卷),默认情况下这些卷不会被主动删除。使用 --volumes 选项会指示 Docker 在删除容器的同时,也删除与之关联的所有匿名卷。
10.2、示例:删除hello-world容器
10.3、示例:批量删除已制止运行的容器
- docker rm -f `docker ps -qa`
复制代码
11、attach进入容器
使用此方式进入容器的操作都是同步显示的且exit容器将被关闭
- docker attach [OPTIONS] CONTAINER
复制代码 11.1、示例:使用attach进入centos容器
11.1、示例:优雅的退出容器(退出时容器保持运行)
12、exec进入容器(保举使用)
执行单次命令后进入容器,退出容器后容器还在运行
- docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
复制代码 12.1、示例:使用exec进入centos容器
- docker exec -it 461 /bin/bash
复制代码
13、nsenter进入容器
nsenter命令必要通过pid进入到容器内部
- nsenter [options] <program> [<argument>...]
复制代码 13.1、常见选项
选项描述-t, --target指定要获取其名称空间的目标进程的PID。-m, --mount[=]进入指定文件(默认为 /proc//ns/mnt)代表的挂载命名空间。-u, --uts[=]进入指定文件(默认为 /proc//ns/uts)代表的UTS命名空间(主机名等)。-i, --ipc[=]进入指定文件(默认为 /proc//ns/ipc)代表的System V IPC命名空间。-n, --net[=]进入指定文件(默认为 /proc//ns/net)代表的网络命名空间。-p, --pid[=]进入指定文件(默认为 /proc//ns/pid)代表的PID命名空间。-U, --user[=]进入指定文件(默认为 /proc//ns/user)代表的用户命名空间。-S, --setuid在进入的命名空间中设置UID。-G, --setgid在进入的命名空间中设置GID。--preserve-credentials不修改进入命名空间后的UID或GID。-r, --root[=]设置进入命名空间后的根目录。-w, --wd[=]设置进入命名空间后的工作目录。-F, --no-fork不进行fork操作直接执行指定程序。-Z, --follow-context根据目标PID设置SELinux上下文。-h, --help显示帮助信息并退出。-V, --version显示版本信息并退出。13.2、示例:使用nsenter进入容器
- docker inspect -f "{{.State.Pid}}" 461
- #首先使用docker inspect获取到容器的pid
- nsenter -t 5386 -m -u -i -n -p
- #-t 5386:指定PID为5386进入这个进程的各个命名空间。-m -u -i -n -p分别是进入目标进程的挂载命名空间、用户命名空间、IPC命名空间、网络命名空间、PID命名空间
复制代码
13.3、示例:脚本形式进入容器
- [root@localhost ~]# cat docker_in.sh
- #!/bin/bash
- docker_in(){
- DOCKER_ID=$1
- PID=`docker inspect -f "{{.State.Pid}}" ${DOCKER_ID}`
- nsenter -t ${PID} -m -u -i -n -p
- }
- docker_in $1
复制代码
14、端口映射
Docker容器的端口映射是一种让宿主机(运行Docker的呆板)与Docker容器之间的网络通信成为大概的技术。
它允许外部体系通过宿主机的IP地点和端口访问到容器内部的服务。
14.1、示例:前台启动nginx,随机端口映射(-P)
- docker run -P nginx
- ss -tunlp
- #可以看到,随机的端口映射其实是从32768开始映射
复制代码 前台启动随机端口映射ss -tunlp进行端口验证浏览器输入ip+端标语访问14.2、本地端口80映射到容器80端口
- docker run -itd -p 8080:80 --name nginx-v1 nginx:latest
复制代码 后台启动,保持尺度输入并分配一个伪TTY终端,取别名为nginx-v1浏览器输入ip+端标语访问14.3、本地ip:本地端口:容器端口
- docker run -itd -p 192.168.112.60:8081:80 --name nginx-v2 nginx:latest
复制代码 使用本地ip:本地端口:容器端口进行端口映射浏览器输入ip+端标语访问14.4、本地ip:本地随机端口:容器端口
- docker run -itd -p 192.168.112.60::80 --name nginx-v3 nginx:latest
复制代码 使用本地ip:本地随机端口:容器端口进行端口映射浏览器输入ip+端标语访问14.5、本地ip:本地端口:容器端口/协议默认为tcp协议
- docker run -itd -p 192.168.112.60:8082:80/tcp --name nginx-v4 nginx:latest
复制代码 使用本地ip:本地端口:容器端口/协议默认为tcp协议进行端口映射浏览器输入ip+端标语访问15、查看容器已经映射的端口
- docker port CONTAINER [PRIVATE_PORT[/PROTO]]
复制代码 15.1、示例:查看目前nginx容器已经映射的端口
- docker ps
- [root@localhost ~]# docker port 50
- 80/tcp -> 192.168.112.60:8082
- [root@localhost ~]# docker port ba
- 80/tcp -> 192.168.112.60:32768
- [root@localhost ~]# docker port 5b
- 80/tcp -> 192.168.112.60:8081
- [root@localhost ~]# docker port 52
- 80/tcp -> 0.0.0.0:8080
- 80/tcp -> [::]:8080
复制代码
16、Docker容器文件的拷贝
- docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
- #docker cp 容器ID/名称:文件路径 要拷贝到外部的路径
- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
- #docker cp 要拷贝到外部的路径 容器ID/名称:文件路径
复制代码无论容器是否开启都可以进行拷贝
16.1、示例:从宿主机上拷贝文件到centos容器
- docker cp /opt/centos-v1.txt centos-v1:/opt/
- #将宿主机的/opt/centos-v1.txt文件拷贝到centos-v1容器内部的/op/下
复制代码
16.2、示例:从centos容器拷贝文件到宿主机上
- docker cp centos-v1:/tmp/hello.txt /tmp/
- #将centos-v1容器内/tmp/hello.txt文件拷贝到宿主机的/tmp/下
复制代码
17、查看容器的日志信息
- docker logs [OPTIONS] CONTAINER
复制代码 17.1、示例:查看nginx-v4容器日志
18、更换容器名
- docker rename 容器ID/容器名 新容器名
复制代码 18.1、将容器centos-v2更换名字为mycentos-v2
- docker rename centos-v2 mycentos-v2
复制代码
19、数据挂载
- -v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置 -v...
复制代码 19.1、示例:运行一个nginx容器,进行端口映射以及数据卷挂载并设置开机自启动
- [root@localhost ~]# mkdir -p /data/web
- [root@localhost ~]# echo "nginx test" > /data/web/index.html
- [root@localhost ~]# docker run -itd -p 8085:80 --name nginx-v5 --restart=always -v /data/web/:/usr/share/nginx/html/ nginx
- 3a34a5e7f7cf9d457587227b9279601d57c4095a1bb515aba5ac2c8b049aacfd
- [root@localhost ~]# curl 192.168.112.60:8085
- nginx test
复制代码至于容器里的绑定挂载和数据卷的概念后面单独解释
20、指定容器DNS
一是通过将dns地点配置在宿主机上
二是将参数配置在docker启动脚本里面
我们这里讨论第一种
20.1、示例:以后台模式创建并启动一个命名为centos-v3的CentOS容器,使用Google的公共DNS服务器进行域名剖析。
- docker run -itd --rm --dns 8.8.8.8 --name centos-v3 centos bash
复制代码
21、导出容器
导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,导出一个容器快照
- docker export /指定路径/自定义名.tar 容器名/ID
复制代码 21.1、示例:将mycentos-v2容器导出到/opt/目录下的mycentos-v2压缩包
- docker export -o /opt/mycentos-v2.tar mycentos-v2
复制代码
22、导入容器
导入一个容器快照到本地镜像库
- docker import /指定路径/tar压缩文件 镜像名:标签
复制代码 22.1、示例:将/opt/目录下的mycentos-v2.tar导入到本地镜像库
- docker import /opt/mycentos-v2.tar mycentos:v2
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |