前言
目前正在出一个Docker
系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~
Docker
大家应该都听说过,特别是在当今云原生爆火的时代,更值得我们去学习,下面会带大家系统性的认识一下Docker
,并结合一些例子,让大家快速上手~
好了, 废话不多说直接开整吧~
rm & 删除容器
可以删除一个或多个容器,如果容器正在运行,则需要通过-f
参数强制删除
语法:
docker rm [OPTIONS] CONTAINER [CONTAINER…]
OPTIONS
的常用值:
-f
:强制删除,即使容器正在运行也可以删除-l
:删除容器之间的网络关系,而不是容器本身-v
: 删除容器和它挂载的卷
示例:
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3f2d1dd782f1 hello-world "/hello" 9 days ago Exited (0) 47 hours ago clever_mcnulty [root@iZ2ze5vrnucj8nu52fq932Z ~]# docker rm 3f2d1dd782f 3f2d1dd782f [root@iZ2ze5vrnucj8nu52fq932Z ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@iZ2ze5vrnucj8nu52fq932Z ~]#
pause && 暂停容器
暂停一个或多个正在运行的容器
语法:
docker pause CONTAINER [CONTAINER…]
示例:
docker pause centos
unpause & 取消暂停容器
与之相反的是unpause
取消暂停
示例:
docker unpause centos
create & 创建一个容器
创建一个容器,但不运行它,在需要的时候可以使用start
命令启动
和run
命令的用法几乎一致,都会创建一个容器,如果容器依赖的镜像不存在都会从远程仓库拉取,而run
命令创建容器后会运行容器, create
命令只是创建容器,不运行
语法:
docker create [OPTIONS] IMAGE [COMMAND] [ARG…]
示例:
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker create hello-world 08b908533c3e442f2db93a38d61f0b5941d9c59911faf84b3d5f5c971ed01d22 [root@iZ2ze5vrnucj8nu52fq932Z ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 08b908533c3e hello-world "/hello" 5 seconds ago Created objective_mestorf [root@iZ2ze5vrnucj8nu52fq932Z ~]#
可以看到STATUS
是Created
状态,大部分情况下还是用run
命令多一些,一步到位~
exec && 在容器中执行命令
可以在一个运行中的容器中执行一个命令
语法:
docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
OPTIONS
:可选参数CONTAINER
:容器COMMAND
:要执行的命令ARG
:命令的参数
OPTIONS
的常用值:
-d
: 命令在后台运行-i
:保持标准输入,通常和-t
一起使用-t
: 分配一个伪终端,通常和-i
一起使用-w
: 指定容器的路径
初学者可能对这个命令有点一知半解,在容器里还能运行命令?这个命令是linux
主机命令?
exec
允许我们和容器
进行交互,打个比方,一个正在运行的web服务
容器发生了故障,现在需要排查问题,我们知道容器
本身处于沙箱状态,从外部无法感知内部发生的问题,想要知道问题还得从应用程序本身下手,所以就得进入容器
内部查看。
而exec
则是以终端的方式与容器进行交互,就好比我们和服务器交互也是终端。进入到容器内部使用的命令,则是以容器本身为主,与宿主主机(当前登录的服务器)无关,也就是说你敲的任何命令对宿主主机不会产生任何影响,有哪些命令可以使用取决于当前容器本身,比如一个nginx
服务容器和redis
服务容器,第一个可以使用nginx
命令而无法使用redis
命令,因为这两个容器完全隔离,同样容器也无法执行宿主主机的命令。
示例:
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker exec -it nginx-gateway /bin/bash root@5fa7440e04f8:/# pwd / root@5fa7440e04f8:/# ls -a . .. .dockerenv bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@5fa7440e04f8:/# ls bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@5fa7440e04f8:/# ll bin bash: ll: command not found root@5fa7440e04f8:/# ls bin bash chmod dash df dnsdomainname egrep findmnt gzexe ln lsblk mktemp mountpoint pidof readlink run-parts sleep sync touch uname wdctl zcmp zfgrep zless cat chown date dir domainname false grep gzip login mkdir more mv pwd rm sed stty tar true uncompress ypdomainname zdiff zforce zmore chgrp cp dd dmesg echo fgrep gunzip hostname ls mknod mount nisdomainname rbash rmdir sh su tempfile umount vdir zcat zegrep zgrep znew root@5fa7440e04f8:/# nginx -h nginx version: nginx/1.21.5 Usage: nginx [-?hvVtTq] [-s signal] [-p prefix] [-e filename] [-c filename] [-g directives] Options: -?,-h : this help -v : show version and exit -V : show version and configure options then exit -t : test configuration and exit -T : test configuration, dump it and exit -q : suppress non-error messages during configuration testing -s signal : send signal to a master process: stop, quit, reopen, reload -p prefix : set prefix path (default: /etc/nginx/) -e filename : set error log file (default: /var/log/nginx/error.log) -c filename : set configuration file (default: /etc/nginx/nginx.conf) -g directives : set global directives out of configuration file root@5fa7440e04f8:/#
以nginx
为例,访问了容器nginx-gateway
内部,root@5fa7440e04f8:/#
表示进入了与容器交互的终端,在内部执行了一些命令,在bin
目录下可以看到能够使用的命令,大家也可以尝试部署其它的容器
如果想退出与容器交互,使用exit
命令即可
stats && 监控容器的资源使用情况
监控容器的资源使用情况,如cpu使用情况、内存使用情况等。每秒刷新一次,使用ctrl+c
可以退出查看
语法:
docker stats [OPTIONS] [CONTAINER…]
OPTIONS
的常用值:
-a
: 显示所有容器的资源使用情况,默认只显示正在运行的—format
:格式化输出结果—no-stream
: 不间隔刷新,只显示第一次统计结果—no-trunc
: 不截断显示信息,默认情况下有些字段只显示简略信息,如容器id
示例:
>>docker stats nginx-gateway CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS nginx-gateway 0.00% 1.453 MiB / 16 GiB 0.08% 3.36 kB / 946 B 21.8 MB / 0 B 2
top & 查看容器中运行的进程信息
查看容器的进程信息
语法:
docker top CONTAINER [ps OPTIONS]
CONTAINER
:容器OPTIONS
:ps命令的可选参数
示例:
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker top nginx-gateway UID PID PPID C STIME TTY TIME CMD root 31387 31317 0 Oct10 ? 00:00:00 nginx: master process nginx -g daemon off; 101 31637 31387 0 Oct10 ? 00:00:00 nginx: worker process [root@iZ2ze5vrnucj8nu52fq932Z ~]#
rename & 重命名容器
对容器进行重命名,在容器run
时如果没有使用—name
参数指定容器名称,可以使用rename
进行命名
语法:
docker rename CONTAINER NEW_NAME
示例:
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0e75be7101c8 hello-world "/hello" 8 seconds ago Exited (0) 8 seconds ago thirsty_golick [root@iZ2ze5vrnucj8nu52fq932Z ~]# docker rename 0e75be7101c8 hello-world1 [root@iZ2ze5vrnucj8nu52fq932Z ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0e75be7101c8 hello-world "/hello" 37 seconds ago Exited (0) 37 seconds ago hello-world1 [root@iZ2ze5vrnucj8nu52fq932Z ~]#
结束语
本节到这里就结束了,docker
命令很多,大家不要去背,如果忘了可以使用docker -h
进行查看,多动手,多尝试,多踩坑,下节继续给大家讲解它的用法~
本着把自己知道的都告诉大家,如果本文对有所帮助,点赞+关注
鼓励一下呗~