zoukankan      html  css  js  c++  java
  • docker入门(一)未完待续。。。。

    一、docker的概念及优点
    二、docker基于不同系统的安装
    三、使用docker镜像
    四、操作docker容器

    一、docker的概念优点

    概念

    1. Docker是基于Go语言实现的开源项目,Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
      基于Linux平台上的多项开源技术,Docker提供了高效、敏捷和轻量级的容器方案,并支持部署到本地环境和多种主流平台。可以说Docker首次为应用的开发、运行和部署提供了‘一站式’的实用解决方案。

    2. 让容器的支持不在局限于Linux操作系统,而是更安全、更高效、更具有拓展性。
      可以简单地讲Docker容器理解为一种轻量级的沙箱。可以简单地讲Docker容器理解为一种轻量级的沙箱。
      每个容器内运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络通信,容器的创建和停止都十分快速,几乎跟创建和终止原声应用一致;另外容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机。

    3. 首先介绍三大核心概念(镜像,容器,仓库)

    • 镜像(image)
      Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。镜像是创建Docker容器的基础。例如:一个镜像可以包含一个基本的操作环境,里面进安装了Apache应用程序,可以把它成为Apache镜像。
      通过版本管理和增量的文件系统,Docker一同了一套十分简单的机制来创建和更新现有的镜像,用户可以从网上下载一个已经做好的镜像,并直接使用。
    • 容器(Container)
      Docker容器类似于一个轻量级沙箱,Docker利用容器来运行和隔离应用。
      容器是从镜像创建的应用运行实例。它可以启动、开始、停止、删除,而这些容器都是彼此相互隔离的、互不可见的。
    • 仓库(Repository)
      Docker仓库类似于代码仓库,是Docker集中存放的镜像文件的场所。
      仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库,每个仓库存放着某一类的镜像,往往包括多个镜像文件,通过不同的(tag)来进行区分,
      例如存放着Ubuntu操作系统的镜像仓库,被简称为Ubuntu仓库,其中可能包括16.04,18.04等不同版本镜像。
      仓库示例
      目前最大的公开仓库是官方提供的Docker Hub.

    Docker的优点

    通过容器打包应用、解耦应用和运行平台。只需要在新服务器上启动需要的容器就可以了,无论新旧服务器是否在同一类型的平台

    传统模式中服务器迁移,往往需要对每个应用都进行重新部署和调试。繁琐又影响工作效率。(无法保证同一份应用在不同环境中进行)
    1)运维方面

    1. 更快速的交付和部署
      使用镜像来构建一套标准的开发环境。直接部署代码,可以快速创建和删除容器,实现快速迭代,节约开发测试,部署的大量时间,使团队更容易理解应用和创建工作过程。
    2. 更高效的资源利用
    3. 更轻松的迁移和拓展(在任意平台上运行)
    4. 更简单的更新管理(使用Dockerfile,简单配置修改即可以替代大量更细工作。)

    2)docker与虚拟机比较

    特性容器虚拟机
    启动速度秒级分钟级别
    性能接近原生较弱
    内存代价很小较多
    磁盘使用一般为MB一般为GB
    运行密度单机支持上千个容器一般为几十个
    隔离性安全隔离完全隔离
    迁移性优秀一般

    3)Docker与虚拟化
    在这里插入图片描述

    二、docker基于不同系统的安装

    本文基于centos7进行安装及进行调试。请按照下面网址进行安装即可。

    http://www.runoob.com/docker/centos-docker-install.html

    三、使用docker镜像

    Docker 运行容器前需要本地存在对应的镜像, 如果镜像不存在, Docker 会尝试先从默 认镜像仓库下载(默认使用 Docker Hub 公共注册服务器中的仓库), 用户也可以通过配置, 使用自定义的镜像仓库。 本章将围绕镜像这 一 核心概念介绍具体操作, 包括如何使用 pull 命令从 Docker Hub 仓库中下载镜像到本地;如何查看本地已有的镜像信息和管理镜像标签;如何在远端仓库使 用 search 命令进行搜索和过滤;如何删除镜像标签和镜像文件;如何创建用户定制的镜像并 且保存为外部文件。 最后, 还将介绍如何往 Docker Hub 仓库中推送自己的镜像。

    1. 获取镜像 (docker pull )
    可以使用 docker [image] pull 命令直接从 Docker Hub 镜像源来下载镜像。 该命
    令的格式为 docker [image] pull NAME [ :TAG] 。
    其中, NAME 是镜像仓库名称(用来区分镜像), TAG 是镜像的标签(往往用来表示版本
    信息)。 通常情况下, 描述 一 个镜像需要包括
    “ 名称+标签 “
    信息。
    例如, 获取一个 Ubuntu 18.04 系统的基础镜像可以使用如下的命令:

    $ docker pull ubuntu:18. 04
    

    下面的命令实际上下载的就是 nginx:latest的镜像。

    $ docker pull nginx
    

    pull 子命令支持的 选项主要包括:
    -a, --all -tags=true | false: 是否获取仓库中的所有镜像,默认为否;
    –disable-content-trust:取消镜像的内容校验,默认为真。

    下载镜像到本地后, 即可随时使用该镜像了, 例如利用该镜像创建一个容器,在其中运
    行bash应用, 执行打印 "Hello World"命令:

    $  docker run -it ubuntu:18.04 bash
    root@65663247040f:/# echo "Hello World"
    Hello World
    root@65663247040f:/# exit
    

    2. 查看镜像信息 (ls tag inspect)
    使用docker images或docker image ls 命令可以列出本地主机上已有镜像的基
    本信息。
    docker images

    [root@localhost dockerTest]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    test                0.1                 31b42392b565        30 minutes ago      109MB
    nginx               Dockerfile          a6c379e97814        5 hours ago         109MB
    nginx               latest              f09fe80eb0e7        12 days ago         109MB
    

    reoisitory:来自哪个仓库
    tag:标签只是标记版本信息,不能表示版本内容
    image id:镜像的ID,如果两个镜像ID相同,说明它们实际上指向了同一个镜像,只是据有不同的标签名而已。
    created:创建时间。镜像的最后更新时间。
    size:镜像大小,优秀的镜像往往提及都较小,镜像大小信息只是表示了该镜像的逻辑体积大小, 实际上由于相同的镜像层本地只会存储一份, 物理上占用的存储空间会小于各镜像逻辑体积之和。

    images子命令主要支持如下选项, 用户可以自行进行尝试:
    -a, --all=true I false: 列出所有(包括临时文件)镜像文件,默认为否;
    –digests=true | false: 列出镜像的数字摘要值,默认为否;
    -f, --filter=[] : 过滤列出的镜像, 如dangling=true 只显示没有被使用的
    镜像;也可指定带有特定标注的镜像等;
    –format=“TEMPLATE” : 控制输出格式,如. ID代表ID信息,.Repository
    代表仓库信息等;
    –no-trune=true I false: 对输出结果中太长的部分是否进行截断,如镜像的 ID
    信息,默认为是;
    -q, --quiet式rue I false: 仅输出ID信息, 默认为否。
    其中, 还支持对输出结果进行控制的选项,如 -f. --filter=[]、–no-trune=true I false等
    -q,–quiet=true I false等。
    更多子命令选项还可以通过man docker-images来查看。

    tag
    使用tag命令添加镜像标签
    为了方便在后续工作中使用特定镜像,还可以使用docker tag命令来为本地镜像任
    意添加新的标签。 例如,添加一个新的myubuntu: latest镜像标签:

    $ docker tag ubuntu:latest myubuntu:latest
    $ docker images
    REPOSITORY	TAG			IMAGE ID		CREATED			SIZE
    ubuntu		18.04		452a96d8lc30	2 weeks ago		79.6MB
    ubuntu		latest		452a96d8lc30	2 weeks ago		79.6MB
    myubuntu	latest		452a96d8lc30	2 weeks ago		79.6MB
    

    细心的读者可能注意到, 这些myubuntu:latest镜像的ID跟ubuntu: latest是
    完全 一 致的,它们实际上指向了同一个镜像文件,只是别名不同而巳。docker tag命令添加的标签实际上起到了类似链接的作用。
    inspect
    使用inspect查询详细信息 docker [image] inspect

    $ docker inspect ubuntu		
    

    3. 搜索镜像
    docker search [option]

    [root@localhost dockerTest]# docker search nginx
    NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    nginx                                                  Official build of Nginx.                        10926               [OK]                
    jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker con…   1535                                    [OK]
    richarvey/nginx-php-fpm                                Container running Nginx + PHP-FPM capable of…   683                                     [OK]
    jrcs/letsencrypt-nginx-proxy-companion                 LetsEncrypt container to use with nginx as p…   482                                     [OK]
    webdevops/php-nginx                                    Nginx with PHP-FPM                              124                                     [OK]
    kitematic/hello-world-nginx                            A light-weight nginx container that demonstr…   121                                     
    zabbix/zabbix-web-nginx-mysql                          Zabbix frontend based on Nginx web-server wi…   91                                      [OK]
    bitnami/nginx                                          Bitnami nginx Docker Image                      60                                      [OK]
    linuxserver/nginx                                      An Nginx container, brought to you by LinuxS…   54                                      
    1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          49                                      [OK]
    tobi312/rpi-nginx                                      NGINX on Raspberry Pi / armhf                   24                                      [OK]
    nginx/nginx-ingress                                    NGINX Ingress Controller for Kubernetes         17                                      
    blacklabelops/nginx                                    Dockerized Nginx Reverse Proxy Server.          12                                      [OK]
    wodby/drupal-nginx                                     Nginx for Drupal container image                12                                      [OK]
    schmunk42/nginx-redirect                               A very simple container to redirect HTTP tra…   11                                      [OK]
    nginxdemos/hello                                       NGINX webserver that serves a simple page co…   11                                      [OK]
    centos/nginx-18-centos7                                Platform for running nginx 1.8 or building n…   10                                      
    centos/nginx-112-centos7                               Platform for running nginx 1.12 or building …   7                                       
    1science/nginx                                         Nginx Docker images that include Consul Temp…   4                                       [OK]
    mailu/nginx                                            Mailu nginx frontend                            3                                       [OK]
    pebbletech/nginx-proxy                                 nginx-proxy sets up a container running ngin…   2                                       [OK]
    travix/nginx                                           NGinx reverse proxy                             2                                       [OK]
    toccoag/openshift-nginx                                Nginx reverse proxy for Nice running on same…   1                                       [OK]
    ansibleplaybookbundle/nginx-apb                        An APB to deploy NGINX                          0                                       [OK]
    wodby/nginx                                            Generic nginx                                   0                                       [OK]
    
    

    可以看到返回了很多包含关键字的镜像, 其中包括镜像名字、 描述、 收藏数(表示该镜像
    的受欢迎程度)、 是否官方创建、 是否自动创建等。默认的输出结果将按照星级评价进行排序。
    更多命令查看docker search --help
    如果需要拉取指定的内容直接 docker pull 上述的NAME
    4. 删除和清理镜像
    使用标签删除镜像
    使用 docker rmi 或 docker image rm 命令可以删除镜像, 命令格式为 docker rmi IMAGE [IMAGE … ], 其中 IMAGE 可以为标签或 ID。
    -f, -force: 强制删除镜像, 即使有容器依赖它;
    -no-prune: 不要清理未带标签的父镜像。

    $ docker rmi myubuntu:latest
    

    如果镜像存在多个相同的ID删除不会影响此镜像,如果只剩一个,那么再次删除就是完全彻底删除镜像了。
    使用docker ps -a命令可以看到本机上存在的所有容器
    注意, 当有该镜像创建的容器存在时, 镜像文件默认是无法被删除的,需要先删除容器

    $ docker rmi ubuntu:18.04
    Error response from daemon: conflict: unable to remove repository reference
    "ubuntu:18.04" (must force) - con七ainer a2lc0840213e is using i七s referenced
    image 8flbd2lbd25c
    $ docker rm 8flbd2lbd25c
    $ docker rmi ubuntu:18.04
    

    查看当前本机上存在的所有容器

    [root@localhost dockerTest]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
    ce8a985d2d82        nginx               "/bin/bash"              14 hours ago        Exited (0) 14 hours ago                         agitated_kapitsa
    7c429fcd10c3        nginx:Dockerfile    "nginx -g 'daemon of…"   18 hours ago        Exited (137) 14 hours ago                       optimistic_antonelli
    ec4cf7d4dc31        nginx               "nginx -g 'daemon of…"   21 hours ago        Exited (0) 20 hours ago                         vigilant_grothendieck
    
    

    清理镜像
    使用Docker 一 段时间后, 系统中可能会遗留一些临时的镜像文件, 以及 一 些没有被使
    用的镜像, 可以通过docker image prune命令来进行清理。
    支待选项包括:
    D -a, -all: 删除所有无用镜像, 不光是临时镜像;
    D -fil 七 er fil 七 er: 只清理符合给定过滤器的镜像;
    D -f, -force: 强制删除镜像, 而不进行提示确认。
    第3章 使用Docker镜像 •!• 35
    例如, 如下命令会自动清理临时的遗留镜像文件层, 最后会提示释放的存储空间:
    $ docker image prune -f
    . . .
    Total reclaimed space: 1.4 GB

    5. 创建镜像
    创建镜像的方法主要有三种: 基于已有镜像的容器创建、 基千本地模板导入、 基于
    Dockerfile 创建。
    Docker 的 commit、build 子命令。(import略过)
    commit方式
    首先创建容器,指定一个镜像,根据镜像创建容器在提交一个新的镜像。

    $ docker run -it ubuntu:18.04 /bin/bash
    root@a925cb40b3f0:/# touch test
    root@a925cb40b3f0:/# exit
    

    记住容器的 ID 为 a925cb40b3f0。

    $ docker commit -m "Added a new file" -a "Docker Newbee" a925cb40b3f0 test:0.1
    

    查看镜像信息

    $ docker images
    

    build方式
    创建Dockerfile,Dockerfile就是一个文本文件,只要遵守Dockerfile规范编写执行命令就可以生成一个新的镜像。
    docker build[OPTIONS]上下文路径|URL
    创建一个Dockerfile文本

    FROM nginx
    RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
    vi Dockerfile
    
    [root@localhost dockerTest]# ll
    总用量 110296
    -rw-r--r--. 1 root root         0 2月  19 12:52 Dockerfile
    
    
    $ docker pull nginx
    $ docker build -t Dockerfile.
    或者
    $ docker build -t test:0.3 -f  /path/to/a/Dockerfile .
    


    或$ docker build -t Dockerfile:v0.1 .
    或$ docker build -f /path/to/a/Dockerfile .

    使用-t指定了镜像名为Dockerfile,由于没有使用-f指令,所以默认使用上下文路径下名为Dockerfile的文件认为是构建镜像的"Dockerfile"。最后指定上下文路径,在这条命令中,上下文路径是.
    可参考其资料如和书写自己的Dockerfile及详细语法
    https://www.cnblogs.com/ityouknow/p/8588725.html
    6. 存出和载入镜像
    生成镜像分享

    $  docker  save  -o  ubuntu_18.04.tar  ubuntu:18 .0 4
    

    载入镜像

    $ docker  load  -i ubuntu_18.04.tar
    

    四、操作docker容器

  • 相关阅读:
    C#中对ActiveX控件的调用
    C#打开播放器后指定其播放的视频文件的路径代码怎么写啊!
    利用Visual C#开发一个媒体播放器
    C# 播放器控件 的常用方法
    用C#打开一个pdf文件
    C#利用微软DirectX做的视频播放器
    请问C#高手: [DllImport("kernel32.dll")]是什么意思??
    C#中的abstract与virtual
    ListBox Grouping的研究(一):初探GroupItem对象
    一个“>”导致我调试了1个小时才解决问题
  • 原文地址:https://www.cnblogs.com/liclBlog/p/15349519.html
Copyright © 2011-2022 走看看