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

posted on 2018-09-21 15:46  刘达人186  阅读(128)  评论(0编辑  收藏  举报