Docker 是什么?
在理解docker之前,首先需要区分两个概念:容器和虚拟机。
每台虚拟机都需要自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用;
容器技术是实现操作系统虚拟化的一种途径,可以让你在资源受到隔离的进程中运行应用程序及其依赖关系。
docker 是一个开源的应用容器引擎,基于Go语言并遵从 Apache2.0协议开源。
docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 linux 机器上,也可以实现虚拟化。
docker 优点
能够将应用程序与基础架构分开,从而可以快速交付软件。
- 快速,一致地交付应用程序
- 响应式部署和扩展
docker 是基于容器的平台,允许高度可移植的工作负载。 - 在同一个硬件上运行更多工作负载
镜像(image)与容器(container)
docker 容器通过 docker 镜像来创建的。类比java中的类:镜像=类,容器=对象实例。
简单而言,镜像是多层只读层的同一视角,而容器是在镜像的基础上加了一个读写层的同一视角。即容器=镜像+读写层。
docker 的基本命令
docker images 查询已下载镜像
docker search 在仓库查询镜像
docker ps 查看运行的容器
docker ps -a 查看全部的运行容器
docker tag image:tag tagname 标记本地镜像,将其归入某一仓库
docker rm $id/name 删除容器
docker rmi $name 删除本地镜像
docker logs -f $name 查询日志
docker port$name 查看端口映射情况
docker puull $name 向仓库查询镜像
docker login $option $server 登录docker镜像,server为空则docker官网镜像
docker logout 退出登录
docker run option $name $command 创建容器启动并执行命令
docker execoptions $name $command 容器执行命令
Docker 的架构
docker 使用C/S 结构,即客户端/服务器体系结构。docker客户端与docker服务器进行交互,docker服务端负责构建、运行和分发docker镜像。
docker 客户端和服务端可以运行在一台机器上,也可以通过 RESTful、stock 或网络接口与远程docker服务端进行通信。
docker 的核心组件 包括:
docker client(也称docker客户端):就是docker提供命令行界面工具,是许多docker用户与docker进行交互的主要方式;
docker Daemon(服务器组件):是docker最核心的后台进程,我们将其称为守护进程,负责响应来自docker client的请求,让后将其翻译成系统调用完成容器管理操作。
docker Image:除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等);
docker Registry:是存储 Docker Image 的仓库;
docker Container:Docker 镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方。
容器启动过程:
网络搜索的docker图。
Dockerfile 是什么
Dockerfile 是自动构建 Docker 镜像的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像。
一般来说,可以将 dockerfile 分为四个部分:
- 基础镜像(父镜像)信息指令 FROM
- 维护者信息指令 MAINTAINER
- 镜像操作指令 RUN/ENV/ADD/WORKDIR等
- 容器启动指令 CMD/ENTRYPOINT/USER等
创建成功后,构建镜像并启动容器:
docker build -t angelkitty/nginx_web:v1 .
docker run --name nginx_web -d -p8080:80angelkitty/nginx_web:v1