docker部署

这两天使用docker容器部署了一下项目中的东西,在这里进行一些相关的资料整理。此篇博文的结构如下:

一、我印象中的docker

二、如何使用docker

三、一些原理

四、扩展学习

一、我印象中的docker

  docker直译为码头搬运工人,而我更倾向于将之翻译为:集装箱管理员。

  docker可以为应用分配出一个个image(个人理解,image就是一个可以以线程运行的操作系统模版,这个操作系统里可以加入各种各样的软件,例如:tomcat、telnet等等)。这个image一旦运行起来,即是一个instance,或者可以理解为以线程运行的简化操作系统(这个进程是可以由docker进程,或者叫docker容器管理的)。

  简单说就是:docker维护了一个个独立的线程,而这些线程即是一个个简化的操作系统。在这些操作系统中,我们可以布置属于自己的应用或者工具,用于运维。

  

二、如何使用docker

  按照如上理解,docker的使用至少需要进行如下步骤:

  (1)安装docker容器;

  (2)在docker容器中创建image;

  (3)通过docker中的image生成运行实例;

  (1)安装docker,这个没什么技术含量,相当于在linux上安装一个软件,附上帮助链接:

    (a)官方文档:http://www.docker.org.cn/book/install/supported-platform-17.html

    (b)我使用的参考博客:http://blog.csdn.net/fgf00/article/details/51893771

    (c)简单说来两行命令

      yum install -y epel-release

      yum install docker-io

  (2)在容器中创建image

    image可以通过三种方法获得

    (a)从docker云端仓库获得

      在docker hub中查找centos镜像:docker search -s 10 centos

      从docker hub中拉取centos镜像:docker pull centos

    (b)从本地上传镜像

      编写Dockerfile内容如下。

      内容规范参考https://www.cnblogs.com/wangmo/p/6811321.html或者https://docs.docker.com/engine/reference/commandline/search/#description

#以tomcat:8-jre7 镜像为基础,生成镜像,此处tomcat:8-jre7 为centos系统为基础,搭建的jdk1.7、tomcat8的镜像
FROM tomcat:8-jre7 

#author
MAINTAINER chendeming

#environment,一个简要的环境说明
ENV tomat8-java1.7

#操作需要执行的操作
RUN rm -rf /usr/local/tomcat/webapps/ROOT
#将Dockerfile所在目录下的ROOT目录拷贝至镜像中/usr/local/tomcat/webapps/ROOT处
COPY ./ROOT /usr/local/tomcat/webapps/ROOT

       将镜像构建生成(如下命令要在Dockerfile所在目录下执行)

      docker build -t "cloud:latest" .

      docker build –t “镜像名称:标签(默认标签为latest)” .(这个.不能少,用于指向当前目录)

      

      备注:成功标志为执行docker images能够找到cloud这个名字的镜像

    (c)使用导入的方式生成镜像

       docker import ./export.tar可导入通过docker export cloud > export.tar导出的镜像

       备注:也可以使用如下命令进行

    

  (3)通过镜像创建运行实例

    执行命令

      docker run –d –p 8081:8080 –-name cloud001 cloud
      docker run –d –p 对外发布端口:容器内使用端口 --name 运行实例名 镜像名

    成功标志

      docker ps 能够看到一个运行中的docker实例。若没有,执行docker ps -a 看看有没有没能运行起来的实例

  (4)日常的一些docker运维

    docker运行实例操作:

      # 创建一个新的容器并运行一个命令

      在运行实例中执行命令:docker run image_name echo "hello word" 

      在当前运行:docker run -i -t image_name /bin/bash 

      # 查看所有已存在的运行实例

      查看当前所有运行中的实例:docker ps

      查看当前所有状态的实例:docker ps -a

      # 删除运行实例(无论运行状态)

      docker rm `docker ps -a -q`

      docker rm Name/ID  

      # 停止、启动、杀死一个容器
      docker stop Name/ID
      docker start Name/ID
      docker kill Name/ID

      # 从一个容器中取日志; -f, --follow=false Follow log output; -t, --timestamps=false Show timestamps
      docker logs Name/ID

      # 列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的
      docker diff Name/ID

      # 显示一个运行的容器里面的进程信息
      docker top Name/ID

      # 从容器里面拷贝文件/目录到本地一个路径
      docker cp Name:/container_path to_path
      docker cp ID:/container_path to_path

      

      docker rmi <参数> <镜像>--> 删除某个镜像
      参数:
        -f 强制删除

      docker build <参数> <容器> -->利用DockerFile创建镜像
      参数:
        -t 给镜像添加一个标签[tag]
        -q 安装模式,直接输出结果

    docker云端仓库操作

      docker login -u 用户名 -p 密码 <仓库>--> 登陆到一个Docker镜像仓库[默认Docker Hub]

      # 登出Docker镜像

      docker logout 

三、一些原理

  如上内容中,很多东西都是个人的理解,在这个部分我将把之前提到的一些说法转换为业界内的说法。

  

  Docker有三个组件和三个基本元素
  三个组件分别是:
    Docker Client是用户界面,它支持用户与Docker Daemon之间的通信
    Docker Daemon运行于主机上,处理服务请求。
    Docker Index是中央registry[仓库] Hub,支持拥有共有与私有访问权限的Docker容器镜像的备份

  三要素分别是:
    Docker Containers负责应用程序的运行,包括操作系统、用户添加的文件以及元数据。即我上面说的启动的线程。
    Docker Images是一个只读模板,用来运行Docker容器。即我上面说的image,或者镜像
    DockerFile是文件指令集,用来说明如何自动创建Docker镜像,这个是创建部分以本地方式上传中的Dockerfile。

    Docker 镜像是一个构建容器的只读模板,它包含了容器启动所需的所有信息,包括运行程序和配置数据。Docker镜像是由文件系统叠加而成的。自低而上分别是:引导文件系统[bootfs] -> root文件系统rootfs] -> 只读文件系统-> 读写文件系统

    root文件系统+只读文件系统被称为镜像,镜像是可以叠放的,最下层的称为基础镜像[base image、下面层的为父镜像,当docker容器启动时。docker会加载最顶层的读写文件系统,我们程序就是在读写层中执行的

    Docker 容器类似于一个轻量级的沙盒,Docker利用容器来运行和隔离应用[容器间是线程隔离的。容器是镜像创建的应用运行实例,容器中可以运行一个或多个进程。Docker容器可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。

 这里写图片描述

四、扩展学习

  docker源码:http://www.infoq.com/cn/articles/docker-source-code-analysis-part2/

  基础概念:http://blog.csdn.net/u013468915/article/details/53977759

  docker命令:https://www.server110.com/docker/201411/11122.html

  docker导入导出:http://blog.csdn.net/opensure/article/details/46559071

原文地址:https://www.cnblogs.com/chendeming/p/8202477.html