Docker 可谓是开启了容器化技术的新时代,现在无论大中小公司基本上都对容器化技术有不同程度的尝试,或是已经进行了大量容器化的改造。Docker 提供了一个开始打包、运行的 App 的平台,把 App0和底层 Infrastructure(基础设施)隔离开来。
在本场 Chat 中,会讲到如下内容:
- Docker 是干什么的
- Docker 的组织结构
- 什么是 Image
- 什么是 Container
docker 提供了一个开始,打包,运行的 app 的平台,把 app 和底层 infrastructure(基础设施)隔离开来。
Docker Engine 包括: * 后台进程(dockerd) * REST API Server * CLI 接口(docker)
底层技术支持:
* Namespaces:做隔离在 pid,net,ipc,mnt,uts* Control groups: 做资源限制* Union file systems: Containe 和 image 的分层
- 文件和 meta data 的集合(root filesystem)
- 分层的,并且每一层都可以添加改变删除文件,成为一个新的 image
- 不同的 image 可以共享相同的 layer
- Image 本身是 read-only 的
关于 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 创建(copy)
- 在 Image layer 之上建立一个 container layer(可读写)
- 类比面向对象:类和实例
- Image 负责 app 的存储和分发,Container 负责运行 app
关于 docker 容器的示例代码:
##获取 docker 容器 iddocker ps -aqdocker container -aq##获取符合条件的容器docker ps -a | awk {'print$1'}docker container ls -f "status=exited" -q##后台交互启动容器docker run -it [container]##启动一个容器docker run [container]##后台方式启动容器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。
在 build 过程中 生成了一个新的临时的 container,在临时的新的 container 里面去执行 shell 命令,最后 build 完成后就会删除这个临时的 container。
问题:docker run 之后状态总是 Exited 怎么解决
至此,我们已经学会的 docker 的基本应用。
本文首发于 GitChat,未经授权不得转载,转载需与 GitChat 联系。
阅读全文: http://gitbook.cn/gitchat/activity/5d79149ddfee9e67557f27ab
您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。