一起来学Docker(四)

前言

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

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

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

rm & 删除容器

可以删除一个或多个容器,如果容器正在运行,则需要通过-f参数强制删除

语法:

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

OPTIONS的常用值:

  • -f:强制删除,即使容器正在运行也可以删除
  • -l:删除容器之间的网络关系,而不是容器本身
  • -v: 删除容器和它挂载的卷

示例:

shell 复制代码
[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 && 暂停容器

暂停一个或多个正在运行的容器

语法:

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

示例:

shell 复制代码
docker pause centos

unpause & 取消暂停容器

与之相反的是unpause取消暂停

示例:

shell 复制代码
docker unpause centos

create & 创建一个容器

创建一个容器,但不运行它,在需要的时候可以使用start命令启动

run命令的用法几乎一致,都会创建一个容器,如果容器依赖的镜像不存在都会从远程仓库拉取,而run命令创建容器后会运行容器, create命令只是创建容器,不运行

语法:

shell 复制代码
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

示例:

shell 复制代码
[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 ~]# 

可以看到STATUSCreated状态,大部分情况下还是用run命令多一些,一步到位~

exec && 在容器中执行命令

可以在一个运行中的容器中执行一个命令

语法:

shell 复制代码
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命令,因为这两个容器完全隔离,同样容器也无法执行宿主主机的命令。

示例:

shell 复制代码
[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可以退出查看

语法:

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

OPTIONS的常用值:

  • -a: 显示所有容器的资源使用情况,默认只显示正在运行的
  • ---format:格式化输出结果
  • ---no-stream: 不间隔刷新,只显示第一次统计结果
  • ---no-trunc: 不截断显示信息,默认情况下有些字段只显示简略信息,如容器id

示例:

shell 复制代码
>>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 & 查看容器中运行的进程信息

查看容器的进程信息

语法:

shell 复制代码
docker top CONTAINER [ps OPTIONS]
  • CONTAINER:容器
  • OPTIONS:ps命令的可选参数

示例:

shell 复制代码
[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进行命名

语法:

shell 复制代码
docker rename CONTAINER NEW_NAME

示例:

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

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

Docker教程相关文章

往前Shell脚本编程相关文章

往期Linux相关文章

往期面试题相关文章

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

往期设计模式相关文章

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

Kafka 专题学习

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

ElasticSearch 专题学习

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

往期并发编程内容推荐

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

博客(阅读体验较佳)

相关推荐
码农小旋风1 小时前
详解K8S--声明式API
后端
Peter_chq1 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
Yaml42 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~2 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616882 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
追风林2 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
睡觉谁叫~~~3 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust
城南vision4 小时前
Docker学习—Docker核心概念总结
java·学习·docker
wclass-zhengge4 小时前
Docker篇(Docker Compose)
运维·docker·容器
2401_865854885 小时前
iOS应用想要下载到手机上只能苹果签名吗?
后端·ios·iphone