一起来学Docker(五)

前言

目前正在出一个Docker系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~

Docker大家应该都听说过,特别是在当今云原生爆火的时代,更值得我们去学习,下面会带大家系统性的认识一下Docker,并结合一些例子,让大家快速上手~

好了, 废话不多说直接开整吧~

attach & 连接到容器内

这个跟exec命令类似,上节有给大家提到过。attach可以连接到容器内,这个容器必须是正在运行的容器,不是运行状态时,会报错 当使用ctrl+cexit等命令退出容器时,会导致容器停止运行。所以,不建议在生产环境使用该命令。生产环境可以使用exec命令进入容器

语法:

shell 复制代码
docker attach [OPTIONS] CONTAINER

OPTIONS的常用值:

  • ---sig-proxy=false boolean: 默认true,为false时可以防止容器遇到ctrl+c退出信号时停止运行

示例:

shell 复制代码
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker attach redis
^C1:signal-handler (1698026560) Received SIGINT scheduling shutdown...
1:M 23 Oct 2023 10:02:40.395 # User requested shutdown...
1:M 23 Oct 2023 10:02:40.395 * Calling fsync() on the AOF file.
1:M 23 Oct 2023 10:02:40.396 * Saving the final RDB snapshot before exiting.
1:M 23 Oct 2023 10:02:40.401 * DB saved on disk
1:M 23 Oct 2023 10:02:40.402 # Redis is now ready to exit, bye bye...
[root@iZ2ze5vrnucj8nu52fq932Z ~]# 

当我按ctrl+c退出的时候,容器也随之停止了,所以这个命令不要在生产中使用,另外attact连接的输入输出是进程的,所以它不会像exec那样可以进入bash状态,这个大家自己试一下就知道了,所以这里指推荐使用exec

update & 更新一个或多个容器的配置

可以对容器的配置进行更新

语法:

shell 复制代码
docker update [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS的常用值:

  • -m: 指定容器的内存大小,单位可选b、k、m、g
  • ---memory-swapswap limit, -1 表示不限制
  • ---cpu demecialcpu资源,1.5表示可以使用宿主机的1.5个cpu资源
  • ---cpuset-cpus:容器可以使用宿主机的cpu内核编号,0-3表示4个内核都可以使用,1,3表示只能使用1和3号内核
  • ---restart: 指定容器的退出的重启策略。no:不重启;on-failure:容器非正常退出时重启;on-failure:3:非正常退出时重启3次;alaways:总是重启;unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
  • pids-limit: 限制容器进程或线程的数量,默认-1表示不限制

示例:

shell 复制代码
更新reids镜像的内存为2G
>> docker update ---memory-swap -1 -m 2g redis

更新容器的重启策略
>> docker update ---restart on-failure:3 redis

更新tomcat容器的最大线程数为2000
>> docker update ---pids-limit 2000 redis

logs & 查看容器的日志

查看容器运行的日志方式有很多种,我们可以进入到容器内查看保存的日志文件,如果挂载到主机目录的可以直接在具体的目录直接查看日志,当然这些日志都是应用程序产生的日志,如果想要查看更具体的容器日志可以使用logs命令

语法:

shell 复制代码
docker logs [OPTIONS] CONTAINER

OPTIONS的常用值:

shell 复制代码
- `-f`: 跟踪日志的实时输出
- `---until`:查看某个时间点之前的日志,格式:2021-06-03T19:30:20Z。或使用相对时间10m,表示10分钟之前
- `---since`:查看某个时间点之后的日志,格式:2021-06-03T19:30:20Z。使用相对时间10m,表示10分钟之内
- `-n`: 查看最后几行日志,默认显示全部
- `-t`: 日志中显示时间戳

示例:

shell 复制代码
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker start redis
redis
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker logs -f redis
1:signal-handler (1692928442) Received SIGTERM scheduling shutdown...
1:M 25 Aug 2023 09:54:02.690 # User requested shutdown...
1:M 25 Aug 2023 09:54:02.690 * Calling fsync() on the AOF file.
1:M 25 Aug 2023 09:54:02.691 * Saving the final RDB snapshot before exiting.
1:M 25 Aug 2023 09:54:02.696 * DB saved on disk
1:M 25 Aug 2023 09:54:02.696 # Redis is now ready to exit, bye bye...
1:C 10 Oct 2023 10:58:08.514 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 10 Oct 2023 10:58:08.514 # Redis version=6.2.5, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 10 Oct 2023 10:58:08.514 # Configuration loaded
1:M 10 Oct 2023 10:58:08.514 * monotonic clock: POSIX clock_gettime
1:M 10 Oct 2023 10:58:08.515 * Running mode=standalone, port=6379.
1:M 10 Oct 2023 10:58:08.515 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 10 Oct 2023 10:58:08.515 # Server initialized
1:M 10 Oct 2023 10:58:08.515 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
....
......

wait & 阻塞容器,直到容器退出并打印它的退出代码

阻塞一个或多个容器直到容器退出并打印出他们的退出代码

语法:

shell 复制代码
docker wait CONTAINER [CONTAINER...]

这个大家可以自己试下

port & 列出端口的映射关系

语法:

shell 复制代码
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
  • PRIVATE_PORT:容器端口
  • PROTO:端口使用的协议

示例:

shell 复制代码
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker port redis
6379/tcp -> 0.0.0.0:36379
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker port redis 6379/tcp
0.0.0.0:36379
[root@iZ2ze5vrnucj8nu52fq932Z ~]# 

export & 将容器打包成一个文件

将容器打包到一个文件中,它和save命令比较容易混淆 exportsave的不同之处在于:export打包的是容器save打包的是镜像,所以大家要区分好
export打包的是容器当时的快照,至于容器的历史记录和元数据信息都会丢失,export的文件在被import成一个镜像时,可以重新指定镜像的名称和版本号

语法:

shell 复制代码
docker export [OPTIONS] CONTAINER

OPTIONS的常用值,-o: 指定打包文件

示例:

shell 复制代码
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker export -o hello-container.tar hello-world1
[root@iZ2ze5vrnucj8nu52fq932Z ~]# ls
 hello-container.tar 
[root@iZ2ze5vrnucj8nu52fq932Z ~]# 

可以看到停止的容器也可以被打包

import & 从本地文件或远程文件导入镜像到本地仓库

从本地文件或远程文件中导入镜像到本地仓库,如果是从文件中导入,这个文件需要是export命令导出的文件

语法:

shell 复制代码
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

-OPTIONS:可选参数

  • file:文件地址

  • URLURL地址

  • -:从标准输入终端导入

  • REPOSITORY:本地镜像仓库地址

  • TAG:镜像版本号

OPTIONS的常用值:

  • -m string: 添加描述信息
  • -c list: 对创建的容器使用dokerfile指令

示例:

shell 复制代码
[root@iZ2ze5vrnucj8nu52fq932Z ~]# cat hello-container.tar | docker import - hello-new:1.0
sha256:31ec32326c30894fba5a52ac119efa90c82824ec3920bd804fbd33a59e4fbf83

[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker images
REPOSITORY                                          TAG                 IMAGE ID            CREATED             SIZE
hello-new                                           1.0                 31ec32326c30        3 seconds ago       13.3 kB
[root@iZ2ze5vrnucj8nu52fq932Z ~]# 

上述示例从本地文件加载镜像,并命名为hello-new版本号为1.0

结束语

本节到这里就结束了,docker命令很多,大家不要去背,如果忘了可以使用docker -h进行查看,多动手,多尝试,多踩坑,下节继续给大家讲解它的用法~

本着把自己知道的都告诉大家,如果本文对有所帮助,点赞+关注鼓励一下呗~

Docker教程相关文章

往前Shell脚本编程相关文章

往期Linux相关文章

往期面试题相关文章

项目源码(源码已更新 欢迎star⭐️)

往期设计模式相关文章

设计模式项目源码(源码已更新 欢迎star⭐️)

Kafka 专题学习

项目源码(源码已更新 欢迎star⭐️)

ElasticSearch 专题学习

项目源码(源码已更新 欢迎star⭐️)

往期并发编程内容推荐

推荐 SpringBoot & SpringCloud (源码已更新 欢迎star⭐️)

博客(阅读体验较佳)

相关推荐
Iced_Sheep34 分钟前
干掉 if else 之策略模式
后端·设计模式
梅见十柒42 分钟前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生
XINGTECODE1 小时前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
程序猿进阶1 小时前
堆外内存泄露排查经历
java·jvm·后端·面试·性能优化·oom·内存泄露
FIN技术铺1 小时前
Spring Boot框架Starter组件整理
java·spring boot·后端
凡人的AI工具箱1 小时前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
先天牛马圣体2 小时前
如何提升大型AI模型的智能水平
后端
java亮小白19972 小时前
Spring循环依赖如何解决的?
java·后端·spring
2301_811274312 小时前
大数据基于Spring Boot的化妆品推荐系统的设计与实现
大数据·spring boot·后端
草莓base3 小时前
【手写一个spring】spring源码的简单实现--容器启动
java·后端·spring