docker

是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化

Posted by 果然 on December 30, 2021

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 cs架构

docker 的核心组件 包括:
docker client(也称docker客户端):就是docker提供命令行界面工具,是许多docker用户与docker进行交互的主要方式;
docker Daemon(服务器组件):是docker最核心的后台进程,我们将其称为守护进程,负责响应来自docker client的请求,让后将其翻译成系统调用完成容器管理操作。
docker Image:除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等);
docker Registry:是存储 Docker Image 的仓库;
docker Container:Docker 镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方。

容器启动过程:

docker initial

网络搜索的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