• 第一节:docker简介、下载和配置镜像加速器、以及镜像和容器的使用


    一. docker简介

    1. docker背景

     我们在实际开发中,会接触到多个环境,比如:开发环境、测试环境、生产环境。经常会出现程序员在本机上运行好用的代码,迁移到测试环境中不好用了; 测试环境校验没问题的程序发布到生产环境中又出错了,然后开发、测试、运维各方人员开始扯皮,干架,出现这种情况,很大的一个原因是不同环境下所安装的Runtime时版本不同,比如开发环境中安装的是 .Net Core 3.1 ,而测试环境中安装的是.Net Core 2.2 ; 再比如测试环境中安装的是JDK8,生产环境中安装的是JDK7,就会产生“水土不服”的问题,从而报错。

     

       docker的诞生就是为了解决这种软件跨环境迁移而出现的水土不服的问题。将发布包和运行环境一起打包在一个容器中进行迁移,就解决上述问题。

     

    2. docker相关概念

     Docker 是一个开源的应用容器引擎诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc)

     Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。

     容器是完全使用沙箱机制,相互隔离,容器性能开销极低

     Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)

     

    3. 镜像、容器、仓库

    (1). 镜像(Image):就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

              就像软件安装包。我们可以把镜像拉(pull)下来,增加我们的更改,然后发布(push)成新的镜像,别人也可以下载我们发布的镜像,然后继续更改,继续发布;

    (2). 容器(Container):镜像安装后运行的实例;同一个镜像可以在同一台服务器上安装成多个容器,同一个镜像可以同时装在多个不同的服务器上

    PS:镜像和容器的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

    (3). 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像,有公有仓库和私有仓库之分。常见的docker的官方仓库、阿里云、腾讯云等等。

     

    4. 相关地址

     docker官网:https://www.docker.com/

     镜像官方地址:https://hub.docker.com/    (可以去搜索各种镜像,查询镜像的版本号等)

    二. 下载和配置镜像加速器

    1. docker的安装

    (1). yum 包更新到最新  (可省略这一步!!更新比较慢

    【sudo yum update】

    (2). 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

    【sudo yum install -y yum-utils device-mapper-persistent-data lvm2】

    (3). 设置yum源

    【sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo】

    (4). 安装docker,出现输入的界面都按 y  (在指令中加入  -y的话,一路安装不需要确认了)

    下载最新版本:sudo yum install -y docker-ce docker-ce-cli containerd.io

                         或 【sudo yum install -y docker-ce】 这里发现我只安装docker-ce的时候,docker-ce-cli 和 containerd.io这两个工具也都给安装了,所以这两个指令等效

    eg:失败截图(或者安装完以后无法启动,建议先安装containerd.io ,再安装 docker-ce ,docker-ce-cli ,详见下面)

    根据提示执行命令: sudo yum install -y docker-ce docker-ce-cli containerd.io --nobest】 或sudo yum install  -y docker-ce docker-ce-cli containerd.io --skip-broken】 完成下载  (下载比较慢,大约10min)

    下载中截图:

    在centos8系统中,上述步骤可能还不行,需要先单独安装一下containerd.io,

    sudo yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm

    然后再重新执行一下docker的安装指令 【sudo yum install -y docker-ce docker-ce-cli】

    (5). 查看docker版本,验证是否验证成功

    【docker -v】

     

    2. docker相关指令

    (1). 启动docker:【sudo systemctl start docker】

    (2). 停止docker:【sudo systemctl  stop docker

    (3). 重启docker:【sudo systemctl restart docker

    (4). 查看docker服务状态:sudo systemctl  status docker

    (5). 设置开机启动docker:sudo systemctl  enable docker

     

    3. 配置镜像加速器

    (1). 默认镜像的下载地址是:https://hub.docker.com/  国外的,下载慢的要死,我们可以把它配置成国内的镜像,常见的有以下这几种:

      USTC:中科大镜像加速器(https://docker.mirrors.ustc.edu.cn)

      阿里云:注册登录后查看  (推荐!!!)

      网易云:注册登录后查看

      腾讯云:注册登录后查看

    (2) . 配置阿里云的镜像加速器(都类似)

    A. 登录阿里云--------进入控制台------搜索容器镜像服务并进入-------选择镜像加速器--------复制地址

    B. 进入Linux系统

    (1). 打开配置文件: 【vi /etc/docker/daemon.json】 默认是空的

    (2). 复制下面代码到上面的文件里,进行保存

    { "registry-mirrors": ["https://阿里云复制的地址"] }

    (3). 执行相关重启命令:【sudo systemctl daemon-reload 】和【sudo systemctl restart docker

    简单方法(推荐)

      直接去阿里云那复制整段代码,copy到Linux系统,敲回车一步搞定。

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://ijmr3it2.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker

    三. 镜像和容器的使用

    1. 镜像

    A 相关指令:

    (0). 构建镜像:docker build -t  <imageName>:版本号 .      (注:最后是一个空格和一个点, 版本号可以省略)

    ps:如果Dockerfile文件不在当前目录,或者重命名了,需要通过 -f参数指定路径。  eg:【docker build -f ./ypfcentos_Dockerfile -t ypfcentos:1.0 .    】  

    (1). 搜索镜像: docker search imageName

    (2).下载镜像:docker pull <imageName> 

         下载指定版本号的镜像:docker pull imageName:版本号

    PS:镜像可以去这个网站上找:https://hub.docker.com ,版本号也上这找。

    (3). 查看所有映像:docker images   【等价 docker image ls】

    (4). 查看所有镜像ID:docker images –q

    (5). 删除指定镜像:docker rmi <imageid  或 imageName>

    (6). 删除全部镜像:docker rmi $(docker images -q)

    (7). 删无标签镜像:docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

    B. 案例:

    (1). 删除系统中nginx镜像 和 redis 镜像(分别通过name 和 ID)

    (2). 下载5.7版本的MySql镜像

     先去仓库中查询一下有没有5.7这个版本,经查询是有的, 然后进行下载即可。

    2. 容器

    A. 相关指令:

    (1). 运行容器:docker run 各种参数 <imageName>    

    PS:当本机一个镜像存在多个版本的时候需要加上版本号:  docker run 各种参数 <imageName>:版本号

    参数说明:

    --name:指定容器名称  eg:   --name=ypf  或者 --name ypf  都行

    -i:保持容器运行。通常与 -t  或 -d同时使用。

    -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用,容器创建后自动进入容器中,退出容器后,容器自动关闭

    -d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭。

      -it 创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器

    -p:指定端口映射  eg: -p 5001:80 (其中5001表示docker主机《即linux系统》对外开放的端口,80表示容器对外开放的端口-dockerFile中)

    -P:暴露所有端口 

     常用组合:

    【docker run -it --name=xxx  <imageName>】: 以交互式创建容器,容器创建后自动进入容器中,退出容器后,容器自动关闭

    【docker run -id --name xxx  <imageName>:7】:以守护时创建容器,并且制定使用镜像的版本为7, i可以省略

    【docker run --name xxx -id -p 5001:80 <imageName>】: 以守护时创建容器,并做端口映射,linux端口5001,容器端口为80

    (2). 查看运行容器:docker ps      【等价  docker container ls】

          查看所有容器:docker ps -a  

    (3). 进入容器内部:docker exec -it <containerId> /bin/bash       (可省略bin,简介写法  【docker exec -it <containerId> bash】)

    注:这里不能 -id

    (4). 退出当前容器:exit

    (5). 启动一个容器:docker start  <containerId  或 containerName>

    (6). 停止一个容器:docker stop $(docker ps -q)

          停止一个容器:docker stop $(docker ps -q)

    (7). 删除单个容器:docker rm <containerId  或 containerName>    (加个 -f 可以强制删除启动的容器

       删除所有容器:docker rm $(docker ps -aq)

    (8). 查看容器信息:docker inspect  <containerName>

    (9). 查看容器日志:

    docker logs [OPTIONS] 容器name/ID
      Options:
            --details        显示更多的信息
        -f, --follow         跟踪实时日志
            --since string   显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
            --tail string    从日志末尾显示多少行日志, 默认是all
        -t, --timestamps     显示时间戳
            --until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

    假设容器的名字为test1

     A. 查看最近20分钟内的所有日志 

    docker logs --since 20m  test1】

     B. 查看最近20分钟内的最新的100条日志

    docker logs --since 20m --tail 100 test1】

     C. 查看最近20分钟内的最新的100条日志,并实时监控后续日志

    docker logs -f --since 20m --tail 100 test1】

     D. 查询某个时间段内的日志

    docker logs --since="2020-09-17" test1】   查询20200917后的所有日志

    docker logs --since="2020-09-17"  --until="2020-09-18" test1】查询20200917-20200918之间的日志

    B. 案例:

    (1). 用交互式的方式创建一个名为myCentos1的容器,查看是否直接进入容器,退出后容器是否关闭。

    (2). 指定端口的用法

    【docker run -id --name=ypfwebapicontainer1 -p 8000:9000 ypfwebapi1】 

    (3). 随机所有端口的用法

     【docker run -id --name=test1 -P ypfwebapi1】

     

    !

    • 作       者 : Yaopengfei(姚鹏飞)
    • 博客地址 : http://www.cnblogs.com/yaopengfei/
    • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
    • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
     
  • 相关阅读:
    TC2.0库函数大全
    【转帖】2004年度电影作品盘点之好莱坞篇
    C++文件流读写txt文件
    Linux 使用技巧
    最长字符串匹配算法(KMP算法)
    回调函数
    C#中对XML文件的一些基本操作[转载]
    指针与引用的区别
    中文核心期刊目录
    十大最考验演技的角色
  • 原文地址:https://www.cnblogs.com/yaopengfei/p/13611563.html
Copyright © 2020-2023  润新知