Docker

应用场景:

  1、Web应用的自动化打包和分布

  2、自动化测试和持续集成、发布

  3、在服务型环境中部署和调整数据库或其他的后台应用

  4、从头编译或者扩展现有的OpenShift或Cloud Foundry 平来来搭建自己的PaaS环境

 

Docker的有点:

  1、简化程序

    Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放到Docker中进行管理。方便快捷是Docker的最大优势,过去需要长时间才能完成的任务,在Docker容器的处理下,很快就能完成

  2、避免了选择恐惧症

    Docker可以打包,比如Docker的镜像:Docker镜像中包含了运行环境和配置,所以Docker可以简化部署多种应用实例工作。比如Web后台、后台应用、数据库应用、大数据应用比如Hadoop集成、消息队列等等都可以打包成一个镜像部署

  3、开源节流

    Docker改变了高性能必须是高价格的思维方式。Docker与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式

  

Docker架构:

  Docker使用客户端-服务端的架构模式(c/s),使用远程API来管理和创建Docker容器

  Docker容器通过Docker镜像来创建

  容器与镜像的关系类似于面向对象中的对象与类的关系

Docker镜像images Docker镜像是用于创建Docker容器的模版
Docker容器container 容器是独立运行的一个或一组应用
Docker客户端client Docker客户端通过命令行或者其他工具使用Docker API与Docker的守护进程通信。
Docker主机host 一个物理或者虚拟的机器用于执行Docker守护进程和容器
Docker仓库registry 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub提供了庞大的镜像集合供使用
Docker Machine 是一个简化Docker安装的命令行工具,通过一个简单的命令行既可以在相应的平台上安装Docker

 

MacOS中安装Docker:

  1、使用Homebrew进行安装

    Homebrew的Cask已经支持Docker for Mac

    1、brew cask install docker

    在载入Docker app之后,点击Next,可能会询问你的macOS登陆密码,你输入就可以,之后会弹出一个Docker运行的提示窗口,状态栏上会出现一个鲸鱼🐳的图标

  2、手动下载安装

    点击stableedge版本的Docker for mac

    安装也非常简单,双击下载的.dmg文件,然后将鲸鱼图标拖拽到Application文件夹就可以了

    第一次点击图标,可能会看到这个安装成功的界面,点击“Got it!”可以关闭这个窗口

  3、启动终端之后,通过命令可以检查安装后的Docker版本

    docker --version

  镜像加速

    由于国内网速的问题,后续拉取Docker镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com

    在任务栏点击Docker for mac应用图标 -> Perferences... -> Daemon -> Registry mirrors。在列表中填写加速器地址即可。修改完成之后,点击Apply&Restart按钮,Docker就会重启并应用配置的镜像地址了。

 

 

 

   之后我们可以通过docker info来查看是否配置成功了

 

 

Docker Hello World:

  Docker允许你在容器内运行应用程序,使用docker run命令来在容器内运行一个运行程序

  输出hello world

docker run ubuntu:15.10 /bin/echo 'hello world'

 

  各个参数解析:

    docker:Docker的二进制执行文件

    run:与前面的docker组合来运行一个容器

    ubuntu:15.10:指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker就会从镜像仓库Docker Hub下载公共镜像

    /bin/echo 'hello world':在启动的容器里执行的命令

  以上命令的完整意思可以理解成Docker以ubuntu15.10 镜像创建一个新容器,然后在容器里执行bin/echo 'hello world',然后在输出结果

  运行交互式的容器:

    我们通过docker的两个参数-i -t,让docker运行的容器实现“对话”的能力

docker run -i -t ubuntu:15.10 /bin/bash

    通过运行这条命令可以直接进入到容器内部

    各个参数解析:

      -i:允许你对容器内的标准输入(STDIN)进行交互

      -t:在新容器内指定一个伪终端或终端

    这个时候我们已经进入到Ubuntu15.10系统的容器,这个时候我们就可以在容器中运行命令cat/proc/version/ls分别查看当前系统的版本信息和当前目录下的文件

    我们可以通过exit命令或者ctrl+D来退出容器

  启动容器(后台模式)

    首先以进程方式运行一个容器

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

 

    在输出中,我们没有看到期望的‘hello world’,而是一串长的字串, 这个长的字串叫做容器ID,对于每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。

    首先,我们需要确认容器有在运行,可以通过docker ps来查看

    CONTAINER ID:容器ID

    NAMES:自动分配的容器名称

    在容器中使用docker logs命令,查看容器内的标准输出

  停止容器:

    使用docker stop命令来停止容器

    通过docker ps查看,容器已经停止工作

 

Docker容器的使用:

  Docker客户端:

    docker客户端可以直接输入docker命令来查看Docker客户端的所有命令选项

    可以通过docker command --help 更深入的了解指定的Docker命令使用方法

    例如我们要是想查看docker stats指令的具体使用方法那就是docker stats --help

  运行一个web应用

    尝试使用docker构建一个web应用程序

    我们将在docker中运行一个python flask应用来运行一个web应用

docker pull training/webapp  # 载入镜像
docker run -d -P training/webapp python app.py

 

    各个参数解析:

      -d:让容器在后台运行

      -P:将容器内部使用的网络端口映射到我们使用的主机上

  查看web应用容器

    使用docker ps查看我们正在运行的容器

 

 

     这里面多了一个端口信息,Docker开放了5000端口(默认python flask端口)映射到主机端口上,这个时候我们可以通过访问0.0.0.0:32768就可以看到内容了,

    这时候我们也可以通过-p参数来设置不一样的端口

docker run -d -p 5000:5000 training/webapp python app.py

    这时候执行一下docker ps

 

 

     这时候可以看到内部的5000端口已经映射到了我们本地主机的5000端口上了

  网络端口的快捷方式:

    通过docker ps可以查看到容器的端口映射,docker还提供了另一个快捷方式docker port,使用docker port 可以查看指定(ID或者名字)容器的某个确定端口映射到宿主机的端口号

    上面我们创建的web应用ID为88ea02cd5e88 ,名字是keen_lewin。这时候我们可以使用docker port 88ea02cd5e88

 

 或者 docker port keen_lewin 来查看容器端口的映射情况

  查看web应用程序的日志:

    docker logs [ID 或者名字]可以查看容器内部的标准输出

 

 

    docker logs -f  88ea02cd5e88

    参数解析:

      -f:让docker logs像使用tail -f一样来输出容器内部的标准输出,从上面我们可以看到应用程序使用的是5000端口并且能够查看到应用程序的访问日志

  查看web应用程序容器的进程:

    可以使用docker top来查看容器内部运行的进程

 

 

   检查web应用程序:

    使用docker inspect来查看Docker的底层信息,它会返回一个json文件记录这Docker容器的配置文件和状态信息

  停止web应用容器:

    docker stop

  重启web应用容器:

    已经停止了的容器需要先使用docker start  来进行启动

    docker ps -l --> 查询最后一次创建的容器

    正在运行的容器,我们可以使用docker restart命令来进行重启

  移除web应用容器

    可以使用docker rm来移除我们不需要的容器,在移除的时候,容器必须是停止的状态,否则会报错误

 

 

 Docker镜像使用:

  列出镜像列表:

    可以使用docker images来列出本地主机上的镜像

 

     各个参数详解:

      REPOSITORY:表示镜像的仓库源

      TAG:镜像的标签

      IMAGE ID:镜像ID

      CREATED:镜像创建时间

      SIZE:镜像大小

    同一个仓库源可以有多个TAG,代表这个仓库源的不同的版本,比如ubuntu仓库源中,可以有多个不同的版本,我们可以使用REPOSITORY:TAG来定义不同的镜像,所以我们如果 要使用版本是15.10的ubuntu系统镜像来运行容器的时候,命令就可以是:docker run -i -t ubuntu:15.10 /bin/bash   如果要使用14.04的ubuntu那么只需要把那个15.10切换一下就可以了

    如果你不指定一个镜像的版本标签,例如你只使用ubuntu,那么docker将默认使用ubuntu:latest镜像

  获取一个新的镜像:

    当我们在本地主机上使用一个不存在的镜像的时候Docker就会自动下载这个镜像,如果我们想预先下载这个镜像,我们就可以使用docker pull命令来下载它

    查找镜像:

      我们可以从Docker Hub网站来搜索镜像,Docker Hub的网址是 https://hub.docker.com/

      我们可以直接在终端中通过docker search命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们就可以通过docker search httpd 来搜索适合我们的镜像

 

       各个参数解析:

        NAME:镜像仓库源的名称

        DESCRIPTION:镜像的描述

        OFFICIAL:是否是docker官方发布的

  拖取镜像:

    如果我们决定使用上图中的httpd官方版本的镜像,使用命令docker pull就可以下载下来了

 

     下载完成之后就可以使用这个镜像了:docker run httpd

  

  创建镜像:

    当我们从docker镜像仓库中下载的镜像不能满足我们的需求的时候,我们就可以通过以下两种方式对镜像进行修改

      1、从已经创建的容器中更新镜像,并且提交这个镜像

      2、使用Dockerfile指令来创建一个新的镜像

  更新镜像:

    在更新镜像之前我们需要使用镜像来创建一个容器:docker run -t -i ubuntu:15.10 /bin/bash

    在运行的容器内使用apt-get update命令来进行更新,完成之后使用exit来进行退出

    完成之后我们可以通过docker commit来提交容器副本:docker commit -m='has update' -a='runoob' 容器ID runoob/ubuntu:v2

    未写完。。。                                                                                                                                                

        

 

Docker容器连接:

  网络端口映射:

    首先创建一个python应用的容器docker run -d -P training/webapp python app.py

    我们使用-P参数创建一个容器,使用docker ps可以看到容器端口5000绑定主机端口32768 

    

 

    我们也可以使用-p标识来指定容器端口绑定到主机端口

    两种方式的区别:

      1、-P:是容器内部端口随机映射到主机的高端口

      2、-p:是容器内部端口绑定到指定的主机端口

    另外我们可以指定容器绑定的网络地址,比如绑定127.0.0.1

    docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py

    这样我们就可以通过访问127.0.0.1:5001来访问容器的5000的端口

    上面这种方法是TCP的方式,如果要绑定udp就需要在端口后面加上/udp

    docker port可以让我们快捷的查看端口的绑定情况

 

  docker容器连接:

    端口映射并不是唯一把docker连接到另一个容器的方法,docker有一个连接系统允许将多个容器连接在一起,共享连接信息,docker连接会创建一个父子关系,其中父容器可以看到子容器的信息

    容器命名:

      当我们创建一个容器的时候,docker会自动对它进行命名。另外我们也可以使用--name标识来命名的容器

 

 

 

 

 

 

 

 

 

 

  

 

posted @ 2019-09-04 09:45  tulintao  阅读(162)  评论(0编辑  收藏  举报