Docker常见命令

火影  金牌会员 | 2024-5-26 09:49:58 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 752|帖子 752|积分 2256

目录

一、体系管理命令

1、启动Docker服务
  1. systemctl start docker
复制代码
2、制止Docker服务
  1. systemctl stop docker
复制代码
3、重启Docker服务
  1. systemctl restart docker
复制代码
4、设置Docker开机启动
  1. systemctl enable docker
复制代码
5、查看Docker服务状态
  1. systemctl status docker
复制代码

6、查看Docker版本信息
  1. docker version 或 docker info
复制代码

二、镜像管理命令

1、查看本地镜像
  1. docker images
复制代码



  • REPOSITORY:镜像仓库名称
  • TAG:镜像的标签信息
  • 镜像ID:唯一用来标识镜像,如果两个镜像的ID雷同,说明他们实际上指向了同一个镜像,只是具有不同标签名称而已
  • CREATED:创建时间,说明镜像的末了更新时间
  • SIZE:镜像大小
2、搜索Docker Hub上的镜像
  1. docker search [镜像名]
复制代码
2.1、常见选项


  • -f, --filter filter:这个选项允许你根据特定条件过滤搜索效果。常见的条件是stars
  • --format string:此选项允许你使用Go模板语法来自定义输出格式。
  • --limit int:这个选项用来限制返回的搜索效果数量。
  • --no-trunc:使用--no-trunc选项后,所有输出都不会被截断,会看到完整的描述和其他信息。
2.2、示例:搜索星数大于100的MySQL镜像并限制搜索效果为5个
  1. docker search -f stars=100 --limit 5 mysql
复制代码

docker search进行搜索返回的效果中不仅会列出直接名为 mysql的镜像,还会包括描述中带有 mysql 的其他镜像
3、从Docker Hub上拉取镜像

不加tag(版本号)即默认拉取最新版本latest
  1. docker pull [镜像名:标签]
复制代码
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官网
  1. docker pull redis:5.0.14
复制代码

4、标签管理
  1. docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
复制代码
为本地镜像添加或更改标签。
4.1、示例:给刚下载的redis添加标签
  1. docker tag redis:5.0.14 myredis:5.0.14
复制代码

当 docker images 显示出两个标签看起来一样的镜像(除了仓库名不同),它们实际上指向同一个底层镜像数据。,只是通过不同的名称和标签来区分。
5、获取镜像详细信息
  1. 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和创建时间
  1. docker inspect --format '{{println .Id}}{{println .Created}}' redis:5.0.14
  2. docker inspect --format '{{printf "%s\n%s" .Id .Created}}' redis:5.0.14
复制代码

6、展示镜像的构建历史

用于展示一个Docker镜像的构建历史,列出构建该镜像时的每一层及其相干信息
  1. 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各层创建的信息
  1. docker history redis:5.0.14
复制代码

7、镜像的导入导出

7.1、导出


  • 方式一:

      1. docker save redis:5.0.14 -o /opt/redis.tar.gz
      2. ll /opt/redis.tar.gz
      复制代码


  • 方式二:

      1. docker save myredis:5.0.14 > /opt/myredis.tar.gz
      2. ll /opt/myredis.tar.gz
      复制代码


7.2、导入


  • 方式一:

      1. docker load -i /opt/redis.tar.gz
      复制代码


  • 方式二:

      1. docker load < /opt/myredis.tar.gz
      复制代码


8、删除镜像

8.1、常见选项


  • --force, -f:强制删除镜像,即使有依靠也不提示。
  • --no-prune:不删除未被标志的父镜像。
8.2、通过镜像名称+标签删除镜像
  1. docker rmi redis:5.0.14
复制代码

8.3、通过镜像id删除镜像
  1. docker images
  2. docker rmi 99ee9af2b6b1
复制代码

8.4、删除所有无容器使用的镜像
  1. docker system prune -a
复制代码
三、容器管理命令

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命令创建一个容器时,容器就处于创建状态。在这个阶段,容器已经被创建,但还没有被启动。
  1. dcoker create IMAGE[:TAG]
复制代码
2.1、示例:创建一个nginx容器
  1. docker create nginx
复制代码

3、启动容器
  1. docker start CONTAINER ID
复制代码
3.1、示例:启动nginx容器
  1. [root@localhost ~]# docker start b0
  2. b0
复制代码

这里容器ID输入了b0也启动了容器
只要这些字符足以唯一标识一个容器。Docker会主动匹配并尝试启动
与之相匹配的第一个容器。
4、创建并启动容器
  1. 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容器
  1. docker run hello-world
复制代码

4.3、示例:后台启动个nginx容器,保持尺度输入打开并分配一个终端(-itd)
  1. docker run -itd nginx
复制代码

4.4、示例:后台启动个redis:5.0.14容器,保持尺度输入打开,分配一个终端并取别名为redis-v1(-itd --name)
  1. docker run -itd --name redis-v1 redis:5.0.14
复制代码

4.5、示例:后台启动个centos容器,保持尺度输入打开,分配一个终端并取别名为centos-v2,并设置随docker服务启动而启动(-itd --name --restart=always)
  1. docker run -itd --name centos-v2 --restart=always centos
复制代码

5、查看正在运行的容器
  1. docker ps
复制代码

6、查看所以容器(包含运行和已制止的)
  1. docker ps -a
复制代码

7、挂起容器
  1. docker pause CONTAINER ID/CONTAINER NAMES
复制代码
7.1、示例:挂起nginx容器
  1. docker ps
  2. docker pause angry_proskuriakova
复制代码

8、取消挂起容器
  1. docker pause CONTAINER ID/CONTAINER NAMES
复制代码
8.1、示例:取消挂起的nginx容器
  1. docker unpause angry_proskuriakova
复制代码

9、终止容器
  1. docker stop [OPTIONS] CONTAINER [CONTAINER...]
复制代码
9.1、示例:终止nginx容器
  1. docker stop b0
复制代码

10、删除容器
  1. 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容器
  1. docker rm b6
复制代码

10.3、示例:批量删除已制止运行的容器
  1. docker rm -f `docker ps -qa`
复制代码

11、attach进入容器

使用此方式进入容器的操作都是同步显示的且exit容器将被关闭
  1. docker attach [OPTIONS] CONTAINER
复制代码
11.1、示例:使用attach进入centos容器
  1. docker attach 461
复制代码

11.1、示例:优雅的退出容器(退出时容器保持运行)
  1. ctrl + p + q
复制代码

12、exec进入容器(保举使用)

执行单次命令后进入容器,退出容器后容器还在运行
  1. docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
复制代码
12.1、示例:使用exec进入centos容器
  1. docker exec -it 461 /bin/bash
复制代码

13、nsenter进入容器

nsenter命令必要通过pid进入到容器内部
  1. 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进入容器
  1. docker inspect -f "{{.State.Pid}}" 461       
  2. #首先使用docker inspect获取到容器的pid
  3. nsenter -t 5386 -m -u -i -n -p
  4. #-t 5386:指定PID为5386进入这个进程的各个命名空间。-m -u -i -n -p分别是进入目标进程的挂载命名空间、用户命名空间、IPC命名空间、网络命名空间、PID命名空间
复制代码

13.3、示例:脚本形式进入容器
  1. [root@localhost ~]# cat docker_in.sh
  2. #!/bin/bash
  3. docker_in(){
  4. DOCKER_ID=$1
  5. PID=`docker inspect -f "{{.State.Pid}}" ${DOCKER_ID}`
  6. nsenter -t ${PID} -m -u -i -n -p
  7. }
  8. docker_in $1
复制代码

14、端口映射

Docker容器的端口映射是一种让宿主机(运行Docker的呆板)与Docker容器之间的网络通信成为大概的技术。
它允许外部体系通过宿主机的IP地点和端口访问到容器内部的服务。
  1. -p 宿主机端口:容器端口
复制代码
14.1、示例:前台启动nginx,随机端口映射(-P)
  1. docker run -P nginx
  2. ss -tunlp
  3. #可以看到,随机的端口映射其实是从32768开始映射
复制代码
前台启动随机端口映射
ss -tunlp进行端口验证
浏览器输入ip+端标语访问
14.2、本地端口80映射到容器80端口
  1. docker run -itd -p 8080:80 --name nginx-v1 nginx:latest
复制代码
后台启动,保持尺度输入并分配一个伪TTY终端,取别名为nginx-v1
浏览器输入ip+端标语访问
14.3、本地ip:本地端口:容器端口
  1. docker run -itd -p 192.168.112.60:8081:80 --name nginx-v2 nginx:latest
复制代码
使用本地ip:本地端口:容器端口进行端口映射
浏览器输入ip+端标语访问
14.4、本地ip:本地随机端口:容器端口
  1. docker run -itd -p 192.168.112.60::80 --name nginx-v3 nginx:latest
复制代码
使用本地ip:本地随机端口:容器端口进行端口映射
浏览器输入ip+端标语访问
14.5、本地ip:本地端口:容器端口/协议默认为tcp协议
  1. docker run -itd -p 192.168.112.60:8082:80/tcp --name nginx-v4 nginx:latest
复制代码
使用本地ip:本地端口:容器端口/协议默认为tcp协议进行端口映射
浏览器输入ip+端标语访问
15、查看容器已经映射的端口
  1. docker port CONTAINER [PRIVATE_PORT[/PROTO]]
复制代码
15.1、示例:查看目前nginx容器已经映射的端口
  1. docker ps
  2. [root@localhost ~]# docker port 50
  3. 80/tcp -> 192.168.112.60:8082
  4. [root@localhost ~]# docker port ba
  5. 80/tcp -> 192.168.112.60:32768
  6. [root@localhost ~]# docker port 5b
  7. 80/tcp -> 192.168.112.60:8081
  8. [root@localhost ~]# docker port 52
  9. 80/tcp -> 0.0.0.0:8080
  10. 80/tcp -> [::]:8080
复制代码

16、Docker容器文件的拷贝
  1. docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
  2. #docker cp 容器ID/名称:文件路径  要拷贝到外部的路径
  3. docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
  4. #docker cp  要拷贝到外部的路径  容器ID/名称:文件路径
复制代码
无论容器是否开启都可以进行拷贝
16.1、示例:从宿主机上拷贝文件到centos容器
  1. docker cp /opt/centos-v1.txt centos-v1:/opt/
  2. #将宿主机的/opt/centos-v1.txt文件拷贝到centos-v1容器内部的/op/下
复制代码

16.2、示例:从centos容器拷贝文件到宿主机上
  1. docker cp centos-v1:/tmp/hello.txt /tmp/
  2. #将centos-v1容器内/tmp/hello.txt文件拷贝到宿主机的/tmp/下
复制代码

17、查看容器的日志信息
  1. docker logs [OPTIONS] CONTAINER
复制代码
17.1、示例:查看nginx-v4容器日志
  1. docker logs nginx-v4
复制代码

18、更换容器名
  1. docker rename 容器ID/容器名 新容器名
复制代码
18.1、将容器centos-v2更换名字为mycentos-v2
  1. docker rename centos-v2 mycentos-v2
复制代码

19、数据挂载
  1. -v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置 -v...
复制代码
19.1、示例:运行一个nginx容器,进行端口映射以及数据卷挂载并设置开机自启动
  1. [root@localhost ~]# mkdir -p /data/web
  2. [root@localhost ~]# echo "nginx test" > /data/web/index.html
  3. [root@localhost ~]# docker run -itd -p 8085:80 --name nginx-v5 --restart=always -v /data/web/:/usr/share/nginx/html/  nginx
  4. 3a34a5e7f7cf9d457587227b9279601d57c4095a1bb515aba5ac2c8b049aacfd
  5. [root@localhost ~]# curl 192.168.112.60:8085
  6. nginx test
复制代码
至于容器里的绑定挂载和数据卷的概念后面单独解释
20、指定容器DNS

一是通过将dns地点配置在宿主机上
二是将参数配置在docker启动脚本里面
我们这里讨论第一种
20.1、示例:以后台模式创建并启动一个命名为centos-v3的CentOS容器,使用Google的公共DNS服务器进行域名剖析。
  1. docker run -itd --rm --dns 8.8.8.8 --name  centos-v3 centos bash
复制代码

21、导出容器

导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,导出一个容器快照
  1. docker export /指定路径/自定义名.tar 容器名/ID
复制代码
21.1、示例:将mycentos-v2容器导出到/opt/目录下的mycentos-v2压缩包
  1. docker export -o /opt/mycentos-v2.tar mycentos-v2
复制代码

22、导入容器

导入一个容器快照到本地镜像库
  1. docker import /指定路径/tar压缩文件 镜像名:标签
复制代码
22.1、示例:将/opt/目录下的mycentos-v2.tar导入到本地镜像库
  1. docker import /opt/mycentos-v2.tar mycentos:v2
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

火影

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表