Docker常用命令总结及镜像原理

简介: 🍅程序员小王的博客:程序员小王的博客🍅 欢迎点赞 👍 收藏 ⭐留言 📝🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕🍅Docker博客参考资料:Docker官网,中文网,编程不良人等

一、docker中镜像相关操作

1、重要概念


仓库 hub: docker在全世界范围内维护一个仓库 用来存储镜像 官方镜像 个人开发者镜像


镜像 image: 一个镜像代表一个软件安装包 mysql tomcat


容器 container: 一个镜像运行一次就会产生一个容器 一个容器认为是一个软件服务 tomcat容器 mysql容器


2、辅助命令

    1. docker version  --------------------------  查看docker的信息
    2. docker info      --------------------------  查看更详细的信息
    3. docker --help    --------------------------  帮助命令


3、镜像相关命令


(1)查看当前本地仓库中有哪些镜像

#列出指定镜像名称信息
docker images tomcat(镜像名称)
docker images -q(镜像id) 镜像名 
#列出本地所有镜像
docker image ls 或者docker images


结果解释


REPOSITORY(镜像名称)    TAG(版本)       IMAGE ID(镜像ID)       CREATED(镜像创建时间)        SIZE(镜像大小)
hello-world            latest       feb5d9fea6a5              6 months ago             13.3kB

(2)下载一个镜像

docker pull 镜像名称
#获取最新版本
  docker pull redis ==> docker pull redis:latest(最新版本)
# 获取指定版本
docker pull tomcat:8.5.31  


(3)搜索镜像


docker search 镜像名
docker search tomcat ==>只能查看当前镜像是否存在 不能列出版本
docker search tomcat --no-trunc    ==>显示完整的镜像信息


(3)删除镜像

# 删除镜像
docker image rm  镜像名:tag|镜像id  
docker image rm tomcat:8.5.31
#强制删除
 docker image rm  -f 镜像名:tag|镜像id 
 #批量删除  
 docker image rm  -f ${docker images tomcat -q}      

 


二、Docker常用命令

1、操作命令的格式

docker 命令[选项]

2、如何查看docker引擎中运行容器有哪些?

1.   docker ps          --------------------------  列出所有正在运行的容器
2.   -a      正在运行的和历史运行过的容器
3.   -q      静默模式,只显示容器编号
docker ps


(2)查看所有容器(运行停止)

docker ps -a

(3)查看所有容器ID

docker ps -aq


3、如何运行一个容器

(1)简单运行tomcat镜像

#注意:这种方式运行容器内无法访问
docker run tomcat:tag
docker run tomcat: latest(latest是最新的意思)


(2)运行tomcat容器,同时设置容器与主机端口的映射关系 -p

1. #注意:可以映射多个端口号 -p 15672:15672 -pd672:5672
2. docker run -p 8080:8080 tomcat:latest


(3)运行tomcat,开发端口映射,后台启动该服务 -d

docker run -p 8082:8080 -d tomcat:latest

(4)运行tomcat,开发端口映射,后台启动该服务,指定容器名称 —name 容器名称

docker run -d -p 8083:8080 --name tomcat01 tomcat:latest


4、停止,运行,重启,暂停,恢复容器

 1.  docker start   容器名字或者容器id  --------------- 开启容器
 2.  docker restart 容器名或者容器id    --------------- 重启容器
 3.  docker stop  容器名或者容器id       ------------------ 正常停止容器运行
 4.  docker kill  容器名或者容器id      ------------------ 立即停止容器运行
 5.  docker pause|unpause 容器名或容器id ----------------- 暂停和恢复容器

5、杀死容器、杀死容器

docker kill id|name


6、删除容器

#删除已经停止运行的容器
docker rm 容器id和容器名  
#强制删除容器,即使是运行的容器
docker rm -f 容器id和容器名  
#删除所有容器   
docker rm -f $(docker ps -aq)   


7、查看容器内部日志

docker logs 容器id|name
#实时监控服务器内服务的日志
docker logs -f 容器id|name


8、进入容器内部

docker exec -it(交互模式) 容器id|name bash
#退出容器
exit


9、容器与宿主机操作系统之间文件拷贝

#如何将容器中指定文件和目录拷贝到宿主机:
 docker cp 容器id:容器文件或目录 主机那个目录
 #如何将主机中指定文件和目录拷贝到容器内:
 docker cp 主机文件和目录 容器id:容器中目录

(1)将tomcat容器里面的server.xml复制一份到/usr/apps下

docker cp 7a42964beeb6:/usr/local/tomcat/conf/server.xml /usr/apps    

 


(2)将linux中fruit这个项目war包移动到tomcat的webapps下

#1.fruit.war这个项目的位置
/usr/apache-tomcat-8.5.46/webapps
#2.移动到tomcat webapps
docker cp /usr/apache-tomcat-8.5.46/webapps/fruit.war 7a42964beeb6:/usr/local/tomcat/webapps/ 



10、如何部署一个web项目 war包项目

1. 将test.war上传到linux服务器
2. 通过docker cp命令将test.war复制到tomcat的webapps目录中即可
3.使用ip端口进行测试访问即可


11、查看容器内运行进程

docker top 容器id|name

12、查看容器内细节指令

docker inspect 容器id|name

13、容器数据卷机制

#数据卷 Data Volume
1. 作用:用来实现容器中数据和宿主机中数据进行映射的
2. 注意:**数据卷必须在容器第一次启动时设置**
3. 使用: docker run -v ...

(1)使用绝对路径设置数据卷

docker run -v 宿主机绝对路径:容器内路径:ro ...
#ro:ready only 如果设置数据卷时指定ro ,代表日后容器内路径是只读的
注意:这种方式会将容器路径的原始内容全部清空,始终以宿主机路径为主

(2)使用别名方式设置数据卷

docker run -v aa:/usr/local/tomcat/webapps ...
#aa是是什么?
1.aa代表docker数据卷中的别名 注意:这个别名如果存在docker直接使用
2.使用别名方式保留容器路径原始内容,前提别名对应路径不能存在内容
注意:docker根据别名创建目录默认在:/var/lib/docker/volumes/


14、容器卷应用场景

注意:凡是在容器内持有重要数据的镜像在运行时都需要指定数据卷


15、将容器打包成新的镜像

(1)为什么要将容器打包成新的镜像?


因为容器是可读可写的,可以对容器进行定制比如maven可以定制settings.xml。让他从阿里云下载jar包,将容器打包成新的镜像之后,日后基于这个镜像运行成容器,这个新容器存在原来定制的特性


(2)将容器打包成一个新的镜像

docker commit -m "deploy test project in tomcat" -a "wanghengjie" 容器id|name 镜像名:版本

16、镜像的备份与恢复


#镜像备份
docker save 镜像名:Tag -o  (镜像名-tag).tar
例:docker save tomcat:80 -o tomcat-8.0.tar
#恢复镜像
docker load -i tomcat-8.0.tar

三、Docker镜像原理

1、镜像是什么

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


2、为什么一个镜像那么大



镜像就是花卷


UnionFS(联合文件系统): Union文件系统是一种分层,轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。这种文件系统特性:就是一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录 。


内核空间是 kernel,Linux 刚启动时会加载 bootfs 文件系统,之后 bootfs 会被卸载掉。 用户空间的文件系统是 rootfs,包含我们熟悉的 /dev, /proc, /bin 等目录。 对于 base 镜像来说,底层直接用 Host 的 kernel,自己只需要提供 rootfs 就行了。 而对于一个精简的 OS,rootfs 可以很小,只需要包括最基本的命令、工具和程序库就可以了。相比其他 Linux 发行版,CentOS 的 rootfs 已经算臃肿的了,alpine 还不到 10MB。 我们平时安装的 CentOS 除了 rootfs 还会选装很多软件、服务、图形桌面等,需要好几个 GB 就不足为奇了。


3、Docker镜像原理

docker的镜像实际是由一层一层的文件系统组成。 UnionFS 联合文件系统


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


我们平时安装进虚拟机的centos都有1到几个GB,为什么docker这里才200MB?


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



4、为什么docker镜像要采用这种分层结构呢

最大的一个好处就是资源共享


比如:有多个镜像都是从相同的base镜像构建而来的,那么宿主机只需在磁盘中保存一份base镜像。同时内存中也只需要加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。Docker镜像都是只读的。当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称为容器层,容器层之下都叫镜像层。


四、Docker 命令手册

image.png


五、后续Docker相关博客内容

Docker基础篇(2022/3/29,已经发布)


Docker常用命令总结及镜像原理(2022/3/29)


Docker安装mysql,Redis,nginx,tomcat,mongoDB,elasticSearch软件攻略(2022/3/30)


DockerFile相关命令及构建部署SpringBoot项目(2022/3/30)


Docker的网络配置和数据卷配置(2022/3/31)


Docker Compose文件的使用攻略(2022/4/1)


Docker可视化工具使用(2022/4/2)


相关文章
|
17天前
|
JavaScript 前端开发 数据安全/隐私保护
阿里云云效操作报错合集之流水线中获取不到CI_COMMIT_REF_NAME变量,导致docker镜像打包失败,什么原因
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
3天前
|
存储 缓存 安全
Docker 如何管理镜像?
【7月更文挑战第11天】
14 0
Docker 如何管理镜像?
|
5天前
|
Java 应用服务中间件 持续交付
Java面试题:简述Docker等容器化技术的原理及其在Java应用部署中的作用。
Java面试题:简述Docker等容器化技术的原理及其在Java应用部署中的作用。
12 0
|
10天前
|
Linux Docker 容器
Docker02--搭建Linux环境,配置Docker,docker images无法访问,因为docker没有启动,阿里云镜像加速器免费的
Docker02--搭建Linux环境,配置Docker,docker images无法访问,因为docker没有启动,阿里云镜像加速器免费的
|
11天前
|
缓存 Ubuntu Docker
怎么减小Docker的镜像体积?
**Docker 镜像优化目标:**提升构建速度、减小镜像大小、增强安全性和效率。**技巧:**1) 选择轻量级基础镜像(如Alpine、Ubuntu Minimal);2) 使用多阶段构建,分阶段复制文件和执行操作;3) 利用缓存加速构建,避免不必要的重复;4) 合并`RUN`指令减少镜像层数。这些方法能显著优化镜像,提高性能和节省存储空间。
|
13天前
|
NoSQL Ubuntu Redis
docker(三):常用命令
docker(三):常用命令
27 0
|
17天前
|
Docker 容器
Docker常用命令Top20
Docker常用命令Top20
15 0
|
17天前
|
运维 Serverless 文件存储
函数计算产品使用问题之在利用Docker镜像部署应用时,容器内的应用如何能访问函数计算配置的NAS挂载
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
2月前
|
关系型数据库 MySQL Go
Docker从入门到精通:Docker镜像相关命令学习
本文介绍了Docker中管理镜像的基本命令:`docker images`用于查看镜像列表,`docker search`从Docker Hub搜索镜像,`docker rmi`删除镜像,`docker tag`则用于标记和重命名镜像。通过这些命令,用户能有效管理自己的Docker镜像资源。
41 1
|
2月前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs <container_name>` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
113 0