前言
目前正在出一个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 ~]#
可以看到STATUS
是Created
状态,大部分情况下还是用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脚本编程相关文章
- 一起来学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并行流有了解过吗?说说看