Docker的理解和基本命令详解

发布时间 - 2026-01-11 01:06:35    点击率:

如何通俗解释D ocker是什么?

Docker思想来自于集装箱,集装箱解决了什么问题呢?比如,在一艘大船上,要把各种各样的货物要整理起来,集装箱(Docker)就可以做到,并且相互间不会影响。就不需要指定运输的船了(这个船运吃的那个船运穿的)。只要把货物装在集装箱里封装好,就可以用一艘大船把他们都运走。

1.Docker就是类似的理念。云计算是运输船,Docker就是集装箱。

1.不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成一些冲突。比如IIS和Apache访问端口冲突。这个时候你就要隔离.net开发的网站和php开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高。docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小,小就意味着省钱了。

2.你开发软件的时候用的是Ubuntu,但是运维管理的都是centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,centos不支持,在转移的过程当中运维就得想办法解决这样的问题。这时候要是有docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。

3.在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。
总之docker就是集装箱原理。

4.docker就是用来存放应用的一个容器

容器管理

# docker run -it –name vm1 ubuntu bash //创建容器 
# docker ps -a //查看容器状态 
# docker attach vm1 //链接容器 
# docker top vm1 //查看容器进程
[root@foundation22 ~]# docker run -it –name vm1 ubuntu 
root@b6e503aec1e3:/# [root@foundation17 ~]# 
//////用ubuntu这个镜像生成一个名为vm1的容器///
[root@foundation22 ~]# docker run -it ubuntu //未制定容器名称 
[root@foundation22 ~]# docker ps -a 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
c2c94bd4ef22 ubuntu “/bin/bash” 2 minutes ago Up 2 minutes silly_curie 
a2798a01f075 ubuntu “/bin/bash” 4 minutes ago Up 8 seconds vm1 
[root@foundation22 ~]# docker stop c2c94bd4ef22 //结束一个容器(用进程id结束) 
c2c94bd4ef22 
[root@foundation22 ~]# docker rm c2c94bd4ef22 //删除容器(用进程id删除) 
c2c94bd4ef22 
[root@foundation22 ~]# docker ps -a 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
a2798a01f075 ubuntu “/bin/bash” 5 minutes ago Up About a minute vm1 
root@bd4961841626:/# [root@foundation17 ~]# docker attach vm1
root@bd4961841626:/# ls 
bin dev home lib64 mnt proc run srv tmp var 
boot etc lib media opt root sbin sys usr 
root@bd4961841626:/# touch file{1..5} 
root@bd4961841626:/# ls 
bin dev file1 file3 file5 lib media opt root sbin sys usr 
boot etc file2 file4 home lib64 mnt proc run srv tmp var
[root@foundation22 ~]# docker pause vm1 //暂停容器 
vm1 
[root@foundation22 ~]# docker ps -a 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
bd4961841626 ubuntu “/bin/bash” 2 minutes ago Up 41 seconds (Paused) vm1 
[root@foundation22 ~]# docker unpause vm1 //启动容器 
vm1 
[root@foundation22 ~]# docker ps -a 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
bd4961841626 ubuntu “/bin/bash” 3 minutes ago Up About a minute vm1
[root@foundation22 ~]# docker run -it –name vm2 ubuntu 
root@aac0080d0606:/# [root@foundation17 ~]# docker run -it –name vm3 ubuntu 
root@13e9f0e36ea0:/# [root@foundation17 ~]# docker run -it –name vm4 ubuntu 
root@2e4adfc6ea87:/# [root@foundation17 ~]# docker run -it –name vm5 ubuntu 
root@cf98619960fc:/# [root@foundation17 ~]# 
[root@foundation22 ~]# docker ps -aq 
cf98619960fc 
2e4adfc6ea87 
13e9f0e36ea0 
aac0080d0606 
bd4961841626 
[root@foundation22 ~]# docker stop docker ps -aq 
cf98619960fc 
2e4adfc6ea87 
13e9f0e36ea0 
aac0080d0606 
bd4961841626 

容器内的数据提交:(docker commit vm3 ubuntu//提交vm3容器里面的数据到ubuntu镜像放到仓库)

[root@foundation22 ~]# docker commit vm3 ubuntu 
sha256:ca9b1aa4a9aee738f632999bfad3baf5bda20b5a8b51de82b8f288a922cb4a66 
[root@foundation22~]# docker stop vm3 
vm3 
[root@foundation22 ~]# docker rm vm3 
vm3 
[root@foundation22 ~]# docker run -it –name vm4 ubuntu 
root@6cb52f07dcde:/# ls 
bin dev file1 file3 file5 lib media opt root sbin sys usr 
boot etc file2 file4 home lib64 mnt proc run srv tmp var

提交的内容是在镜像里面的内容上加一层(只读):

[root@foundation22 ~]# docker run -it –name vm1 ubuntu 
root@59026e7f5104:/# ls 
bin dev file1 file3 file5 lib media opt root sbin sys usr 
boot etc file2 file4 home lib64 mnt proc run srv tmp var 
root@59026e7f5104:/# rm -fr file* 
root@59026e7f5104:/# ls 
bin dev home lib64 mnt proc run srv tmp var 
boot etc lib media opt root sbin sys usr 
root@59026e7f5104:/# exit 
exit 
[root@foundation22 ~]# docker commit vm1 ubuntu 
sha256:734d5eba88071735584a1c22519d9000d133b531df3dd7b56e6bbd0dca2abdd3
[root@foundation22 ~]# docker run -it –name vm8 ubuntu 
root@e05171f7c0c7:/# ls 
bin dev home lib64 mnt proc run srv tmp var 
boot etc lib media opt root sbin sys usr
[root@foundation22 ~]# docker history ubuntu //查看镜像的层(最多不能超过127层) 
IMAGE CREATED CREATED BY SIZE COMMENT 
734d5eba8807 29 minutes ago /bin/bash 52 B 
ca9b1aa4a9ae 51 minutes ago /bin/bash 28 B 
07c86167cdc4 14 months ago /bin/sh -c #(nop) CMD [“/bin/bash”] 0 B 
220d2912ab1d 14 months ago /bin/sh -c sed -i ‘s/^#\s*(deb.*universe)$/ 1.895 kB 
cc77a2e3d72c 14 months ago /bin/sh -c echo ‘#!/bin/sh' > /usr/sbin/polic 194.5 kB 
c8fa7cdceff3 14 months ago /bin/sh -c #(nop) ADD file:b9504126dc55908988 187.7 MB 

////vm1里面新建文件后,提交,vm1里面的文件提交到ubuntu之后,ubuntu里面就有记录,再用镜像ubuntu建立容器,容器内部包含有vm1里面的文件。如果删除vm1里面新建的文件,再次提交,ubuntu里面的内容就会被覆盖掉。再次用ubuntu建立容器,新建立的容器不就没有最早vm1里面建立的文件。

复制文件到容器里面需要制定路径(即容器源)

[root@foundation22~]# docker cp /etc/passwd vm1 
must specify at least one container source 
[root@foundation22 ~]# docker cp /etc/passwd vm1:/
[root@foundation22 ~]# docker export -o vm2.tar vm1 //导出到当前目录,并命名为vm2.tar
[root@foundation22 ~]# docker save -o ubuntu.tar ubuntu:v1 // 将ubuntu:v1镜像制成 ubuntu:v1文件
[root@foundation22 ~]# docker run -d –name web -p 8000:80 nginx 
3cca467e17717b7dd09dd997d7df4e2239e8505be8f0fc79ec11804c5365103d 
[root@foundation22 ~]# docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
3cca467e1771 nginx “nginx -g ‘daemon off” 15 seconds ago Up 11 seconds 443/tcp, 0.0.0.0:8000->80/tcp web 
[root@foundation22 ~]# netstat -antlp | grep :8000 
tcp6 0 0 :::8000 :::* LISTEN 16093/docker-proxy 
[root@foundation22 ~]# docker diff vm1 
C /root 
C /root/.bash_history 
A /passwd 
D /file2 
D /file5 
D /file1 
D /file3 
D /file4

D:表示删除
A:表示增加add

以上所述是小编给大家介绍的Docker的理解和基本命令详解,希望对大家有所帮助!


# docker  # 的理解和命令  # 命令  # Docker 清理命令集锦  # 详解Dockerfile 中的 COPY 与 ADD 命令  # Docker run 命令的使用方法详解  # Docker常用的清除容器镜像命令小结  # Docker 修改文件是否需要重启(命令详解)  # docker常用命令操作方法  # 常用的Docker基本命令及用法汇总  # Docker 网络命令详解  # docker常用命令整理汇总(新手必备!)  # 镜像  # 就会  # 就不  # 要把  # 一艘  # 就可以  # 的是  # 都是  # 器上  # 如果你  # 是在  # 会有  # 有个  # 最多  # 就有  # 还会  # 可以用  # 很久  # 较高  # 我们可以 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在阿里云购买域名并搭建网站?  Laravel如何生成URL和重定向?(路由助手函数)  如何快速生成凡客建站的专业级图册?  手机软键盘弹出时影响布局的解决方法  如何在香港服务器上快速搭建免备案网站?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  Swift中swift中的switch 语句  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  如何在阿里云ECS服务器部署织梦CMS网站?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  Java类加载基本过程详细介绍  如何在腾讯云免费申请建站?  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  微信小程序 scroll-view组件实现列表页实例代码  如何有效防御Web建站篡改攻击?  高性价比服务器租赁——企业级配置与24小时运维服务  C++时间戳转换成日期时间的步骤和示例代码  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  无锡营销型网站制作公司,无锡网选车牌流程?  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  微信小程序 五星评分(包括半颗星评分)实例代码  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  Laravel定时任务怎么设置_Laravel Crontab调度器配置  香港服务器WordPress建站指南:SEO优化与高效部署策略  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  中国移动官方网站首页入口 中国移动官网网页登录  如何在万网主机上快速搭建网站?  Laravel Docker环境搭建教程_Laravel Sail使用指南  Laravel如何使用Blade模板引擎?(完整语法和示例)  如何快速搭建二级域名独立网站?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  潮流网站制作头像软件下载,适合母子的网名有哪些?  java ZXing生成二维码及条码实例分享  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  如何续费美橙建站之星域名及服务?  教你用AI将一段旋律扩展成一首完整的曲子  Linux网络带宽限制_tc配置实践解析【教程】  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  大连 网站制作,大连天途有线官网?  如何快速搭建个人网站并优化SEO?