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)


相关文章
|
3天前
|
JSON JavaScript 开发者
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
【8月更文挑战第7天】Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
|
7天前
|
Docker 容器
Docker 入门常用命令
Docker 入门常用命令
14 1
|
1天前
|
弹性计算 Java Maven
阿里云云效操作报错合集之在构建Docker镜像时提示拉取次数达到限制,该怎么解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
4天前
|
存储 Shell API
G6VP 与 GraphScope部署问题之拉取并启动 GraphScope 的 Docker 镜像如何解决
G6VP 与 GraphScope部署问题之拉取并启动 GraphScope 的 Docker 镜像如何解决
|
5天前
|
NoSQL Linux MongoDB
Docker 解析:使用 Dockerfile 自动构建镜像
Docker 解析:使用 Dockerfile 自动构建镜像
10 0
|
5天前
|
Kubernetes jenkins 持续交付
Jenkins + SVN/Git + Maven + Docker + 阿里云镜像 + Kubernetes(K8S)
Jenkins + SVN/Git + Maven + Docker + 阿里云镜像 + Kubernetes(K8S)
10 0
|
6天前
|
Linux Docker Windows
Windows——Docker拉取Windows Server镜像
Windows——Docker拉取Windows Server镜像
14 0
|
7天前
|
Java Linux Docker
CentOS7 Docker 安装,配置国内镜像
CentOS7 Docker 安装,配置国内镜像
209 1
|
关系型数据库 MySQL 应用服务中间件
docker 常用命令总结
docker 常用命令总结
|
Docker 容器
docker常用命令总结大全
docker常用命令总结大全
149 0