zoukankan      html  css  js  c++  java
  • Docker入门心得(一)

    前言:

           最近辞职找工作,比较有空,所以花了时间学习了一下docker,感觉这是一个有意思的技术。

           我把最近的学习心得整理了一下,写了这篇文章。由于docker我也是初学,没经过项目实践,对它理解不够深刻。虽然文章中的知识点,我都查阅过多篇文章或者亲身实践印证,但尽管如此,还是难免有错误的地方,如果有人发现问题,欢迎留言指正。

    docker是什么:

           docker是一种新型的,轻量级的虚拟技术,它把软件及其依赖的环境打包起来,形成一个虚拟的整体,方便开发维护人员进行管理和调度。

    docker与集装箱:

           docker的英文意思是码头工人,而它的图标是一艘船上面放了许多个集装箱。集装箱是一种运送的货物统一规格的箱子,工人把货物放到集装箱里面,然后将箱子放在船上或车上运输到其它地方。

           集团箱运输效率非常高,而且可以很方便地切换运输工具。而docker就是IT界的集团箱技术,它把各式各样的软件封装成一个箱子里面,称之为“镜像”。人们把方便地进行对镜像进行传输,并在各种系统(目前只支持linux类)上运行。一个运行状态的镜像称之为“容器”。这些容器提供了统一的管理接口,让人们可以方便地运行,必要时也容易组装在一起。

     

    docker和虚拟机的区别:

           初学docker,很多人会有一个疑问:docker与虚拟机有什么区别?我在这里简单介绍一下。

    从下面这张图,是从网络文章《这可能是最为详细的Docker入门总结》里面摘取出来的。


           左边的是docker虚拟技术的架构图,右边是使用vmware虚拟技术的。从图片上看,我们可以知道docker是在操作系统上做的虚拟层,而vmware是在硬件层上做的虚拟层。

           一个docker容器一般只包括运行软件本身及其依赖的运行库(外壳层和应用软件),而一个vmware虚拟机则需要包括完整的操作系统(内核层和外壳层,应用程序和文件系统)。

           因为实现原理不同,导致docker和虚拟机在很多方面上有差异,这里总结如下:

     

     

    Docker

    虚拟机

    消耗资源

    只消耗软件实际运行需要的资源,一台普通PC机可以轻松启动几十到上百个容器

    需要预分配CPU/内存/硬盘资源,一台普通PC机一般只能启动几个虚拟机

    文件大小

    MB级别,只包括运行必要的文件和一些元数据,一般只包含操作系统外壳不包含内核

    GB级别,需要包括完整的操作系统以及预分配的磁盘文件

    隔离性

    Docker可以限制容器的资源消耗,但不能防止别的进程占用容器资源

    虚拟机之前相互干扰比较少

    启动速度

    启动速度快,可以在秒级

    十秒级甚至分钟级

    安全性

    Docker运行环境导致开发维护人员需要使用root权限,风险比较高。有一些黑客手段可以在容器里面对宿主机器进行破坏。

    安全性比较高

    稳定性

    Docker版本一直在快速更新,不同版本间细节差异会比较大。

    技术较稳定

     

     

           这里补充一点操作系统的知识,有助于加深对这节内容的理解。Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。如图:


     

    Docker容器和虚拟机的相同点:

    Ø  都有和宿主机器独立的网络设置(包括主机名,IPDNS等)

    Ø  独立的目录结构

    Ø  独立的PIDIPC

    docker使用例子:

     

           俗话说百闻不如一见。这里使用docker搭建一个wordpress应用做为例子,演示如何使用docker,给大家一个直观的感觉。

    演示过程你会看到一些陌生的名词或者命令,不过没关系,你可以忽略继续看这篇文章,后面会有解释。

     

    1 首先我们用docker创建一个虚拟的网络环境,用来部署wordpress

    [huangcihui:/home/huangcihui/wordpress] docker network create wordpress-net-demo

    fed21aad3090bc95f9a1aba14f58a64a1f9a6f7830aa60c409c0a5edca2c8937

     

    说明:新建的虚拟网络命名为wordpress-net-demo,后面需要使用到。

     

    2 wordpress需要使用mysql,所以我们先用docker创建一个mysql容器

     

     [huangcihui:/home/huangcihui/wordpress] docker run -d --name wordpress-mysql-demo --network wordpress-net-demo --network-alias db -e MYSQL_ROOT_PASSWORD=somewordpress -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress -v $PWD/db-demo:/var/lib/mysql  mysql:5.7

    1ce24c93292641115885c6a186a925dd77747c9a70ae0533035c76c870d640e8

     

    说明:

    使用镜像mysql:5.7建立了一个容器,名称为wordpress-mysql-demo

    -e参数是设置容器里面程序运行的环境变量,这里通过环境变量定义了mysql的基本参数

    这里新建了一个mysql容器,并且指定其在虚拟网络wordpress-net-demo里面的域名为db,后面wordpress连接数据库时需要使用这个域名。(这里db和容器名称都会注册到前面创建的虚拟网络wordpress-net-demo内嵌的DNS服务器127.0.0.11上)

    Mysql生成的数据文件默认存放在容器里面的/var/lib/mysq目录,我们使用-v参数,把这个目录映射到当前主机目录db-demo下面。如果不这样设置,容器删除后数据库数据也会跟着容器一起删除。

     

    3 接着我们再docker创建一个wordpress容器

     

    [huangcihui:/home/huangcihui/wordpress] docker run -d --name wordpress-demo --network wordpress-net-demo --network-alias wordpress -e WORDPRESS_DB_HOST=db:3306 -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpress -e WORDPRESS_DB_NAME=wordpress -p 8080:80  -v ${PWD}/wp-content-demo:/var/www/html/wp-content wordpress:latest

    11fa9298da3e748448a5c0120a2fb5a2e65c078370807702ca68119b4810a61c

     

     

    说明:

    使用镜像wordpress:latest建立了一个容器,名称为wordpress-demo

    通过启动时设置的环境变量指定了连接的数据库主机名称为db

    使用-v把宿主机器上的wp-content-demo目录映射给容器,这样可以留存wordpress配置信息。

    -p 8080:80参数的含义是把当前机器的8080端口映射到容器的80端口上面

    容器启动后用curl测试是否能成功访问:http://192.168.2.109:8080/

    如果命令能成功访问,一般说明启动成功,如果出现异常,可以使用docker logs wordpress-demo查看程序输出的错误信息

     

    4 现在我们可以在自己机器上浏览这个新建的wordpress平台了

    在浏览器输入 http://虚拟机IP:8080即可访问(如果访问失败,请检查虚拟机网络配置或者防火墙设置)


           设置好博客信息后生成的相关文件会存放在db-demowp-content-demo目录下

    从这个例子,我们可以看出docker的方便之处。使用docker你不需要先在网上找自己系统适用的mysqlwordpress安装包,再分别安装它们,并根据自己机器环境进行配置,最后才能启动一个wordpress

           使用docker,你只需要执行docker run,程序就会自动到docker hub寻找相应的镜像,并把它下载回来运行。

     

    docker应用场景:

           docker在以下场景下,可以有效提高我们的工作效率:

     

    Ø  替代虚拟机的部分功能

    使用docker可以在一台机上模拟多机集群环境,可以让不同开发人员启动相同的程序而不互相干扰,可以方便地试验程序在不同操作系统环境运行情况。这些原来需要使用虚拟机实现的功能,现在可以使用docker轻松代替。

     

    Ø  简化配置,模拟生产环境

    由于docker提供了网络,磁盘映射功能,使用我们不需要针对不同机器环境修改程序配置也可以运行。在开发/测试机器环境与生产机器环境有不同的情况,这个特性显得无比有用。

     

    Ø  使用docker实现快速部署

    大名鼎鼎的Kubernetesk8s)就是一个基于容器技术的快速部署工具,而docker就是人们常用的容器技术之一。可以说docker实现了“一次部署,到处运行”。

     

    Ø  方便地同步与共享软件

    人们可以轻松地将自己的软件打包上传到docker hub,根据各人需要随时下载到其它机器运行。当软件需要更新时,只需要重新执行docker pull <镜像名>,即可自动下载最新版本。

     

    随着docker的更新以及它越来越广泛地被应用,docker还会有更多应用场景,大家可以根据docker特性自己挖掘。

    未完待续

  • 相关阅读:
    d is undefined错误
    $ is not defined错误类型
    jsonp从服务器读取数据并且予以显示
    jquery来跨域提交表单
    json和jsonp的使用格式
    Compaction介绍
    mysql操作
    DNS安装配置
    FLUSH TABLES WITH READ LOCK 和 LOCK TABLES 之种种
    执行安装redis报错undefined reference to `__sync_add_and_fetch_4'
  • 原文地址:https://www.cnblogs.com/kingstarer/p/12592233.html
Copyright © 2011-2022 走看看