一起来学Docker(五)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
日志服务 SLS,月写入数据量 50GB 1个月
简介: 一起来学Docker(五)

前言

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

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

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

attach & 连接到容器内

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

语法:

docker attach [OPTIONS] CONTAINER

OPTIONS的常用值:

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

示例:

[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 & 更新一个或多个容器的配置

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

语法:

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表示不限制

示例:

更新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命令

语法:

docker logs [OPTIONS] CONTAINER

OPTIONS的常用值:

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

示例:

[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 & 阻塞容器,直到容器退出并打印它的退出代码

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

语法:

docker wait CONTAINER [CONTAINER…]

这个大家可以自己试下

port & 列出端口的映射关系

语法:

docker port CONTAINER [PRIVATE_PORT[/PROTO]]
  • PRIVATE_PORT:容器端口
  • PROTO:端口使用的协议

示例:

[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成一个镜像时,可以重新指定镜像的名称和版本号

语法:

docker export [OPTIONS] CONTAINER

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

示例:

[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker export -o hello-container.tar hello-world1
[root@iZ2ze5vrnucj8nu52fq932Z ~]# ls
 hello-container.tar 
[root@iZ2ze5vrnucj8nu52fq932Z ~]# 

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

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

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

语法:

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

-OPTIONS:可选参数

  • file:文件地址
  • URLURL地址
  • -:从标准输入终端导入
  • REPOSITORY:本地镜像仓库地址
  • TAG:镜像版本号

OPTIONS的常用值:

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

示例:

[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进行查看,多动手,多尝试,多踩坑,下节继续给大家讲解它的用法~

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

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
PyTorch 算法框架/工具 Docker
docker问题
docker问题
84 2
|
Java Linux 虚拟化
docker
docker
2346 0
|
7月前
|
运维 Java 虚拟化
[Docker] Docker为什么出现
[Docker] Docker为什么出现
|
7月前
|
应用服务中间件 nginx Docker
Docker的世界
Docker的世界
50 0
|
关系型数据库 MySQL 虚拟化
docker介绍
docker介绍
96 0
|
NoSQL Java Linux
|
Linux Docker 容器
|
Java Linux 虚拟化
|
存储 运维 关系型数据库
Docker(2)
Docker(2)
|
关系型数据库 Java MySQL
为什么需要Docker?
估计大家也可能听过Docker这项技术(在论坛上、招聘技能上、交流群上等等),要是不了解Docker,都不好意思在网上冲浪的时候吹牛逼了。 所以这几天学了一下Docker,总结了Docker入门的相关知识,分享给大家(好让我们一起吹牛逼)。
266 0
为什么需要Docker?