美文网首页
Docker基础

Docker基础

作者: Jerry_Liang | 来源:发表于2018-11-24 14:20 被阅读0次

    什么是Docker?


    Docker是基于Go语言实现的云开源项目。Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或者数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。

    Docker引擎的基础是Linux自带的容器(Linux Containers,LXC)技术。IBM对于容器技术的准确描述如下:

    容器有效的将单个操作系统管理的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心CPU本地运行指令,而不需要任何专门的解释机制。此外,也避免了准虚拟化(paravirtualization)和系统调用替换中的复杂性。

    我们可以将容器理解为一种沙盒。每个容器内运行一个应用,不同的容器相互隔离,容器之间可以建立通信机制。容器的创建和停止都十分快速(秒级),容器自身对资源的需求十分有限,远比虚拟机本身占用的资源少。

    Docker结构


    image

    docker如上图所示,由Client客户端,DOCKER_HOST宿主机,Registry仓库三个部分构成。在客户端部分,用户可以拉取镜像、创建镜像和运行镜像(客户端-服务器的架构。docker client告诉Docker daemon建立、运行、发布你的Docker容器。Docker client和daemon可以运行在一个系统中,或者可以使用Docker client和远程Docker daemon取得联系。docker服务端和docker守护进程之间通过sockets或者REST API交互)。

    运行机制如下描述:

    1.用户在客户端的命令都交给Docker daemon来处理;
    2.如doker run 运行镜像:docker daemon会检查宿主机是否有这个images,若没有则去镜像仓库(Registry)中拉取镜像;
    3.再运行镜像后以容器的形式在宿主机中运行
    

    Docker给DevOps带来的好处

    更快速的交付和部署:开发人员可以使用镜像快速的构建标准开发环境;开发完成后,测试和运维人员可以使用开发人员提供的docker镜像快速部署应用,可以避免开发和测试运维人员之间的环境差异导致的部署问题。

    更高校的资源利用:Docker容器的运行不需要额外的虚拟化管理程序支持,它是内核级的虚拟化,在占用更少资源的情况实现更高的性能。

    更方便的迁移和扩展:Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、服务器等。这种兼容使得用户可以在不同的平台之间很方便的完成应用迁移。

    更简单的更新管理:使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作,并且所有修改都以增量方式进行分发和更新。

    虚拟化与Docker

    虚拟化的核心是对资源进行抽象,目标往往是为了在同一个机器上运行多个系统或应用,从而提高系统资源的利用率。虚拟化分为很多类型,比如常见的硬件辅助虚拟化(VMware workstation、 KVM等)。Docker所代表的容器虚拟化技术属于操作系统级虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程

    传统虚拟化和容器技术结构比较:传统虚拟化技术是在硬件层面实现虚拟化,增加了系统调用链路的环节,有性能损耗;容器虚拟化技术以共享Kernel的方式实现,几乎没有性能损耗。

    Docker三大基本概念

    image

    Docker镜像类似于虚拟机镜像,是一个只读模板,并且包含了文件系统。一个镜像可以只包含一个操作系统环境(比如SUSE镜像),也可以安装了用户程序及其运行环境(比如eBackup镜像)。镜像其实就是一个文件,任何用户程序都可以成为镜像的一部分。

    镜像=操作系统+软件运行环境+用户程序

    image

    如上图,一个layer就是一个image,多个image又可以打包成一个image。Image类似一个单链表系统,每个image包含一个指向parent image的指针,没有parent image的image是baseimage(image的指针靠sqlite数据库来保存)。

    最上面的一层(不属于image)是可写的,上面的内容依赖于下面的内容,如果要修改下面的内容,先将下面的内容复制到上面再进行修改。

    Image是创建container的基础。

    Container

    容器是从镜像创建的运行实例,可以将其启动、开始。停止、删除,而这些容器都是相互隔离(独立进程),互不可见的。

    Repository

    Repository是image的集合,而Registry是Repository的集合。

    Docker在Centos7环境下的安装


    1.使用root权限登录系统;

    2.更新系统包到最新:

    yum -y update

    3.添加yum仓库

    cat >/etc/yum.repos.d/docker.repo <<-EOF
    [dockerrepo]
    name=Docker Repository
    baseurl=https://yum.dockerproject.org/repo/main/centos/7
    enable=1
    gpgcheck=1
    gpgkey=https://yum.dockerproject.org/gpg
    EOF</pre>
    

    如下图:

    image

    4.安装docker包

    yum install -y docker-engine

    yum install -y docker-selinux

    在使用现成的安装包的时候selinux的安装一定要在docker-engine之前

    yum list installed|grep docker

    5.启动docker

    systemctl start docker.service

    6.验证docker已经正常安装

    docker run hello-world

    7.配置docker开机自启动

    systemctl enable docker.service

    Docker的卸载


    使用yum卸载docker

    1.列出安装的软件包

    yum list installed | grep docker

    2.移除软件包

    yum -y remove docker-engine.x86_64(这命令不会删除镜像,容器,卷组和用户自配置文件)

    3.删除所有镜像,容器和组

    rm -rf /var/lib/docker

    Docker指令

    image image
    docker build:创建镜像;
    docker pull + 镜像名(镜像地址):获取镜像;
    docker images:查看本地镜像;
    docker run + 镜像名 : 运行镜像 ;
    docker run -d +镜像名 : 后台运行镜像 ;
    docker ps : 查看当前运行的容器;
    docker exec -it + 容器ID:进入容器(如进入Ubuntu);
    docker inspect +容器名或容器ID:查看容器所有信息。
    

    Docker网络


    image

    如上图所示Docker网络类型有Bridge、Host 和None

    Host模式:容器直接连接到宿主机上,容器内的网络和宿主机的网络一致;

    Bridge模式:以bridge桥段和宿主机相连,启动容器时容器会虚拟出一个网卡,然后连接Bridge再和主机连接。

    开放端口号的形式运行(以下以运行nginx为例):

    docker run -d -p 8088:80 nginx // -d 指后台运行  -p为开启端口号映射 8088为宿主机端口号 80为nginx监听端口号
    docker run -d -P(大写P) nginx  // -P指开放所有端口号,并随即指定端口号作为映射
    

    开放端口号遇到的问题:

    image
    问题描述:开放端口号失败;
    原因:docker 指定了快速启动方式(百度知道的=-=);
    解决办法:重启(restart)Docker后再运行即可。
    

    Dockerfile语法


    [图片上传中...(image-281405-1543037745030-2)]

    [图片上传中...(image-c72795-1543037745030-1)]

    Docker制作镜像示例


    需要用到的操作: Dockerfile的创建,docker build。

    1.创建Dockerfile,示例内容如下:

    from tomcat //注释:运行于tomcat这个容器
    MAINTAINER Jerry_Liang 1097872779@qq.com //作者名Jerry_Liang 联系方式1097872779@qq.com
    COPY 项目名.war  /usr/local/tomcat/webapps  //将war包拷贝到tomcat容器中
    

    2.将项目war包放到与Dockerfile的同一目录上;

    3.执行创建镜像命令

    docker build -t jpress:latest +Dockerfile路径名(如果为当前工作路径则用“.”)
     //注释:-t为指定镜像名和后面的latest为镜像标签
    

    volume操作


    挂载实现:

    第一种方法:

    docker run -p 80:80 -d -v F:\Docker:/usr/share/nginx/html nginx 
    //注释:-d 指在以守护进程的模式运行(daemon守护进程) -v 即volume将本地指定的文件夹(此处为本机的F盘下的Docker文件夹)挂载到容器的/usr/share/ngixn/html 来实现同步(即主机文件夹有变,容器的文件夹也会发生变化)
    

    第二种方法:

    1.docker create -v F:\Docker\data:/var/mydata --name data_container ubuntu
     //注释 --name指定容器名字  ubuntu指定基础镜像 
    2.docker run -it --volumes-from data_container ubuntu /bin/bash 
     //注释 -it交互方式运行,直接进入容器
    

    运行一个好玩的镜像


    运行结果图:

    image

    操作:

    首先获取搜索该镜像:docker search whalesay
    然后获取镜像: docker pull docker/whalesay
    最后运行:docker run docker/whalesay cowsay + 你想说的话(比如我输入的是Docker good)
    

    分享镜像


    docker login //首先是登录,这样才会有权限分享
    docker push + 本地镜像名
    

    参考文章

    Docker基础:https://blog.csdn.net/weixin_39381833/article/details/80740235

    Docker介绍 : https://blog.csdn.net/u012299594/article/details/52343910

    视频教程:https://www.imooc.com/video/15727https://www.imooc.com/learn/824

    Linux下的Docker安装教程:https://blog.csdn.net/qq_36892341/article/details/73918672

    参考文章:https://www.cnblogs.com/luchuangao/p/7748575.html?tdsourcetag=s_pctim_aiomsg#_label0

    相关文章

      网友评论

          本文标题:Docker基础

          本文链接:https://www.haomeiwen.com/subject/xkzeqqtx.html