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)


相关文章
|
12天前
|
安全 Docker 容器
|
11天前
|
存储 监控 安全
|
12天前
|
缓存 监控 持续交付
|
1天前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
10 2
|
2天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
8 1
|
4天前
|
存储 Java 开发者
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
本文分享了如何通过 jlink 和 jdeps 工具将 Java 基础 Docker 镜像从 674MB 优化至 58MB 的经验。首先介绍了选择合适的基础镜像的重要性,然后详细讲解了使用 jlink 构建自定义 JRE 镜像的方法,并通过 jdeps 自动化模块依赖分析,最终实现了镜像的大幅缩减。此外,文章还提供了实用的 .dockerignore 文件技巧和选择安全、兼容的基础镜像的建议,帮助开发者提升镜像优化的效果。
|
8天前
|
存储 缓存 Java
Java应用瘦身记:Docker镜像从674MB优化至58MB的实践指南
【10月更文挑战第22天】 在容器化时代,Docker镜像的大小直接影响到应用的部署速度和运行效率。一个轻量级的Docker镜像可以减少存储成本、加快启动时间,并提高资源利用率。本文将分享如何将一个Java基础Docker镜像从674MB缩减到58MB的实践经验。
21 1
|
11天前
|
存储 关系型数据库 MySQL
|
关系型数据库 MySQL 应用服务中间件
docker 常用命令总结
docker 常用命令总结
|
Docker 容器
docker常用命令总结大全
docker常用命令总结大全
158 0