当前位置: 首页 > news >正文

Docker的常用命令及简单使用

1、docker的常用命令

1.1、帮助命令

docker version              # 显示docker的版本信息
docker info                 # 显示docker的系统信息,包括镜像和容器的数量
docker 指令 --help         # 查看某个指令的帮助命令

可以通过docker --help查看docker常用命令,也可以在官网查看。

docker命令官网查询地址:Reference | Docker Docs

1.2、镜像命令

docker images            # 查看本机的镜像信息
docker search 镜像名      # 搜索镜像
docker pull 镜像名[:tag]    # 下载镜像,可以指定镜像的版本tag,默认是最新版本
docker rmi -f 镜像名或镜像id      # 删除镜像
docker rmi -f 镜像id1 镜像id2 镜像id3      # 删除多个镜像
docker rmi -f $(docker images -aq)    # 删除所有的镜像

1.docker images        # 查看本机的镜像信息

字段解释:

REPOSITORY:镜像的仓库源

TAG:镜像的标签

IMAGE ID:镜像的id

CREATED:镜像的创建时间

SIZE:镜像的大小

2.docker search 镜像名      # 搜索镜像

也可以通过DockerHub官网搜索:https://hub.docker.com/search?q=

3.docker pull 镜像名[:tag]      # 下载镜像,可以指定镜像的版本tag,默认是最新版本

从DockerHub上看一下mysql的版本,下载指定的版本:

4. 删除镜像

docker rmi -f 镜像名或镜像id      # 删除镜像
docker rmi -f 镜像id1 镜像id2 镜像id3      # 删除多个镜像
docker rmi -f $(docker images -aq)    # 删除所有的镜像

1.3、容器命令

docker run [可选参数] 镜像名      # 运行镜像,创建容器
docker ps [可选参数]      # 查看正在运行的容器
exit    # 容器停止并退出
Ctrl + P + Q    # 退出容器,但容器并未停止
docker rm 容器id    # 删除指定的容器,不能删除正在运行的容器,可使用-f强制删除
docker rm [-f] $(docker ps -aq)    # 删除所有的容器,-f 表示强制删除,包括运行的容器
docker ps -aq | xargs docker rm   # 删除所有的容器
docker start 容器id    # 启动容器
docker restart 容器id    # 重启容器
docker stop 容器id    # 停止当前正在运行的容器
docker kill 容器id    # 强制杀死当前容器

1.docker run [可选参数] 镜像名      # 运行镜像,创建容器

可选参数说明:

--name    # 给容器起个名字,用于区分容器

-d         # 以后台方式运行

-it         # 以交互方式运行,进入容器查看内容

-p   #指定容器端口,如-p 8080,常用的是将主机端口与容器端口进行映射,即-p 主机端口:容器端口,如-p 8090:8090。还有一种方式指定主机ip,-p 主机ip:主机端口:容器端口。

-P   # 随机指定端口

只有有了镜像,才可以创建容器,运行镜像,就是创建了一个容器。

先下载一个centos镜像:

再运行镜像,创建容器:

2.docker ps [可选参数]      # 查看正在运行的容器

可选参数说明:

-a     # 查看所有容器,包括曾经运行的容器

-n=?   # 查看最近创建的容器,例如查看最近创建的两个容器:-n=2

-q     # 只显示容器的编号CONTAINER ID

3.退出容器

exit    # 容器停止并退出

Ctrl + P + Q    # 退出容器,但容器并未停止

4.删除容器

docker rm 容器id    # 删除指定的容器,不能删除正在运行的容器,可使用-f强制删除

docker rm [-f] $(docker ps -aq)    # 删除所有的容器,-f 表示强制删除,包括运行的容器

docker ps -aq | xargs docker rm   # 删除所有的容器

5.启动和停止容器

docker start 容器id    # 启动容器

docker restart 容器id    # 重启容器

docker stop 容器id    # 停止当前正在运行的容器

docker kill 容器id    # 强制杀死当前容器

1.4、其他常用命令

docker run -d 镜像名  #容器启动后,docker发现该容器没有提供服务,就会自动停止容器
docker logs -tf --tail 10 容器id    # 查看指定容器的日志信息
docker top 容器id      # 查看容器中进程信息
docker inspect 容器id   # 查看容器的元数据
docker exec -it 容器id /bin/bash    # 进入当前正在运行的容器,开启一个新的终端
docker attach 容器id    # 进入容器,并使用正在运行的终端,不会开启新的终端
docker cp 容器id:容器内路径 主机路径
docker stats 容器id    # 查看容器占用CPU和内存信息

1.后台启动容器

docker run -d 镜像名  #容器启动后,docker发现该容器没有提供服务,就会自动停止容器

2.查看容器日志

docker logs -tf --tail 10 容器id    # 查看指定容器的日志信息

参数说明:--tail 10 表示查看10条日志,不加tail表示查看所有日志。

3.查看容器中进程信息

docker top 容器id      # 查看容器中进程信息

docker inspect 容器id   # 查看容器的元数据

4.进入当前正在运行的容器

通常容器都是以后台方式运行的,如果需要进入容器,修改一些配置,则可以使用docker exec命令。

docker exec -it 容器id /bin/bash    # 进入当前正在运行的容器,开启一个新的终端

docker attach 容器id    # 进入容器,并使用正在运行的终端,不会开启新的终端

5、将容器内的文件复制到主机上

docker cp 容器id:容器内路径 主机路径

6、docker stats 容器id    # 查看容器占用CPU和内存信息

1.5、命令小结

练习:使用docker安装nginx、tomcat

练习1:使用docker安装nginx

1、搜索nginx镜像,docker search nginx,建议到DockerHub官网上搜索,可以看到版本

2、下载nginx镜像,docker pull nginx[:tag]

3、运行nginx镜像,启动容器,docker run -d --name nginx01 -p 8090:80 nginx

启动命令参数说明:-d 以后台方式运行,--name 给容器命名,-p 8090:80将主机端口8090与容器端口80进行映射。

端口映射:

在浏览器上输入虚拟机ip:主机映射端口号,并且防火墙开通主机映射端口号。

练习2:使用docker部署tomcat

docker run -it --rm tomcat:9.0

--rm 表示容器用完退出之后就删除,一般用来测试,不建议这样使用。

练习3:使用docker安装elasticsearch

docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.7.0

由于elasticsearch运行非常耗内存,所以通过-e ES_JAVA_OPTS参数限制其占用内存大小。

启动elasticsearch容器之后,通过curl localhost:9200进行测试是否启动成功。

ElasticSearch启动时,会占用两个端口9200和9300。

9200 是ES节点与外部通讯使用的端口。它是http协议的RESTful接口,各种CRUD操作都是走的该端口。

9300是ES节点之间通讯使用的端口。它是tcp通讯端口,集群间和TCPclient都用此接口。

练习4:使用docker安装portainer可视化界面

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

2、docker镜像讲解

镜像是什么?

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件。

所有的应用,直接打包docker镜像,就可以直接跑起来!

得到镜像的方式:

·从远程仓库下载

·朋友拷贝给你

·自己制作一个镜像 DockerFile

2.1、docker镜像加载原理

1. UnionFS(联合文件系统)

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

2. Docker镜像加载原理

docker镜像实际由一层一层的文件系统(UnionFS)组成,基础的镜像都会包含bootfs和rootfs。

bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux则启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs(root file system)在bootfs之上,包含的就是典型Linux系统中的/dev、/proc、/bin、/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu、Centos等。

[root@localhost ~]# docker images centos
REPOSITORY  TAG   IMAGE ID     CREATED     SIZE
centos         latest   470671670cac  3 months ago   237MB

平时安装虚拟机的centos都是好几个GB,为什么使用Docker拉取的镜像才200MB?

这是因为对于一个精简的OS,rootfs可以很小,只需要包含最基本的命令、工具和程序就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs就可以了。由此可见对于不同的linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。

所有的Docker镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层。

举一个简单的例子,假如基于Ubuntu Linux 16.04创建一个新的镜像,这就是新镜像的第一层;如果在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层。该镜像当前已经包含3个镜像层,如下图所示(这只是一个用于演示的简单例子)。

在添加额外的镜像层的同时,镜像始终保持是当前所有镜像层的组合,理解这一点非常重要。下图中举了一个简单的例子,每个镜像层包含3个文件,而镜像包含了来自两个镜像层的6个文件。

Docker镜像的特点:

Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!这一层就是通常说的容器层,容器之下的都叫镜像层!

2.2、提交镜像

提交容器成为一个新的镜像:

docker commit -m= "描述信息" -a= "作者" 容器id 目标镜像名:[tag]

下面首先通过默认的tomcat镜像启动一个容器,接着修改容器中的webapps,然后将修改后的容器提交成为一个新的tomcat镜像。

http://www.dtcms.com/a/356536.html

相关文章:

  • More Effective C++ 条款15:了解异常处理(exception handling)的成本
  • 判断语句中std::cin隐式转换为bool--重载operator bool()
  • Point Transformer V3(PTv3)【3:上采样unpooling】
  • 【C++详解】C++11(一) 列表初始化、右值引⽤和移动语义
  • 【查看css技巧】hover或者其他方式触发出来的样式如何查看
  • Linux网络基础1(一)之计算机网络背景
  • Java常用工具类
  • python 日常学习记录
  • rust打包增加图标
  • 中国国际商会副秘书长徐梁一行到访国联股份
  • Daily Review
  • 查看docker容器内部的环境变量并向docker容器内部添加新的环境变量
  • Java试题-选择题(21)
  • linux学习-数据库
  • 2025年9月计算机二级C++语言程序设计——选择题打卡Day10
  • 2025楼宇自控DDC全面解析
  • WPF+IOC学习记录
  • 使用 Wheel Variants 简化 CUDA 加速 Python 安装和打包工作流
  • mysql中表的约束
  • AI供应链优化+AI门店排班:蜜雪冰城降本20%、瑞幸提效的AI商业落地实战
  • SQL优化--OR
  • springboot中循环依赖的解决方法-使用反射
  • linux mysql数据备份
  • 零基础上手:Cursor + MCP 爬取 YouTube 视频数据
  • 政策技术双轮驱动 | 新一代工业软件供需对接会·顺德站成功举办
  • 深入解析Nginx核心模块
  • npm使用的环境变量及其用法
  • 专业的储存数据的结构:数据库
  • 【开题答辩全过程】以 基于Python的美食点评系统为例,包含答辩的问题和答案
  • iOS混淆工具实战 电商类 App 的数据与交易安全防护