Docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的不同操作系统(linux、Windows)机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Containers 与 VMs相比
Docker特点
- 灵活:即使是最复杂的应用也可以集装箱化。
- 轻量级:容器利用并共享主机内核。
- 可互换:即时部署更新和升级。
- 便携式:在本地构建,部署到云,并在任何地方运行。
- 可扩展:增加并自动分发容器副本。
- 可堆叠:垂直和即时堆叠服务。
Docker主要模块
Docker主要由三部分组成:镜像Image、容器Container、仓库Repository
各个模块如下:
Docker Client
docker client 是docker架构中用户用来和docker daemon建立通信的客户端,用户使用的可执行文件为docker,通过docker命令行工具可以发起众多管理container的请求。
- 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发送的请求,架构图如下:
- 在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中的镜像管理
搜索镜像:
docker search
获取镜像:
docker pull
查看镜像:
docker images
删除镜像:
docker rmi
Docker中的容器管理
启动容器:
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。