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