Docker简介
Docker 是一个开源的应用容器引擎,让开发者能够打包他们的应用以及依赖包到一个可移植的镜像中,而后发布到任何流行的不一样操做系统(linux、Windows)机器上,也能够实现虚拟化。容器是彻底使用沙箱机制,相互之间不会有任何接口。
Containers 与 VMs相比

linux
Docker特色
- 灵活:即便是最复杂的应用也能够集装箱化。
- 轻量级:容器利用并共享主机内核。
- 可互换:即时部署更新和升级。
- 便携式:在本地构建,部署到云,并在任何地方运行。
- 可扩展:增长并自动分发容器副本。
- 可堆叠:垂直和即时堆叠服务。
Docker主要模块
Docker主要由三部分组成:镜像Image、容器Container、仓库Repository
各个模块以下:golang
Docker Client
docker client 是docker架构中用户用来和docker daemon创建通讯的客户端,用户使用的可执行文件为docker,经过docker命令行工具能够发起众多管理container的请求。docker
- docker client能够经过一下三种方式和docker daemon创建通讯:
tcp://host:port;
unix:path_to_socket;
fd://socketfd。
- docker client能够经过设置命令行flag参数的形式设置安全传输层协议(TLS)的有关参数,保证传输的安全性。
- docker client发送容器管理请求后,由docker daemon接受并处理请求,当docker client 接收到返回的请求相应并简单处理后,docker client 一次完整的生命周期就结束了,当须要继续发送容器管理请求时,用户必须再次经过docker能够执行文件建立docker client。
Docker server
docker server在docker架构中时专门服务于docker client的server,该server的功能是:接受并调度分发docker client发送的请求,架构图以下:
api
- 在Docker的启动过程当中,经过包gorilla/mux(golang的类库解析),建立了一个mux.Router,提供请求的路由功能。在Golang中,gorilla/mux是一个强大的URL路由器以及调度分发器。该mux.Router中添加了众多的路由项,每个路由项由HTTP请求方法(PUT、POST、GET或DELETE)、URL、Handler三部分组成。
- 若Docker Client经过HTTP的形式访问Docker Daemon,建立完mux.Router以后,Docker将Server的监听地址以及mux.Router做为参数,建立一个httpSrv=http.Server{},最终执行httpSrv.Serve()为请求服务。
- 在Server的服务过程当中,Server在listener上接受Docker Client的访问请求,并建立一个全新的goroutine来服务该请求。在goroutine中,首先读取请求内容,而后作解析工做,接着找到相应的路由项,随后调用相应的Handler来处理该请求,最后Handler处理完请求以后回复该请求。
- Docker Server的运行在Docker的启动过程当中,是靠一个名为”serveapi”的job的运行来完成的。原则上,Docker Server的运行是众多job中的一个,可是为了强调Docker Server的重要性以及为后续job服务的重要特性,将该”serveapi”的job单独抽离出来分析,理解为Docker Server。
Engine
Job
Docker Daemon
Docker Registry
Graph
Driver
libcontainer
Docker container
安装Docker
最简单方式,即便用阿里云一键安装脚本:安全
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl start docker
systemctl enable docker
docker version
Docker中的镜像管理
搜索镜像:bash
docker search
获取镜像:网络
docker pull
查看镜像:架构
docker images
删除镜像:curl
docker rmi
Docker中的容器管理
启动容器:socket
docker run –-name –h hostname
中止容器:
docker stop CONTAINER ID
查看容器:
docker ps
进入容器:
docker exec | docker attach
删除容器:
docker rm
Docker中对网络进行访问
随机映射:
docker run -P
指定映射:
-p hostPort:containerPort
-p ip:hostPort:containerPort
-p ip::containerPort
-p hostPort:containerPort
-p hostPort:containerPort