-
- 帮助命令
-
镜像命令
-
- 镜像检索
-
镜像下载
-
镜像列表
-
镜像删除
-
容器命令
-
- 搜索镜像
-
下载镜像
-
运行容器
-
端口映射
-
- 启动做端口映射的容器
-
端口映射格式
-
查看端口映射
-
小结
-
查看容器
-
停止容器
-
启动容器
-
重启容器
-
删除容器
-
其他重要命令
-
- 查看容器日志
-
连接到正在运行容器
-
在运行的容器中执行命令
-
查看容器中正在运行进程
-
查看容器内部细节
-
容器和宿主机互相拷贝文件
-
更多操作命令
-
常用命令小结
查看docker版本
docker version
查看docker基本信息
docker info
查看具体docker命令的解释
docker --help
镜像检索
通常情况下,Docker 的镜像都放在 Docker 的官网 Docker Hub 上,点此前往官网
docker search 镜像名称:查找镜像,会把相似的结果也查询出来
除了可以在 Docker Hub 上搜索镜像外,还可以通过命令 docker search xxx
进行搜索,下面以hello-world
为例:
docker search hello-world
输出结果
-
NAME
:镜像名称 -
DESCRIPTION
:镜像描述 -
STARS
:星数(点赞) -
OFFICAL
:是否是官方镜像 -
AUTOMATED
:是否是自动构建的
另外,docker search -参数
含义:
-
-f, --filter filter
:根据提供的条件过滤输出,比如:docker search -f stars=30 hello-world
列出星数不小于30的hello-world
镜像; -
--no-trunc
:显示镜像完整描述信息; -
--limit int
:最大搜索结果数(默认 25)
镜像下载
镜像下载命令为:docker pull [IMAGE_NAME]:[TAG]
其中,IMAGE_NAME
:镜像名,TAG
:标签,镜像版本,可选的,默认为 latest
;
在生产环境中,推荐指定 TAG,选择稳定版本的镜像,具体有哪些版本可以上Docker Hub去查找。
docker pull hello-world
镜像列表
获取已下载镜像列表命令:docker images
其中,
-
RESPOSITORY
:镜像名; -
TAG
:镜像版本,latest
代表最新版; -
IMAGE_ID
:镜像唯一 ID; -
CREATED
:镜像的创建时间; -
SIZE
:镜像的大小。
docker images -参数
含义:
-
-a
:all 的简写,列出本地所有镜像(包含中间映像层); -
-q
:只显示镜像 ID; -
--digests
:显示镜像摘要信息; -
--no-trunc
:显示完整的镜像信息。
镜像删除
删除指定镜像:
docker rmi image-id
删除多个镜像:
docker rmi mysql tomcat
删除所有镜像:
docker rmi $(docker images -q)
强制删除镜像:
强制删除(当前镜像启动的容器正在运行中,是无法正常删除的,可以通过 -f 强制删除)
如果删除时不指定 TAG,默认为最新版 Least。
docker rmi -f image-id
镜像运行起来后,称为容器。 下面以 Tomcat 为例
搜索镜像
docker search tomcat
下载镜像
docker pull tomcat
运行容器
运行tomcat
docker run --name tomcat -d -p 8080:8080 tomcat
如果docker运行Tomcat后访问首页报404,详细解决方案可参考:https://cloud.tencent.com/developer/article/1704573
最简单的根据镜像新建并启动容器的命令如下:
docker run --name container-name -d image-name
运行一个容器,使用 docker run
命令即可。 另,docker run -参数
含义:
-
-- name
:为容器起一个名称; -
-d
:detached,执行完这句命令后,控制台将不会阻塞,可以继续输入命令操作,不会阻塞,也就是启动守护式容器,如果执行docker run --name tomcat -it tomcat
会进入启动容器的命令控制台,也就是启动交互式容器; -
-i
:以交互方式运行容器,通常与-t
搭配使用; -
-t
:为容器重新分配一个伪输入终端,通常与-i
搭配使用; -
-P
:随机端口映射; -
-p
:指定端口映射; -
image-name
:要运行的镜像名称;
端口映射
启动做端口映射的容器
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P(大写)
或 -p (小写)
参数来指定端口映射。启动容器的时候如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。
Docker 的端口映射通过 -p
或 -P
参数实现,命令如下:
docker run --name tomcat1 -d tomcat
docker run --name tomcat2 -d -p 8888:8080 tomcat
如上,就把主机端口 8888 请求映射到 Docker 容器内部端口 8080 了。
-p
和 -P
区别为:
-P : 随机映射一个49000~49900的端口到内部容器开放的网络端口
-p : 可以指定要映射的IP和端口,但是在一个指定端口上只可以绑定一个容器
执行完这两条命令后,通过 docker ps
查看:
通过 PORTS
可以看出,tomcat2
是做了端口映射的,tomcat1
是没进行映射过的。
分别通过浏览器访问:
http://*.*.*.*:8080/
// tomcat1默认端口;
http://*.*.*.*:8888/
// 做过端口映射的 Tomcat2,8888 会转发请求到 tomcat2 的 8080。
结果如下:
第一个请求是无法请求到的,原因开篇处说过了。
第二个请求是可以正常进行请求的,会由 tomcat2 容器进行处理
端口映射格式
#指定ip、指定主机port、指定容器port
#ip:hostport:containerport
docker run --name tomcat -d -p 127.0.0.1:8080:8080 tomcat
#指定映射使用一个特定地址,比如 localhost地址 127.0.0.1
#指定ip、未指定主机port、指定容器port
#ip::containerport
docker run --name tomcat -d -p 127.0.0.1::8080 tomcat
#绑定 localhost 的任意端口到容器的 8080 端口,本地主机会自动分配一个端口,还可以使用 udp 标记来指定 udp 端口
docker run --name tomcat -d -p 127.0.0.1:8080:8080/udp tomcat
#未指定ip port、指定主机port、指定容器port
#hostport:containerport
docker run --name tomcat -d -p 8080:8080 tomcat
#将本地的 8080 端口映射到容器的 8080 端口,默认会绑定本地所有接口上的所有地址
查看端口映射
可以通过如下命令查看容器映射了哪些端口及协议:
docker port container-id
示例:
[root@iZwz9inovbad1hkjy16akvZ tmp]#docker port 1596abf8d8a3
8080/tcp -> 0.0.0.0:8888
8080/tcp -> :::8888
[root@iZwz9inovbad1hkjy16akvZ tmp]#docker port 67751753d5da
如果返回空,则代表没进行端口映射。
小结
-
容器有自己的内部网络和 ip 地址,可以使用
docker inspect container-id
可以获取所有的变量 -
Docker 还可以有一个可变的网络配置
-
-p 标记可以多次使用来绑定多个端口 eg.
docker run --name tomcat -d -p 8080:8080 -p 3000:80 tomcat
查看容器
可通过如下命令,查看运行中的容器列表:
docker ps
-
CONTAINER ID
:启动时生成的容器 ID; -
IMAGE
:该容器使用的镜像; -
COMMAND
:容器启动时执行的命令; -
CREATED
:容器创建时间; -
STATUS
:当前容器状态; -
PORTS
:当前容器所使用的端口号; -
NAMES
:启动时给容器设置的名称。
另,docker ps -参数
含义:
-a
:查看所有容器,包括已停止运行的;
-q
:静默模式,只显示容器编号;
-l
:显示最近创建的容器;
-n 3
:显示最近创建的 num(此处为 3)个容器;
--no-trunc
:不截断输出,显示完整信息。
停止容器
通过以下命令来停止运行中的容器:
总结:绘上一张Kakfa架构思维大纲脑图(xmind)
其实关于Kafka,能问的问题实在是太多了,扒了几天,最终筛选出44问:基础篇17问、进阶篇15问、高级篇12问,个个直戳痛点,不知道如果你不着急看答案,又能答出几个呢?
若是对Kafka的知识还回忆不起来,不妨先看我手绘的知识总结脑图(xmind不能上传,文章里用的是图片版)进行整体架构的梳理
梳理了知识,刷完了面试,如若你还想进一步的深入学习解读kafka以及源码,那么接下来的这份《手写“kafka”》将会是个不错的选择。
-
Kafka入门
-
为什么选择Kafka
-
Kafka的安装、管理和配置
-
Kafka的集群
-
第一个Kafka程序
-
Kafka的生产者
-
Kafka的消费者
-
深入理解Kafka
-
可靠的数据传递
-
Spring和Kafka的整合
-
SpringBoot和Kafka的整合
-
Kafka实战之削峰填谷
-
数据管道和流式处理(了解即可)
通过以下命令来停止运行中的容器:
总结:绘上一张Kakfa架构思维大纲脑图(xmind)
[外链图片转存中…(img-BZEQhhbo-1714285646905)]
其实关于Kafka,能问的问题实在是太多了,扒了几天,最终筛选出44问:基础篇17问、进阶篇15问、高级篇12问,个个直戳痛点,不知道如果你不着急看答案,又能答出几个呢?
若是对Kafka的知识还回忆不起来,不妨先看我手绘的知识总结脑图(xmind不能上传,文章里用的是图片版)进行整体架构的梳理
梳理了知识,刷完了面试,如若你还想进一步的深入学习解读kafka以及源码,那么接下来的这份《手写“kafka”》将会是个不错的选择。
-
Kafka入门
-
为什么选择Kafka
-
Kafka的安装、管理和配置
-
Kafka的集群
-
第一个Kafka程序
-
Kafka的生产者
-
Kafka的消费者
-
深入理解Kafka
-
可靠的数据传递
-
Spring和Kafka的整合
-
SpringBoot和Kafka的整合
-
Kafka实战之削峰填谷
-
数据管道和流式处理(了解即可)
[外链图片转存中…(img-1v08yMLT-1714285646906)]
[外链图片转存中…(img-OAer1xcM-1714285646906)]