本文内容:
- 用处
- 核心概念
- Dockerfile文件编写
- 常用命令
- 容器实现
- 镜像实现
用处:将 应用 以及 能使应用运行起来的环境一起打包成集装箱,实现一次构建,到处运行的目标
核心概念:
从抽象角度看
镜像:文件+元数据(环境变量、端口映射等),应用运行时的快照
容器: 将应用快照恢复并运行,运行中的应用
从实现的角度来看
镜像:一堆只读层堆积成的 文件系统
容器:一堆只读层 + 一可写层 组成的文件系统
层:对文件所做的修改的集合
Dockerfile
- FROM 声明基础镜像
- RUN 创建镜像时运行的命令
- WORKDIR 默认目录
- CMD 容器启动时运行哪个命令
常用命令
- docker search 镜像名 在仓库中查找镜像
- docker pull 镜像名:Tag 拉取镜像
- docker images -a 显示所有镜像
- docker run 容器名 -p 主机端口号:容器端口号 -v 主机文件路径:容器文件路径 镜像名 重运行一个镜像的容器
- docker start 容器名 恢复容器运行
- docker exec 容器名 -it 进入后运行的命令 进入容器
- docker ps -a 显示所有容器
- docker rm -f 容器名 强制删除容器
- docker rmi -f 镜像名 强制删除镜像
容器实现
容器与虚拟机的最大区别就在于,多个容器是共享OS的,而虚拟机拥有独立的OS
容器是通过Linux的Namespace特性实现隔离的,命名空间可以让容器拥有自己整套可用的进程ID、文件系统、用户组等
容器还通过Cgroup实现了对系统资源的限制,确保了容器间的隔离性
镜像实现
镜像实现是依赖于联合文件系统,是一种分层系统,可以将多层文件以统一视角栈上,本质上镜像是由多层只读的文件层组成的,这样可以共享层,比如多个容器可以共享一个内核层的文件
运行容器时会在镜像层上加一个容器层(可写)
学习自
Docker实践(第1部分):Docker基础
http://dockone.io/article/783
Docker进阶与实战
https://blog.csdn.net/lmarster/article/details/105563254
https://www.cnblogs.com/nyh-blog/articles/11988406.html