前言
目前正在出一个Docker
系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~
Docker
大家应该都听说过,特别是在当今云原生爆火的时代,更值得我们去学习,下面会带大家系统性的认识一下Docker
,并结合一些例子,让大家快速上手~
好了, 废话不多说直接开整吧~
attach & 连接到容器内
这个跟exec
命令类似,上节有给大家提到过。attach
可以连接到容器内,这个容器必须是正在运行的容器,不是运行状态时,会报错 当使用ctrl+c
或exit
等命令退出容器时,会导致容器停止
运行。所以,不建议
在生产环
境使用该命令。生产环境可以使用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-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
表示不限制
示例:
更新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
命令比较容易混淆export
和save
的不同之处在于: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
:文件地址URL
:URL
地址-
:从标准输入终端导入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
进行查看,多动手,多尝试,多踩坑,下节继续给大家讲解它的用法~
本着把自己知道的都告诉大家,如果本文对有所帮助,点赞+关注
鼓励一下呗~