Docker 入门
=================
# Docker是什么
## 简介
* Docker的是一个轻量级的操作系统虚拟化解决方案。
* 用官网的概括来说就是“Build,Ship and Run Any App,Anywhere”,装载任何App,在任何地方都可以运行
* 实现了对应用的封装,部署,运行等生命周期管理,到处都可以运行。
# Docker的原理
## 原理
* 基于Linux自带的(Linux。 Containers,LXC)技术(名称空间,资源配额等)
* 与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译
* 容器可以在核心CPU本地运行指令,而不需要任何专门的解释机制。
## 与虚拟机的区别
![docker与虚拟机](docker_vm.jpg)
## docker架构
![docker架构](docker_image.png)
## Docker Daemon
* 最核心的是 Docker Daemon我们称之为Docker守护进程,也就是Server端
* Server端可以部署在远程,也可以部署在本地,因为Server端与客户端(Docker Client)是通过Rest API进行通信。
## Docker CLI
* docker CLI 实现容器和镜像的管理,为用户提供统一的操作界面
* 这个客户端提供一个只读的镜像,然后通过镜像可以创建一个或者多个容器(container)
* 这些容器可以只是一个RFS(Root File System),也可以是一个包含了用户应用的RFS。容器在docker Client中只是一个进程,两个进程是互不可见的。
## Docker的镜像
* Image: 一个只读的镜像模板。可以自己创建一个镜像也可以从网站上下载镜像供自己使用。镜像包含了一个RFS.一个镜像可以创建很多容器。
## Docker的容器
* Container:由docker client通过镜像创建的实例,用户在容器中运行应用,一旦创建后就可以看做是一个简单的RFS,每个应用运行在隔离的容器中,享用独自的权限,用户,网络。确保安全与互相干扰
## 与镜像的区别
* 两种基本上类似,唯一的却别是镜像最上面那一层是只读的,不可以修改,但是容器最上面一层是rw的,提供给用户操作
## Docker的仓库
* Repository: 存放镜像的地方,官方仓库是https://hub.docker.com。
# Docker的安装
## 国内镜像安装
* Docker 的 安装资源文件 存放在Amazon S3,会间歇性连接失败。所以安装Docker的时候,会比较慢。
* 你可以通过执行下面的命令,高速安装Docker。
curl -sSL https://get.daocloud.io/docker | sh
## 镜像加速器
* Docker镜像服务器在国外,会导致访问很慢,可以使用以下命令来设置加速器
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://e7850958.m.daocloud.io
# Docker的卸载
## 卸载docker包
* 你可以使用以下命令来卸载
sudo apt-get remove docker docker-engine
## 删除数据卷
* 卸载Docker后,/var/lib/docker/目录下会保留原Docker的镜像,网络,存储卷等文件. 如果需要全新安装Docker,需要删除/var/lib/docker/目录
rm -rf /var/lib/docker/
# Docker的常用操作
## docker search查询
docker search java
## 查询的结果
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
node Node.js is a JavaScript-based platform for s… 5973 [OK]
tomcat Apache Tomcat is an open source implementati… 1978 [OK]
java Java is a concurrent, class-based, and objec… 1801 [OK]
openjdk OpenJDK is an open-source implementation of … 1126 [OK]
ghost Ghost is a free and open source blogging pla… 805 [OK]
anapsix/alpine-java Oracle Java 8 (and 7) with GLIBC 2.23 over A… 340 [OK]
jetty Jetty provides a Web server and javax.servle… 262 [OK]
couchdb CouchDB is a database that uses JSON for doc… 221 [OK]
tomee Apache TomEE is an all-Apache Java EE certif… 53 [OK]
groovy Apache Groovy is a multi-faceted language fo… 49 [OK]
lwieske/java-8 Oracle Java 8 Container - Full + Slim - Base… 40 [OK]
## docker pull拉取镜像
docker pull tomcat:8
## docker run运行容器
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -v /home/kd/data:/var/lib/mysql mysql
## docker ps 查看运行的容器
docker ps -a
## docker 容器的状态控制
docker start/stop/restart/kill mysql
## docker 容器删除
docker rm mysql
## 删除镜像
docker rmi mysql
## 导入镜像
docker load < mysql.tar
## 导出镜像
docker save mysql >mysql.tar
## 给镜像加标签
docker tag id mysql
# Docker Compose
## 简介
* Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
* Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multicontainer Docker applications)
## 安装
* Docker Compose 存放在Git Hub,不太稳定。
* 你可以也通过执行下面的命令,高速安装Docker Compose。
curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
## 示例
version: '3'
services:
web:
ports:
- "8100-8200:8080"
## docker-compose 启动容器
docker-compose up -d
## docker-compose 启动容器
docker-compose down
## docker-compose 控制容器状态
docker-compose start/stop/kill web
## docker-compose 调整容器个数
docker-compose scale web=3
## 服务编排
version: "3"
services:
mysql:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=m4R4YWn40QduqEKd
ports:
- 3306:3306
app:
image: tomcat:8
ports:
- 8080:8080
links:
- mysql:mysqlhost
nginx:
image: nginx
ports:
- 80:80
links:
- app:apphost
# 其他
## 其他资源
* Dockerfile
* Docker Swarm
* Docker Machine
* Kubernetes (k8s)
## 常用镜像
* mysql
* tomcat
* redis
* nginx
* Docker UI
* Kafka
# Q&A