Docker的镜像和容器介绍(一)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: docker 提供了一个开始,打包,运行App应用的平台,把app和底层infrastructure(基础设施)隔离开来。

docker是干什么的

在介绍之前,我希望你能先记住这句话:“Docker 是一个便携的应用容器”。你可以不知道 Docker 所说的的“便携式容器”到底是什么意思,但是你必须清楚 Docker 在日常中能带来非常大的效率提升。 docker 提供了一个开始,打包,运行App应用的平台,把app和底层infrastructure(基础设施)隔离开来。

1651de46d6bb6a18_tplv-t2oaga2asx-zoom-in-crop-mark_4536_0_0_0.png

Docker的组织结构

  1. Docker Engine包括:
  • 后台进程(dockerd)
  • REST API Server
  • CLI接口(docker)

1651de665685242a_tplv-t2oaga2asx-zoom-in-crop-mark_4536_0_0_0.png

  1. 底层技术支持:
  • Namespaces:做隔离在pid,net,ipc,mnt,uts
  • Control groups: 做资源限制
  • Union file systems: Containe 和 image的分层

1651de5f02687358_tplv-t2oaga2asx-zoom-in-crop-mark_4536_0_0_0.png

什么是Image:

  • 文件和meta data的集合(root filesystem)
  • 分层的,并且每一层都可以添加改变删除文件,成为一个新的image
  • 不同的image可以共享相同的layer
  • Image本身是read-only的

16bf8d041de3c1b0_tplv-t2oaga2asx-zoom-in-crop-mark_4536_0_0_0.png

关于docker 镜像的示例代码:

##镜像的获取
docker pull [Tag]/[ImageName]
##根据dockerfile构建一个docker镜像
docker build -t(指定一个Tag) xiaopeng/hello .(当前路径下的Dovkerfile)
##查看一个镜像的分层
docker history [image ID]
##查看所有镜像
docker images
##删除镜像
docker rmi [imageID]
##把一个容器变成镜像(不安全,不建议使用,会有分层结构不明确的情况)
docker commit [cantainer] [repository[:tag]] [flags]

什么是Container

  • 通过Image创建出来的一个应用
  • 在Image layer 之上建立一个container layer(可读写)
  • 用 Java 的面向对象来表达:镜像就是类,容器就是实例
  • Image 负责app的存储和分发,Container 负责运行app

1651de94263a3043_tplv-t2oaga2asx-zoom-in-crop-mark_4536_0_0_0.png

关于docker 容器的示例代码:

## 获取docker 容器id
docker ps -aq
## 输出容器第一项的内容
docker ps -a | awk {'print$1'}
##获取status=exited的容器
docker container ls -f "status=exited" -q
## -it交互方式启动容器
docker run -it [container]
## run启动一个容器
docker run [container]
## -d后台方式启动容器
docker run -d [container]
##删除容器
docker rm [cantainerID]
##查看正在运行的容器
docker ps
##查看所有的容器
docker ps -a
复制代码

现在来创建一个简单的dokcer images and container,我们首先新建dockerfile文件,内容如下:

FROM centos  ## 引用基础镜像
RUN yum install -y vim ## 运行shell命令 
复制代码

此时我们build构建镜像的时候可以看到 running in 78a5c866d2b1

[ vagrant @ localhost docker - centos - vim ] s docker build - t xiaopeng163/centos- vim - new . Sending build context to Docker daemon 2.048kB
 Step 1/2:FR0M centos 
-->3fa822599e10
 Step 2/2: RUN yum install 
---> Running in 78a5c866d2b1l
 Loaded plugins : fastestmirror , ovl 

在build 过程中生成了一个临时的container,在临时的container里面去执行RUN yum install -y vim命令,最后build完成后就会删除这个临时的container 7f903766231e

complete !
 Removing intermediate container 178a5c866d2b1
--->7f903766231e
 Successfully built 7f903766231e

至此,我们已经学会的docker的基本应用~~~

拓展

问题:docker run之后状态总是Exited怎么解决

docker 运行的容器要求至少有一个进程在执行,如果没有进程执行则会自动退出。



目录
相关文章
|
1月前
|
缓存 安全 Linux
优化Docker镜像大小的多阶段构建实践
优化Docker镜像大小的多阶段构建实践
226 99
|
19天前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
11天前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
140 5
|
12天前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
kde
|
15天前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
kde
179 3
|
1月前
|
Java Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
81 8
|
1月前
|
Kubernetes Devops Docker
Kubernetes 和 Docker Swarm:现代 DevOps 的理想容器编排工具
本指南深入解析 Kubernetes 与 Docker Swarm 两大主流容器编排工具,涵盖安装、架构、网络、监控等核心维度,助您根据团队能力与业务需求精准选型,把握云原生时代的技术主动权。
208 1