5.docker容器及相关命令

docker中的容器实际上就是宿主机中的一个进程

目录

1  创建并启动容器 docker run

1.1  如果没有指定的镜像的话,docker会尝试从源拉取

1.2  给容器起名字 --name

1.3  交互方式启动(-i)与弹出客户端(-t)

1.4  指定端口 -p

1.5  自动分配端口 -P

1.6  后台运行(以守护进程方式运行) -d

2  查看运行中的容器 docker ps

3  以新的进程进入正在启动的容器内部 docker exec -it [容器ID] /bin/bash

4  删除容器 docker rm

5  以当前的进程进入正在启动的容器内部 docker attach

6  启动容器 docker restart

7  停止容器 docker stop

8  显示容器在宿主机的运行情况 docker top

9  查看日志docker logs

9.1  从指定时间到现在的日志 --since

9.2  最后n行 --tail

9.3  从日志的开头到指定的时间 --until

9.4  添加日志的时间戳 -t

9.5  获得动态日志 -f

9.6  其他参数

10  宿主机与容器复制文件 docker cp

10.1  从宿主机复制文件到容器中

10.2  从容器复制文件到宿主机

11  将容器保存为镜像 docker commit

12  将容器保存为tar文件 docker export

13  将docker export生成的tar文件加载为镜像 docker import

14  暂停容器对外的服务 docker pause

15  停止暂停容器对外的服务 docker unpause

16  强制停止容器 docker kill

17  仅创建容器 docker create


1  创建并启动容器 docker run

1.1  如果没有指定的镜像的话,docker会尝试从源拉取

如果源里面没有就会报错

1.2  给容器起名字 --name

比如我像给hello-world这个镜像启动的容器命名为something

  • 如果你不手动起名字,那么docker会帮你起一个,比如我之前运行的recursing_lumiere

1.3  交互方式启动(-i)与弹出客户端(-t)

我们以ubuntu的镜像为例,如果你直接运行ubuntu的镜像就会退出,因为镜像中没有需要执行的应用

运行后我们发现路径就变了,此时我们已经进入到了ubuntu这个镜像的系统中

  • -i -t 可以简写成-it

可以输入 exit 然后按回车退出

/bin/bash是在容器中运行bash shell(可以理解为打开一个终端),有时候需要加,有时候不用加。比如ubuntu你不用加也能打开,不过你加上之后也没有什么问题。加与不加主要是看dockerfile,有的dockerfile中的最后一句人家有写你就不用加,他要是没写且你想进终端你就得加

/bin/bash对应的是这里的command

1.4  指定端口 -p

我们以tomcat:8.5.49为例,tomcat是一种java web服务器解决方案。对标python的话可以理解为uwsgi,uwsgi是一种python web服务器解决方案

  • tomcat8.5.49以后的启动方式略有不同

输入 docker run -p 8888:8080 tomcat:8.5.49

  • 冒号前的8888是指你要映射出来的端口,因为你只放docker中你访问不到,只能映射到宿主机上访问
  • 冒号后的8080是指docker里面的端口,tomcat默认的端口是8080

  • 由于是前台运行,所以该终端一直会是阻塞状态。你如果按ctrl+c,那么tomcat这个服务就断了

使用宿主机访问 127.0.0.1:8888 可以看到tomcat

如果你在启动的时加入了-it,那么运行后按ctrl+p+q,那么就会将docker的服务放到后台运行,并且你也能退到docker中干点儿别的

  • -it少一个都不行

按下ctrl+p+q后,可以看一下该容器的状态,发现它并不是Exit,而是正在执行的状态。并且在PORTS的位置可以看到端口状况,8888是宿主机的端口,8080是docker内部的端口。前面0.0.0.0是IPV4的写法,后面连续三个冒号是IPV6的写法

  • COMMAND是tomcat在dockerfile中就写了的,我没有对COMMAND做任何操作

按下ctrl+p+q后,使用宿主机访问127.0.0.1:8888依然可以访问到tomcat

1.5  自动分配端口 -P

输入docker run -it -P tomcat:8.5.49

按ctrl+p+q退出来,之后查看docker ps -a,之后发现系统自动分配了一个端口32769

之后使用宿主机访问127.0.0.1:32769可以访问tomcat

1.6  后台运行(以守护进程方式运行) -d

  • 后台运行也需要有交互的东西,如果你后台运行一个ubuntu然后ubuntu中什么都没开,那么ubuntu的容器也会被关闭

docker run -d -p 8888:8080 tomcat:8.5.49

访问 127.0.0.1:8888 可以正常访问

2  查看运行中的容器 docker ps

  • 容器在运行完容器内的应用会后自动终止,如果是终止状态的 STATUS 就会显示为 Exited。如果不想在运行后终止,那么容器应用不能立即结束(比如搞个服务,它一直在那里运行)

可以加入参数-a查看所有容器

可以加入参数-s查看容器大小。实际73.6kB,虚拟出来507MB

除-a,-s之外,还有其他参数,比如

  • -filter 过滤
  • -n 显示最新创建的若干个(是创建不是运行),比如我要看最新创建的6个,那么就写 docker ps -n 6
  • -l 显示最新创建的1个(是创建不是运行),docker ps -l
  • --no-trunc 不省略输出
  • -q 只显示容器ID

3  以新的进程进入正在启动的容器内部 docker exec -it [容器ID] /bin/bash

我们以tomcat:8.5.50为例,以tomcat:8.4.49的方式启动tomcat:8.5.50后访问127.0.0.1:8888会显示404

能显示404代表容器已经启动成功了

我们可以进入该容器

出现404的原因是webapps这个文件夹没有东西

我们现在讲webapps.dist覆盖掉webapps。首先删除webapps这个文件夹,然后给webapps.dist改名为webapps

替换后等待一会儿可以访问到tomcat的主页

在终端中输入 exit 然后按回车可以退出容器内部

除了-it以外常用的参数还有-u、-w

-u是选择用户的,-w可以选择进入后的工作目录

最后的 /bin/bash 是进入容器,如果你不希望进入容器但又希望查询容器内部的某些信息,那么你可以将命令替换掉/bin/bash,比如我现在想看看进入工作目录后有哪些文件,那么我就用ls替换掉/bin/bash

4  删除容器 docker rm

一般我们会直接使用 docker rm -f [容器ID]

比如我现在想删除 98f8 这个容器

删除后98f8这个容器就没了

当容器正在运行状态的时候仅使用rm不能删除

docker rm -f 可以强制删除

5  以当前的进程进入正在启动的容器内部 docker attach

我们现在后台运行一个ubuntu,进入ubuntu,按ctrl+p+q让其后台运行。此时的容器是开着的

docker exec是以一个新的进程进去容器内部,我们退出exec并不会关闭容器

docker attach是以当前的进程进入正在启动的容器内部,退出attach就会关闭容器

如果容器和tomcat一样是一直交互的那种,attach之后就不会给你打字的地方,因为这个容器现在正在阻塞的状态

你按ctrl+c可以终止阻塞的状态,然后再查看容器的状态就发现容器已经关闭了

有三个参数分别是

  • --detach-keys 分离会话,用attach分离会话不如直接用exec
  • --no-stdin 禁用输入,这个是防误触用的。默认为有输入。
  • --sig-proxy 这个是多个客户端使用attach时,显示相同的输入与输出。默认显示的就是相同的输入与输出

6  启动容器 docker restart

使用start也行,一般我们都使用restart,因为restart可以替代start的功能

7  停止容器 docker stop

8  显示容器在宿主机的运行情况 docker top

我们在宿主机中查看进程对比一下,发现信息是一致的

我们简单说一下top中的内容

  • UID 哪个运行运行的,我此时用的是sudo su,所以是root用户
  • PID 当前进程ID
  • PPID 当前进程的父进程ID
  • C CPU占用率
  • STIME 进程开始时间,我当前是11:11分启动的容器
  • TTY 启动此进程的中断设备,这个没用到过,也不太懂
  • CMD 启动进程的命令

我们查看help发现没有和其他的指令一样,写着有什么参数。这里我们可以看到[ps OPTIONS],[ps OPTIONS]表明和linux命令中ps的参数一致

比如我们使用ps -ef ,在这里也可以使用 docker top [容器ID] -ef

9  查看日志docker logs

可以查看启动容器的日志,也可以查看未启动容器的日志,比如查看未启动的ubuntu

下面是查看启动的tomcat

9.1  从指定时间到现在的日志 --since

--since 显示从什么时候开始的日志,比如我只想看2小时前到现在的日志,那么我就写 docker logs e025 --since '120m'

也可以给时间戳,时间戳的格式可以照着help文档中的内容来写

比如 docker logs e025 --since '2023-12-13T9:20:00Z'

  • 时间要写0时区的时间,我现在在17点多开启了容器,那我就要写9点

9.2  最后n行 --tail

比如我现在只想看最后3行的内容,那么就写 docker logs [容器ID] --tail 3

  • 一般来讲新的日志总是在最后,所以我们看最后3行,一般也是最新的3行

9.3  从日志的开头到指定的时间 --until

比如 docker logs e025 --until '2023-12-13T9:26:00z'

9.4  添加日志的时间戳 -t

我们做个对比

9.5  获得动态日志 -f

-f只能查看运行中的容器,通过-f查看日志后,终端会一直监听该容器

此时我们可以通过 docker attach 该容器,然后进行一些操作,比如输入 ps -ef 然后按回车

之后我们发现logs也会显示相同的内容

9.6  其他参数

  • --details 显示额外的细节,作用不大

10  宿主机与容器复制文件 docker cp

使用cp命令不能在容器与容器间复制文件

10.1  从宿主机复制文件到容器中

  • 可以复制到关闭的容器中,也可以复制到未关闭的容器中

我现在宿主机的home下有一个test.txt

里面的内容的hello world

我现在复制到 3c57 这个容器的/home下

发现可以成功复制进去

10.2  从容器复制文件到宿主机

  • 可以从关闭的容器中复制,也可以从开启的容器中复制

我现在在容器中创建 do_something.txt 内容为 do something

将do_something.txt复制到宿主机上

发现可以成功复制

11  将容器保存为镜像 docker commit

  • docker commit生成的镜像会保留镜像的全部信息。可以理解为与docker save ->docker load 的结果一样。与docker export -> docker import 的结果不同

我们首先准备一个容器,这个容器的/home下有一个test.txt,内容为 hello world

我们目前有如下镜像

在使用docker commit之前,我们先看一下参数

  • -a 作者字符串
  • -c 后面写dockerfile指令,也就是说在该容器下你可以使用dockerfile指令再对容器进行修改,之后保存到镜像
  • -m 提交信息,比如说是这一次提交修改了什么东西
  • -p 提交时暂停容器

我们下面简单用一下。docker commit -a "[作者名称与邮箱]" -m "[提交信息]" [容器ID] [镜像的名称与tag]

  • 如果不写镜像名与tag,生成镜像的时候REPOSITORY与TAG就会为none

发现可以成功添加,之后我们运行一下,运行后发现可以找到 /home/test.txt 并且内容正确

镜像的作者与提交的信息可以通过查看镜像元信息找到

12  将容器保存为tar文件 docker export

比如现在我想把 3805 这个容器转换为 tar 文件

执行 docker export -o [tar文件名称] [容器ID]

执行过后发现产生了suyu_ubuntu.tar这个文件

使用export导出的tar文件是不能通过docker load 读取的

  • 有时通过docker export导出的镜像会比原本的镜像体积(docker save镜像的体积)小,原因是通过export的镜像删除了之前的历史记录(docker export导出的镜像只有一层)与一些注释。

通过export导出的tar文件可以通过docker import 生成镜像

13  将docker export生成的tar文件加载为镜像 docker import

docker import参数如下

  • -c 在tar文件的基础上添加dockerfile语句修改镜像
  • -m 提交镜像时的信息,可以在镜像的元信息中查到
  • --platform 支持的平台,如果镜像可以支持多架构可以写,不支持多架构不用写

我们下面用上面export出来的tar文件做个例子,导入之前的镜像列表是这样的

执行 docker import [export导出的tar文件] [镜像名:标签]

  • 如果不写[镜像名:标签]会生成虚悬镜像

14  暂停容器对外的服务 docker pause

docker的暂停状态是 容器依然在运行,但里面的服务就停止了,比如你访问tomcat的首页,此时会一直转,不报错,但也没有响应结果

15  停止暂停容器对外的服务 docker unpause

16  强制停止容器 docker kill

17  仅创建容器 docker create

  • docker create基本上不用,如果想深入了解可以看一下这个 061-docker create命令详解_哔哩哔哩_bilibili

参数与docker run 相似,我们简单用一下

  • 默认后台运行,所以不用写-d,写了会报错,因为docker create没有-d这个参数

启动的时候就当关闭的容器启动就行了

启动后可以访问到tomcat的主页

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

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

相关文章

element plus 日期范围 自定义内容

问题: 按照官网上的自定义内容示例,修改日期选择器没有问题,如果修改日期范围选择器,修改后会丢失日期范围选择时的样式。 解决: 从F12中不难看出日期范围的选择样式来自于.el-date-table-cell 而示例中写的是.cell&…

文件系统和软硬链接(下)

在这里我们首先学习两个新的知识点第一个: 第二个: 下面我们再来理解思考下面的四个问题: 我们首先来解决第一个问题如果新建一个文件Linux系统会做什么呢? 新建文件,系统会做什么 当我们要新建一个文件的时候&#…

Shell三剑客:sed(命令)二

一、插入命令:i(之前) [rootlocalhost ~]# sed -r 2i aaaaaaa passwd.txt root:x:0:0:root:/root:/bin/bash aaaaaaa bin:x:1:1:bin:/bin:/sbin/nologin[rootlocalhost ~]# sed -r 2i aaaaaaa\ > bbb\ > ccc passwd.txt root:x:0:0:r…

vue3中ref及reactive的说明

目录 1.响应式说明 2.vue3的ref及reactive的使用 3.reactive响应式失效问题 4.总结 1.响应式说明 vue的响应式是vue框架中的核心概念之一,它是指当数据发生变化时,vue能够自动更新视图。vue2的响应式是基于Object.defineProperty进行实现的。 当你把…

Spring Cloud:Eureka

目录 一、Eureka介绍 1.Eureka的作用 2.总结 二.搭建Eureka服务端步骤 1.导入maven依赖 2.编写启动类,添加EnableEurekaServer注解 3.添加application.yml文件,编写下面的配置: 三.注册Eureka客户端服务提供者(user-servic…

【每日OJ—有效的括号(栈)】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 1、有效的括号题目: 1.1方法讲解: 1.2代码实现: 总结 前言 世上有两种耀眼的光芒,一种是正在升起的太阳&#…

系统架构设计师教程(五)软件工程基础知识

软件工程基础知识 5.1 软件工程5.1.1 软件工程定义5.1.2 软件过程模型5.1.3 敏捷模型敏捷开发的特点敏捷方法的核心思想主要敏捷方法简介 5.1.4 统一过程模型 (RUP)RUP的生命周期RUP中的核心概念RUP的特点 5.1.5 软件能力成熟度模型 5.2 需求工程5.2.1 需求获取需求获取的基本步…

HashMap扩容机制详解

目录 1. 扩容的触发条件 2. 扩容的具体步骤 2.1 计算新的容量 2.2 创建新的桶数组 2.3 将元素重新分配到新的桶数组中 2.4 更新容量和阈值 3. 与并发性能的关系 4. 扩容的性能优化 5. 总结 HashMap是Java中常用的数据结构之一,用于存储键值对。在HashMap内…

sql 数据类型注入+tamper

数据类型 数字型 0-9 查询语句: $sql"select * from sy_guestbook where id$i"; 字符型 a-z 中文 标点符号 加入了单引号 查询语句: $sql"select * from sy_guestbook where gTpl$g"; simple order by 16--select * from sy_g…

物联网在能源管理中的应用——青创智通工业物联网解决方案

随着全球能源资源的日益紧张和环境问题的日益突出,能源管理已成为当今社会的重要议题。物联网技术的快速发展为能源管理提供了新的解决方案。本文将介绍物联网在能源管理中的应用及其优势。 一、物联网在能源管理中的应用 1. 智能电网 智能电网是物联网在能源管理中…

Android 生物识别:构建一个存储用户敏感信息的安全应用

前言 在当今数字时代,随着科技的不断发展,用户敏感信息尤为重要。从指纹到面部识别,再到虹膜扫描,生物识别技术为我们带来了便捷性和安全性。本次将构建一个简易的账户信息应用,运用生物识别技术来提高信息的安全性。…

数据结构之预习作业:排序(v1)

看视频,回答以下问题: 1.系统提到了哪些排序场景?除此之外,你还知道哪些信息系统有排序? 2.什么样的排序方法是稳定的?请举例说明 3.插入类排序分为哪几类? 4.若对n个元素进行直接插入排序&…

滑动窗口(一)

滑动窗口 什么是滑动窗口算法?通俗的来讲就是 “同向双指针” ,当一组数据的规律含有单调性的时候,就可以使用下面这套逻辑来优化暴力解法。 当两个指针同向移动的时候,类似于一个窗口在滑动。使用于在连续序列里找特殊的子串、…

在centos7上安装docker

1.CentOS安装Docker Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。 1.1.卸载(可选) 如果之前安装过旧版本的Docker,可…

C语言之递归函数

目录 函数和类型 阶乘 █递归函数调用 函数中可以调用和该函数自身完全相同的函数,这样的调用方式称为递归函数调用,下面我们就来学习相关的基础知识。 函数和类型 所谓递归(recursive),就是将自己包含在内&#x…

DataGrip 2023.3 新功能速递!

1 数据可视化 自 DataGrip 2023.3 发布以来,已整合 Lets-Plot 库,实现数据可视化。该可视化功能可用于所有三种类型的网格: 主选项卡:在打开表、视图或 CSV 文件时,在分割模式下显示图表。结果选项卡:在 服…

centos安装opencv并在springboot中使用

使用conda安装opencv,并在docker运行的容器中使用,这里以运行则springboot应用的容器为例 步骤一:安装 在conda中安装 # 安装依赖 conda install numpy matplotlib# 安装opencv conda install -c conda-forge opencv # 或者制定版本 conda…

安装android studio

记录一下安装android studio的过程: 1.首先安装android studio到某一文件夹后,在C盘用户目录下可以看到.android文件夹。C:\Users\22515\AppData\Local\Google目录下也会出现AndroidStudio2022.2文件夹。(注意:用户名&#xff0c…

一种缩小数据之间差距的算法

先上代码&#xff1a; /** * 缩小数据之间的差距&#xff0c;但是大小关系不变的方法* param {Array} features */function minMaxData(data) {for (let i 0; i < data.length; i) {const f data[i];const x f[1];const yf[2];//此处5根据实际情况设置const y2 Math.pow(…

LeedCode刷题---二分查找类问题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、二分查找 题目链接&#xff1a;二分查找 题目描述 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一…