Docker入门
1. Docker简介:
docker是一个基于LXC的高级容器引擎。简单地说,docker是一个轻量级的虚拟解决方案,或者说它是一个超轻量级的虚拟机(容器)。
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。
Docker 的理念为“Build, Ship and Run Any App, Anywhere”
基本概念
- Docker Client:Docker提供给用户的客户端。
- Docker Daemon:Docker服务的守护进程。
- Docker Images:Docker的镜像,一张 “只读” 的系统CD。
- Docker Container:Docker的容器,Docker Images运行实例。
- Docker Registry : Docker Images的仓库,Dock Hub https://www.dockerhub.com。
- 架构
- AUFS联合文件系统
AUFS 是一种 Union File System(联合文件系统),又叫 Another UnionFS,后来叫Alternative UnionFS,再后来叫成高大上的 Advance UnionFS。所谓 UnionFS,就是把不同物理位置的目录合并mount到同一个目录中。UnionFS的一个最主要的应用是,把一张CD/DVD和一个硬盘目录给联合 mount在一起,然后,你就可以对这个只读的CD/DVD上的文件进行修改(当然,修改的文件存于硬盘上的目录里)
- LXC
LXC 就是 Linux Container。 LXC 也是一种轻量的虚拟技术,Linux 原生支持的容器。可以说 docker 就是基于 LXC 发展起来的,提供 LXC 的高级封装,发展标准的配置方法。
LXC可以在操作系统层次上为进程提供的虚拟的执行环境,一个虚拟的执行环境就是一个容器。可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、pid、ipc、mnt、uts),主要使用了cgroup技术。
CGroup是Control Groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组所使用的硬件资源的机制。
- 与虚拟机对比
2. Docker安装
brew cask install docker 或到官网下载 https://store.docker.com/editions/community/docker-ce-desktop-mac
3. Docker使用
基本命令
- 查询docker版本:
docker version
- 查看docker环境信息:
docker info
- 列出所有镜像:
docker images
- 列出运行状态的容器实例:
docker ps
- 从远程摘取docker镜像:
docker pull [镜像名:版本号/tag]
- 提交docker修改内容:
docker commit [containerId] tag
- 交互模式启动容器:
docker run -it -p 8080:8080 -v /usr/local:/var/jenkins_home --name jenkins jenkins:latest
- 后台模式启动容器:
docker run -d -p 8080:8080 -v /usr/local:/var/jenkins_home --name jenkins jenkins:latest
- 查看容器日志:
docker logs [containerId]
- 连接到docker容器终端上:
docker attach [containerId]
- 查看容器或镜像详细信息:
docker inspect [containerId/imageId]
- 在容器上执行命令:
docker exec [containerId] COMMAND [ARG...]
- 查询docker版本:
4. Dockerfile
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像
5. 容器编排
DockerCompse
Compose是用于定义和运行复杂Docker应用的工具。你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成。
DockerSwarm
Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。
Kubernetes
Kubernetes(通常写成“k8s”)是最开始由google设计开发最后贡献给Cloud Native Computing Foundation的开源容器集群管理项目。它的设计目标是在主机集群之间提供一个能够自动化部署、可拓展、应用容器可运营的平台。Kubernetes通常结合docker容器工具工作,并且整合多个运行着docker容器的主机集群。