前言
目前正在出一个Docker
系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~
Docker
大家应该都听说过,特别是在当今云原生爆火的时代,更值得我们去学习,下面会带大家系统性的认识一下Docker
,并结合一些例子,让大家快速上手~
好了, 废话不多说直接开整吧~
attach & 连接到容器内
这个跟exec
命令类似,上节有给大家提到过。attach
可以连接到容器内,这个容器必须是正在运行的容器,不是运行状态时,会报错 当使用ctrl+c
或exit
等命令退出容器时,会导致容器停止
运行。所以,不建议
在生产环
境使用该命令。生产环境可以使用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-swap
:swap limit
, -1 表示不限制---cpu demecial
:cpu
资源,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
命令比较容易混淆 export
和save
的不同之处在于: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
:文件地址 -
URL
:URL
地址 -
-
:从标准输入终端导入 -
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脚本编程相关文章
- 一起来学Shell脚本编程(一)
- 一起来学Shell脚本编程(二)
- 一起来学Shell脚本编程(三)
- 一起来学Shell脚本编程(四)
- 一起来学Shell脚本编程(五)
- 一起来学Shell脚本编程(六)
- 一起来学Shell脚本编程(七)
往期Linux相关文章
- 一起来学Linux命令(一)
- 一起来学Linux命令(二)
- 一起来学Linux命令(三)
- 一起来学Linux命令(四)
- 一起来学Linux命令(五)
- 一起来学Linux命令(六)
- 一起来学Linux命令(七)
- 一起来学Linux命令(八)
- 一起来学Linux命令(九)
- 一起来学Linux命令(十)
往期面试题相关文章
- 查漏补缺第一期(Redis相关)
- 查漏补缺第二期(synchronized & 锁升级)
- 查漏补缺第三期(分布式事务相关)
- 查漏补缺第四期(Mysql相关)
- 查漏补缺第五期(HashMap & ConcurrentHashMap)
- 查漏补缺第六期(京东一面)
- 查漏补缺第七期(美团到店一面)
- 查漏补缺第八期(阿里一面)
- 查漏补缺第九期(阿里二面)
- 查漏补缺第十期(网易实习一面)
- 查漏补缺第十一期(网易实习二面)
- 查漏补缺第十二期(网易实习三面)
- 查漏补缺第十三期(滴滴实习一面)
- 查漏补缺第十四期(滴滴实习二面)
- 查漏补缺第十五期(华为一面)
- 查漏补缺第十六期(华为二面)
- 查漏补缺第十七期(华为三面)
- 查漏补缺第十八期(你了解class文件吗)
项目源码(源码已更新 欢迎star⭐️)
往期设计模式相关文章
- 一起来学设计模式之认识设计模式
- 一起来学设计模式之单例模式
- 一起来学设计模式之工厂模式
- 一起来学设计模式之建造者模式
- 一起来学设计模式之原型模式
- 一起来学设计模式之适配器模式
- 一起来学设计模式之桥接模式
- 一起来学设计模式之组合模式
- 一起来学设计模式之装饰器模式
- 一起来学设计模式之外观模式
- 一起来学设计模式之享元模式
- 一起来学设计模式之代理模式
- 一起来学设计模式之责任链模式
- 一起来学设计模式之命令模式
- 一起来学设计模式之解释器模式
- 一起来学设计模式之迭代器模式
- 一起来学设计模式之中介者模式
- 一起来学设计模式之备忘录模式
- 一起来学设计模式之观察者模式
- 一起来学设计模式之状态模式
- 一起来学设计模式之策略模式
- 一起来学设计模式之模板方法模式
- 一起来学设计模式之访问者模式
- 一起来学设计模式之依赖注入模式
设计模式项目源码(源码已更新 欢迎star⭐️)
Kafka 专题学习
- 一起来学kafka之Kafka集群搭建
- 一起来学kafka之整合SpringBoot基本使用
- 一起来学kafka之整合SpringBoot深入使用(一)
- 一起来学kafka之整合SpringBoot深入使用(二)
- 一起来学kafka之整合SpringBoot深入使用(三)
项目源码(源码已更新 欢迎star⭐️)
ElasticSearch 专题学习
项目源码(源码已更新 欢迎star⭐️)
往期并发编程内容推荐
- Java多线程专题之线程与进程概述
- Java多线程专题之线程类和接口入门
- Java多线程专题之进阶学习Thread(含源码分析)
- Java多线程专题之Callable、Future与FutureTask(含源码分析)
- 面试官: 有了解过线程组和线程优先级吗
- 面试官: 说一下线程的生命周期过程
- 面试官: 说一下线程间的通信
- 面试官: 说一下Java的共享内存模型
- 面试官: 有了解过指令重排吗,什么是happens-before
- 面试官: 有了解过volatile关键字吗 说说看
- 面试官: 有了解过Synchronized吗 说说看
- Java多线程专题之Lock锁的使用
- 面试官: 有了解过ReentrantLock的底层实现吗?说说看
- 面试官: 有了解过CAS和原子操作吗?说说看
- Java多线程专题之线程池的基本使用
- 面试官: 有了解过线程池的工作原理吗?说说看
- 面试官: 线程池是如何做到线程复用的?有了解过吗,说说看
- 面试官: 阻塞队列有了解过吗?说说看
- 面试官: 阻塞队列的底层实现有了解过吗? 说说看
- 面试官: 同步容器和并发容器有用过吗? 说说看
- 面试官: CopyOnWrite容器有了解过吗? 说说看
- 面试官: Semaphore在项目中有使用过吗?说说看(源码剖析)
- 面试官: Exchanger在项目中有使用过吗?说说看(源码剖析)
- 面试官: CountDownLatch有了解过吗?说说看(源码剖析)
- 面试官: CyclicBarrier有了解过吗?说说看(源码剖析)
- 面试官: Phaser有了解过吗?说说看
- 面试官: Fork/Join 有了解过吗?说说看(含源码分析)
- 面试官: Stream并行流有了解过吗?说说看