Docker:容器

news2024/11/30 12:38:04

Docker:容器

    • 容器
    • 容器命令
      • docker ps
      • docker create
      • docker start
      • docker run
      • docker logs
      • docker exec
      • docker stop
      • docker restart
      • docekr rm
      • docker kill
      • docker pause
      • docker unpause
      • docker commit
      • docker cp
      • docker diff
      • docker export
      • docker import
      • docker rename
      • docker stats
      • docker top
      • docker port
      • docker update
      • docker container inspect
      • docker container prune
    • 容器模式
      • attach
      • deatached
      • interactive


容器

Docker的核心功能,是基于容器化技术提供的环境隔离以及资源控制,容器就是一个个具体的隔离环境。当用户把镜像拉取到本地后,就可以使用镜像实例化出一个具体的容器,随后在容器内部进行操作。

在这里插入图片描述

如图,当容器实例化完成时,会在镜像上面添加一个容器层,容器在容器层内部进行操作,不会影响镜像层。当一个镜像实例化出多个容器,所有容器共用镜像层。


容器命令

docker ps

  • 功能:查看已经实例化的容器

语法:

docker ps [option]

选项 :

  • -a:显示所有容器,包括未运行的
  • -n:显示最近创建的n个容器

docker create

  • 功能:创建一个容器,但是不启动

语法:

docker create [option] image [command]

选项:

  • -i:以交互模式运行
  • -t:为容器重新分配一个伪终端
  • -P:随机端口映射
  • -p:指定端口映射,格式:-p 宿主机端口:容器端口
  • --name:为容器指定一个名称
  • -e:设置环境变量
  • --cpuset-cpus:指定容器可以使用的CPU核
  • -m:指定容器允许使用的内存最大值
  • --network:指定容器网络类型
  • --volume -v:绑定一个存储卷
  • --rm:在shell退出时,自动删除容器
  • --restart:容器崩溃时,自动重启

创建一个nginx容器:

在这里插入图片描述

可以通过docker ps -a查看容器,由于容器还没有启动,要加上-a

这里参数比较多,在docker run部分讲解。


docker start

  • 功能:启动一个暂停的容器

语法:

docker start [option] container [container ...]

其可以一次启动多个容器,只需要把容器名或者容器ID追加到指令末尾即可。

启动刚才创建的容器:

在这里插入图片描述

此时不再需要-a选项,就可以查看到容器,并且容器获得了一个端口号80


docker run

  • 功能:创建一个新的容器并运行

语法:

docker run [option] image [command]

选项:

  • -i:以交互模式运行
  • -t:为容器重新分配一个伪终端
  • -P:随机端口映射
  • -p:指定端口映射,格式:-p 宿主机端口:容器端口
  • --name:为容器指定一个名称
  • -e:设置环境变量
  • --cpuset-cpus:指定容器可以使用的CPU核
  • -m:指定容器允许使用的内存最大值
  • --network:指定容器网络类型
  • --volume -v:绑定一个存储卷
  • --rm:在shell退出时,自动删除容器
  • --restart:容器崩溃时,自动重启
  • -d:后台运行容器

docker rundocker createdocker start的结合体,同时完成创建容器和启动容器的过程。并且docker run的选项和docker create高度重合,功能也是一致的,只多出一个-d选项。

首先是交互界面,常常使用-it配合完成,使用-i选项后,容器会读取输入流,解析用户从键盘输入的指令,但是不会返回结果。而-t选项会创建一个伪终端,这个终端会返回容器内指令的输出结果。

创建一个centos容器:

在这里插入图片描述

一开始,宿主机的版本是Ubuntu 24.04,随后通过docker run创建并运行容器,并且使用-it选项进入容器终端。进入容器终端后,发现当前操作系统的版本已经变成了CentOS

最后通过exit命令退出容器终端。可以看出,容器确实可以在一个操作系统上运行另一个操作系统,实现隔离。

直接运行一个nginx容器:

在这里插入图片描述

运行后,发现进入了一个奇怪的终端,这些内容其实是nginx的日志文件,因为没有指定-it选项,所以没有进入一个可操作的终端,此时可以通过ctrl+ c终止容器并退出。

对于这种情况,也可以使用-d直接让其在后台运行:

在这里插入图片描述

这样就不会出现刚才的日志终端了。另外的,此处还指定了一个-P选项,这代表随机端口映射。nginx使用80端口进行服务,但是最后还是要宿主机的端口与外界通信,此时就要存在一个宿主机与容器端口的映射关系,宿主机接收到来自32769端口的所有数据,都交给容器内部的80端口处理。

从容器往外看,就好像是自己收到了来自80端口的数据。此处的-P,是随机指定端口,也就是说32769->80是操作系统随机指派的,如果想要自己指定,需要用-p选项。

在这里插入图片描述

此处test5容器指定了端口映射6666:80,此后宿主机就会把来自6666端口的消息,转发到容器内的80端口处理。

通过curl测试本机6666端口:

在这里插入图片描述

此时返回了一个nginxhtml页面,说明nginx服务启动成功了,也说明6666端口的消息,确实会被转发到容器内进行处理。

docker还可以对容器进行资源的限制,其中--cpuset-cpus控制容器可以使用的CPU核:

在这里插入图片描述

比如此处--cpuset-cpus "0,1"表示这个容器,只能使用两个CPU核,分别是0 1。也可以指定范围--cpuset-cpus "0-5",表示可以使用0 1 2 3 4 5这六个核。

再往后的一些参数,比如networkvolumn这些内容,会在其他博客专门讲解。


docker logs

  • 功能:查看容器日志

语法:

docker logs [option] container

选项:

  • -f:跟踪输出日志
  • -n:仅列出最近n条日志

查看nginx容器的日志:

在这里插入图片描述

如果往回看,会发现这和docker run时没有加-it -d选项时,输出的内容一样,其实这就是nginx日志,其包含了nginx从创建开始的所有信息。


docker exec

  • 功能:在容器中执行命令

语法:

docker exec [option] container command [arg...]
  • command:要执行的命令
  • arg:执行命令的参数

参数:

  • -d:在后台运行
  • -i:以交互模式运行
  • -t:为容器分配一个伪终端
  • -e:设置环境变量
  • -u --user:指定用户
  • -w --workdir:指定工作目录

如果需要在容器内部执行命令,就需要使用exec选项来执行命令。

查看容器内部nginx版本:

在这里插入图片描述

通过exec在容器test9内执行nginx -version得到nginx的版本号。在这之前在宿主机执行同样的命令,发现宿主机没有安装nginx,说明这个命令确实是进入容器内部执行了。

docker run的时候,可以通过-it选项进入容器自由操作。exec也可以做到,在容器启动后进入容器。

进入nginx容器:

在这里插入图片描述

此处-it要配合bash一起使用,表示进入容器并执行bash进程,这样才会分配终端,否则无法进入容器。

默认进入容器,是处于根目录的,如果想要在进入容器时处于指定目录,或者说执行指令时处于某条路径,就需要-w选项。

在这里插入图片描述

这样一进入容器,就是指定的目录。

如果在容器内部,有多个用户的话,还可以通过-u指定操作的用户。


docker stop

  • 功能:停止运行的容器

语法:

docker stop [option] container [container...]

参数:

  • -s:发送的信号

docker stop可以停止正在运行的容器。

在这里插入图片描述

停止的容器,可以通过docker ps -a查看:

在这里插入图片描述

查看test9的日志:

在这里插入图片描述

可以看到,这个容器收到了信号3 SIGQUIT导致退出,可以使用-s选项。

对于docker stop,其默认使用SIGTERM信号进行关闭容器,如果超出一定时间还没有关闭容器,那么发送SIGQIT强制退出。

docker stop的关闭方式比较柔和,会给容器一定时间进行资源的保存,日志中也可以看到gracefully shutting down,表示优雅地退出。


docker restart

  • 功能:重启容器

语法:

docker restart [option] container [container...]

在这里插入图片描述

只需要指定容器名或者容器ID,就可以把暂停的容器重新启动。


docekr rm

  • 功能:删除停止的容器

语法:

docker rm[option] container [container...]

选项:

  • -f:强制删除一个运行中的容器

默认情况下,docker rm只能删除已经停止的容器,如果容器正在运行,那么不允许删除。

在这里插入图片描述

test8是暂停的容器,成功删除了,但是test9正在运行,删除失败。

此时可以通过-f选项强制删除正在运行的容器。

在这里插入图片描述


docker kill

  • 功能:强制停止运行的容器

语法:

docker kill [option] container [container...]

参数:

  • -s:发送的信号

docker kill可以停止正在运行的容器,其和docker stop的功能是一样的,但是docker kill是更加激进的做法。

在这里插入图片描述

这里重启了一个test6容器,并用docker kill杀掉,再查看日志。奇怪的事情是,输出日志中没有退出信息,反而是一些重启的信息,难道没有杀掉吗?

其实不是的,docker kill直接给容器发送SIGQUIT信号,导致容器直接退出,根本来不及写日志。相反的docker stop退出时,容器不仅有时间回收资源,保存信息,还可以顺手写一个日志。


docker pause

  • 功能:暂停容器内部的所有进程

语法:

docker pause container [container...]

此处的pausestopkill不同,后两者是直接关掉容器,而这个pause只暂停容器内部的进程,容易不会被关闭。

创建一个redis容器:

在这里插入图片描述

进行5555:6379的端口映射,此时就可以通过5555端口访问到容器中的reids

暂停容器:

在这里插入图片描述

此时再访问redis客户端,陷入了阻塞,因为虽然容器依然启动着,但是容器内部的redis进程已经停止了。


docker unpause

  • 功能:恢复容器内部暂停的所有进程

语法:

docker unpause container [container...]

docker commit

  • 功能:将容器提交为一个镜像

语法:

docker commit [option] container [image[:tag]]

选项:

  • -a:备注提交镜像的作者
  • -c:使用Dockerfile创建镜像
  • -m:备注

创建一个centos为基础的镜像:

在这里插入图片描述

首先创建了一个cantos容器,随后在容器内部写一个log.txt文件,退出后把这个容器提交为镜像。

镜像的备注为centos with log,作者是myself,镜像名称是test并且标签为v1.0

此时查看镜像,就多出了一个test镜像,并且testcentos两个镜像的大小都是231m,因为创建的那个log.txt太小了,所以看上去两者一样大。

查看镜像信息:

在这里插入图片描述

此时Comment内部就是备注,Author是作者。


docker cp

  • 功能:在容器和宿主机之间拷贝文件

语法:

docker cp [option] [container:]src_path [container:]dest_path

此处container:表示这个路径在容器中,如果不带这个说明是宿主机的路径。

在这里插入图片描述

首先创建一个nginx容器,在容器内部创建一个nginx.txt文件,退出容器回到宿主机。先通过docker cp test12:/nginx.txt ./,把容器内部的文件拷贝到宿主机。这样宿主机中就得到了从容器内部的文件。

在这里插入图片描述

再在宿主机创建一个ubuntu.txt,通过docker cp ./ubuntu.txt test12:/拷贝到容器内部,让容器执行ls /时,就多出了拷贝过去的新文件。


docker diff

  • 功能:检查容器文件结构的更改

语法:

docker diff container

尝试检查刚才的test12文件:

在这里插入图片描述

每一行的前缀,A表示add添加文件,C表示cancel删除文件。其中就包含A /ubuntu.txtA nginx.txt,表示添加了这两个文件,其它的都是nginx容器启动时的一些相关文件。


docker export

  • 功能:导出容器为一个压缩包

语法:

docker export [option] container

选项:

  • -o:将导出到指定文件

test12容器打包:

在这里插入图片描述


docker import

  • 功能:从压缩包中创建镜像

语法:

docker import [option] file [image[:tag]]

选项:

  • -m:备注

导入刚才的test.tar

在这里插入图片描述

这样就可以拿到镜像了。

这里的导入导出流程是:容器 -> 压缩包 -> 镜像,一般用于直接把容器内容打包传递给其它主机时使用,其他主机拿到镜像后,就可以实例化出一样的容器。


docker rename

  • 功能:重命名容器

语法:

docker rename container newname

docker stats

  • 功能:显示容器资源的使用情况

语法:

docker stats [option] [container...] 

选项:

  • -a:显示所有容器,包括未运行的容器
  • --no-stream:显示当前情况后直接退出
  • --no-trunc:不截断输出

直接执行docker stats

在这里插入图片描述

此时显示所有正在运行的容器的情况,并且每秒钟都会刷新一次,如果只希望输出一次,加上--no-stream选项。


docker top

  • 功能:查看容器内部的进程信息

语法:

docker top container [option]

选项:
相当于Linuxps命令,只要是ps可以使用的参数,都可以作为docker top的参数。

查看test12容器内部的进程:

在这里插入图片描述

test12内部运行了三个进程,此处的参数-aux,就是ps -aux的参数。


docker port

  • 功能:查看容器的端口映射

语法:

docker port container [option]

查看test9的端口映射:

在这里插入图片描述


docker update

  • 功能:更新容器配置

语法:

docker update [option] container

选项:

  • --cpus:CPU的数量
  • --cpuset-cpus:允许使用哪些CPU的核
  • -m:内存限制

docker container inspect

  • 功能:查看容器的详细信息

语法:

docker container inspect

查看test9的详细信息:

在这里插入图片描述

此时可以看到test9容器的一些内容,比如当前运行状态,创建时间,是否重启等等。

此处使用的命令是docker inspect,而不是docker container inspect

还有一个命令docker image inspect,它和docker container inspect都可以简写为docker inspect,此时docker会自动识别目标是一个容器还是镜像。


docker container prune

  • 功能:删除所有已经停止的容器

语法:

docker container prune [option]

选项:

  • -f:不再进行确认

删除当前已经停止的容器:

在这里插入图片描述

首先通过ps -a查询,此时可以看到很多已经停止的容器,执行docker container prune后,进行了一次确认[y/N],如果不想询问可以加上-f选项,随后已经停止的容器就被删除了。


容器模式

attach

当运行容器时,docker run不加-it或者-d选项,会进入attach模式。

创建一个nginx容器:

在这里插入图片描述

这个情况之前已经讲解过,此时终端会一直阻塞,并且会输出容器的日志信息,这种模式称为attach模式。这种模式下,可以通过ctrl + c终止,但是容器也会一起退出,开发环境是不会使用这个模式的,就算要看日志,也可以通过docker log


deatached

当使用-d或者--detach选项,让容器在后台运行,称为detached模式。

创建一个后台nginx容器:

在这里插入图片描述

这种模式下,容器会一直运行,不会因为一个ctrl + c就退出。如果想要进入容器执行命令,可以通过docker exec命令。


interactive

当创建好一个容器后,可能需要进入容器内部进行复杂的操作,此时docker exec用起来就很麻烦。

为此,可以使用docker exec -it ... bash的组合,此时就可以进入容器内部,通过bash终端操作容器,此时称为interactive模式。

在这里插入图片描述

如果想要退出这个终端,输入exit即可,但是不能输入ctrl + c,否则容器也会退出。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2225888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Es环境搭建 ▎kibana组件 ▎ik分词器 ▎idea继承Es ▎idea中Es操作

目录 安装Es 安装Es可视化界面(elasticsearch-head) elasticsearch-head安装: 安装可视化Kibana组件 汉化kibana ​编辑 启动服务器: 安装ik分词器插件 Idea继承Es 索引库操作 文档操作 安装Es Es下载地址: ES下载地址https://www.elastic.co/cn/downloads/elasticsea…

苏州金龙技术创新赋能旅游新质生产力

2024年10月23日,备受瞩目的“2024第六届旅游出行大会”在云南省丽江市正式开幕。作为客车行业新质生产力标杆客车,苏州金龙在大会期间现场展示了新V系V12商旅版、V11和V8E纯电车型,为旅游出行提供全新升级方案。 其中,全新15座V1…

SpringBoot3集成Swagger接口文档功能、接口排序以及如何设置接口页面的title/keyword/description?

一、SpringBoot3集成Swagger接口文档功能 在SpringBoot3 中集成 Swagger 接口文档,如果按照网上的很多提示,会有些问题。在这个过程中我就遇到报错: Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest 因…

总裁主题CeoMax-Pro主题7.6开心版

激活方式: 1.授权接口源码ceotheme-auth-api.zip搭建一个站点,绑定www.ceotheme.com域名,并配置任意一个域名的 SSL 证书。 2.在 hosts 中添加:127.0.0.1 www.ceotheme.com 3.上传class-wp-http.php到wp-includes目录&#xff…

Rust命令行,实现自动反编译Android APK包工具

Rust-CLI实现自动反编译APK Rust提供了比较好的CLI接口,可以快速的编写命令行应用, 用于日常的工具类使用。 分享一个用Rust命令行实现自动反编译Android APK包工具,是之前学习Rust写的一个练手小工具,可以快速反编译APK,同时也学习下用Rust…

Flutter升级与降级

升级 版本升级 // 升级到指定版本flutter upgrade 版本号// 升级到最新版本flutter upgrade 降级 1.需要先确定想要降级的版本号。 2.切换到系统安装Flutter的目录 3.在https://github.com/flutter/flutter,找到要回退的版本号对应的commit序号(具…

熵与信息论

经典信息论的核心概念是香农熵。假设我们得到了一个变量X的值,X的香农熵量化了我们在获悉 X的值时所能得到的平均信息量;另一种观点是将X的看作在我们获悉的值前对其不确定程度的度量。这两种观点是互补的;我们既可以将看作在我们获悉X的值前…

Vue3+ts+vite自动导入vue的依赖

Vue3tsvite自动导入vue的依赖 unplugin-auto-import 主要依赖 npm i -D unplugin-auto-import// vite.config.ts import AutoImport from unplugin-auto-import/viteexport default defineConfig({plugins: [AutoImport({ imports: ["vue", "vue-router"…

研发运营一体化(DevOps)能力成熟度模型

目录 应用设计 安全风险管理 技术运 持续交付 敏捷开发管理 基于微服务的端到端持续交付流水线案例 应用设计 安全风险管理 技术运 持续交付

智慧停车场导航系统架构及反向寻车系统解决方案

一、系统概述: 随着当前室内定位导航技术在大型公共场所如政务中心、商业综合体、车站中的应用越来越多,人们对智慧停车场的需求也日益凸显出来,并且智慧停车场对大型公共场所智慧化的整体建设起到重要作用。如何更有效提高停车效率&#xf…

图片处理达人使用图片格式转换器一键实现批量将 JPG 图片转换成 BMP 格式并调整图片质量,解决图片批量处理难题的利器

片处理达人的秘密武器——首助编辑高手软件的图片格式转换器!它能帮助你一键实现批量将JPG图片转换成BMP格式,高效解决图片批量处理难题,让你轻松成为图片处理高手! 1.导入图片‌:在软件的图片批量处理板块中点击“添…

文本配音怎么制作?推荐6款靠谱的文本配音工具,新手不可错过

文本配音怎么制作?相信有很多从事自媒体行业的小伙伴们有时对视频配音这个问题感到头疼,还有些喜欢听有声小说的朋友们,都会疑惑要怎么将文案文本转换成音频呢?其实文本配音不难,小编今天给大家整理了六款靠谱的文本配…

Python: Print Table on console

# encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看: # 描述: # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2023.1 python 3.11 # OS : windows 10 # Datetime : 2024/10/28 22:08 # User : geo…

PSINS工具箱函数介绍——inserrplot

关于工具箱 i n s e r r p l o t inserrplot in

三维模型加载慢的问题优化

业务背景 在桂林XXX人民法院项目的XX法院三维模型应用开发中用户反馈模型加载慢的问题,要想优化该问题主要从两方面入手 硬件升级软件优化 硬件升级 可参考高院三维模型的超高分电脑配置 处理器:Hygon C86 3285 8-orecprocessor 3.00GHz&#xff08…

阿里云 SAE 应用引擎可观测性最佳实践

SAE 简介 Serverless 应用引擎 SAE(Serverless App Engine)是一款零代码改造、极简易用、自适应弹性的应用全托管平台。SAE 能够让用户免运维 IaaS 和 Kubernetes,秒级完成从源代码、代码包、Docker 镜像部署任意语言的在线应用(…

【面试题系列】MySQL 中 GROUP BY 和 DISTINCT 有什么区别?

在 MySQL 中,GROUP BY 和 DISTINCT 是两个常用的 SQL 子句,它们都用于处理数据的重复性,但在使用场景、语法、功能和性能方面存在显著差异。 本文将详细探讨这两者的区别,包括其语法、功能特点、使用场景及性能考虑,并…

Java类的static成员以及代码块(详细版)

文章目录 一、什么是static成员二、static修饰的成员有何意义三、static修饰成员变量四、static修饰成员方法4.1、静态成员变量不可以在方法内创建4.2、静态成员方法内部不可以访问非静态成员变量4.3、总结 五、static成员变量的初始化5.1、就地初始化5.2、静态代码块初始化 六…

Linux | Rsync 命令:16 个实际示例(下)

引言 Rsync(远程同步)是Linux/Unix系统中用于远程和本地复制及同步文件和目录的常用工具。 利用rsync命令,您可以轻松地在不同目录、硬盘和网络之间进行数据的远程和本地复制与同步,进行数据备份,以及在两台Linux系统间…

吃牛羊肉的季节来了,快来看看怎么陈列与销售!

一、肉品陈列基本原则 (一)新鲜卫生 1、保证商品在正确的温度、正确的方式下陈列 (1)正确的温度:冷藏柜-2℃-2℃;冷冻柜库-20℃-18℃ (2)正确的方式: 商品不遮挡冷气出风口&…