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引擎中运行容器有哪些?

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

(1)查看正在运行的容器

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

#注意:可以映射多个端口号 -p 15672:15672 -pd672:5672
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 命令手册

命令描述
docker attach连接到正在运行中的容器
docker build通过Dockerfile构建一个镜像
docker builder管理builds
docker checkpoint管理checkpoints
docker commit从容器创建一个新的镜像
docker config管理 Docker 配置
docker container管理容器(一般都会省略container,比如docker container ps ==> docker ps)
docker context管理 contexts
docker cp用于容器与主机之间的数据拷贝
docker create创建一个新容器
docker diff检查容器里文件结构的变化
docker events从服务器获取实时事件
docker exec在运行的容器中执行命令
docker export将文件系统作为一个tar归档文件导出
docker history查看指定镜像的创建历史
docker image管理镜像
docker images列出所有镜像
docker import从归档文件中创建镜像
docker info示 Docker 系统信息,包括镜像和容器数
docker inspect获取容器/镜像的元数据
docker kill杀掉一个运行中的容器
docker load从归档文件中或STDIN中加载一个镜像
docker login登录 Docker
docker logout登出 Docker
docker logs获取容器日志
docker manifest管理显示镜像 manifest 信息
docker network管理网络
docker node管理Swarm节点
docker pause暂停容器进程
docker plugin管理插件
docker port显示容器端口映射关系
docker ps显示容器列表
docker pull从镜像仓库中拉取或者更新指定镜像
docker push将本地的镜像上传到镜像仓库
docker rename重命名容器
docker restart重启容器
docker rm删除容器
docker rmi删除镜像
docker run在一个新容器中运行命令(创建并进入容器)
docker save将指定镜像保存成 tar 归档文件
docker search在公共仓库中搜索镜像
docker secret管理 Docker secrets
docker service管理Docker服务
docker stack管理 Docker stacks
docker start启动容器
docker statsDisplay a live stream of container(s) resource usage statistics
docker stop停止容器
docker swarm管理 Swarm
docker system管理 Docker
docker tag标记本地镜像,将其归入某一仓库
docker top查看容器中运行的进程信息,支持 ps 命令参数
docker trust管理Docker镜像上的trust
docker unpause取消容器暂停
docker update更新容器配置
docker version显示 Docker 版本信息
docker volume管理Docker卷
docker wait阻塞运行直到容器停止,然后打印出它的退出代码

五、后续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)

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小王java

学习java的路上,加油!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值