五分钟了解docker

文章目录[隐藏]

  • 四、Docker容器操作
  • Demo:基础操作
  • Demo:导入操作
  • Demo:容器的操作
  • Demo:对于开启的容器进行命令操作
  • 四、Docker资源控制
  • Demo1:CPU使用率控制
  • Demo2:按比例分配
  • Demo3:限制容器使用指定的CPU
  • Demo4:内存使用限制
  • Demo4:对blkio的限制
  • 五、Docker的数据管理
  • 数据卷
  • 数据卷容器
  • 内容要点:

    一、docker概述

    二、docker的核心概念及安装方式

    三、docker容器操作

    四、docker资源控制

    五、docker数据库管理

    一、Docker概述

    Docker是什么?

    1.是一种轻量级的“虚拟机”
    2.在Linux容器里运行应用的开源工具

    Docker与虚拟机的区别

    参考案例指导文档表1-1

    Docker的使用场景(spring clond微服务)

    1.打包应用程序简化部署
    2.可脱离底层硬件任意迁移
    3.例:服务器从腾讯云迁移到阿里云

    二、Docker的核心概念及安装方式

    Docker核心概念

    1.镜像
    2.容器
    3.仓库(共有,私有)

    CentOS安装Docker的两种方式

    1.使用CURL获得Docker的安装脚本进行安装
    2.使用YUM仓库来安装Docker

    Demo:在CentOS 7-4上安装Docker

    [root@localhost ~]# yum install yum-utils device-mapper-persistent-data lvm2 -y
    [root@localhost ~]# yum-config-manager --add-repo  
    [root@localhost ~]# ls 
    /etc/yum.repos.d/CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  docker-ce.repo#此时会显示docker的镜像源
    [root@localhost ~]# yum install -y docker-ce
    [root@localhost ~]# systemctl stop firewalld.service
    [root@localhost ~]# setenforce 0
    [root@localhost ~]# systemctl start docker.service
    [root@localhost ~]# systemctl enable docker.service
    [root@localhost ~]# docker search nginx     #搜索nginx镜像
    NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    nginx                             Official build of Nginx.                        12375               [OK]
    jwilder/nginx-proxy               Automated Nginx reverse proxy for docker con…   1704                                    [OK]
    richarvey/nginx-php-fpm           Container running Nginx + PHP-FPM capable of…   749                                     [OK]
    linuxserver/nginx                 An Nginx container, brought to you by LinuxS…   84     
    ......以下省略多项#显示出的仓库中的镜像按星级进行排名,星级越高,下载人数越多,自然就越靠谱
    [root@localhost ~]# docker pull nginx#此时我们不使用加速进行下载
    Using default tag: latest
    latest: Pulling from library/nginx
    000eee12ec04: Downloading  3.083MB/27.09MB
    eb22865337de: Downloading  1.703MB/23.74MB
    bee5d581ef8b: Download complete
    #此时速度会非常慢,有时候甚至会出现卡顿
    
    #我们可以在此处做一个优化操作就是:镜像加速`此命令可以在阿里云的官网上搜索“官方镜像加速”从而获取到自己的命令代码(需要先注册阿里云平台的账号)`
    `找到控制台,登陆后找到左侧的“产品与服务”,再找到“容器镜像服务”,再找到左侧的“镜像加速器”,在“操作文档”中选择自己的系统,此处我们需要选择“CentOS”,就可以找到自己账号生成的镜像加速配置文件`
    
    [root@localhost ~]# tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://w1ogxqvl.mirror.aliyuncs.com"]
    }
    EOF
    
    [root@localhost ~]# systemctl daemon-reload
    [root@localhost ~]# systemctl restart docker
    [root@localhost ~]# docker pull nginx
    Using default tag: latest
    latest: Pulling from library/nginx
    000eee12ec04: Pull complete
    eb22865337de: Pull complete
    bee5d581ef8b: Pull complete
    Digest: sha256:50cf965a6e08ec5784009d0fccb380fc479826b6e0e65684d9879170a9df8566
    Status: Downloaded newer image for nginx:latest
    docker.io/library/nginx:latest
    #此时很快就可以下载完成了
    [root@localhost ~]# docker images               #查看下载下来的镜像
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               latest              231d40e811cd        4 weeks ago         126MB

    四、Docker容器操作

    创建容器:

    docker create [选项]镜像运行的程序

    -i让容器的标准输入保持打开
    -t 让Docker分配一个伪终端

    查看容器运行状态:

    docker ps [选项]

    -a列出最近一次启动的容器

    启动容器:

    docker start容器的ID/名称

    创建容器并启动执行shell命令:

    docker run [选项]镜像运行的程序执行的命令

    -d在后台进行运行

    终止容器:

    docker stop容器的ID/名称

    进入容器:

    docker exec [选项]容器的ID/名称/bin/bash

    导出容器:

    docker export容器的ID/名称&gt;文件名

    导入容器:

    cat文件名| docker import -生成的镜像名称:标签

    删除容器:

    docker rm [选项]容器的ID/名称

    Demo:基础操作

    [root@localhost ~]# docker inspect 231d40e811cd             #查看镜像信息
    [
        {
                "Id": "sha256:231d40e811cd970168fb0c4770f2161aa30b9ba6fe8e68527504df69643aa145",
                        "RepoTags": [
                                    "nginx:latest"
            ],
                    "RepoDigests": [
    ......以下省略多行
    
    [root@localhost ~]# docker tag nginx:latest nginx:web       #重新定义标签
    [root@localhost ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               latest              231d40e811cd        4 weeks ago         126MB
    nginx               web                 231d40e811cd        4 weeks ago         126MB
    [root@localhost ~]# docker images | grep nginx
    nginx               latest              231d40e811cd        4 weeks ago         126MB
    nginx               web                 231d40e811cd        4 weeks ago         126MB
    #删除镜像
    [root@localhost ~]# docker rmi nginx:web
    Untagged: nginx:web
    [root@localhost ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               latest              231d40e811cd        4 weeks ago         126MB
    #存出镜像
    [root@localhost ~]# cd /opt/
    [root@localhost opt]# lscontainerd  rh
    [root@localhost opt]# docker save -o nginx nginx:latest
    [root@localhost opt]# lscontainerd  nginx  rh
    [root@localhost opt]# ls -lh
    总用量 125M
    drwx--x--x. 4 root root   28 12月 24 11:01 containerd
    -rw-------. 1 root root 125M 12月 24 11:17 nginx
    drwxr-xr-x. 2 root root    6 3月  26 2015 rh

    Demo:导入操作

    需要再打开另外一台虚拟机CentOS 7-5,并安装Docker引擎:

    [root@localhost ~]# docker images               #此时Docker镜像是空的
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    再回到CentOS 7-4,将之前导出的nginx文件导入到另一台虚拟机上:

    [root@localhost opt]# scp /opt/nginx root@192.168.18.145:/opt/
    The authenticity of host '192.168.18.145 (192.168.18.145)' can't be established.
    ECDSA key fingerprint is SHA256:mTT+FEtzAu4X3D5srZlz93S3gye8MzbqVZFDzfJd4Gk.
    ECDSA key fingerprint is MD5:fa:5a:88:23:49:60:9b:b8:7e:4b:14:4b:3f:cd:96:a0.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.18.145' (ECDSA) to the list of known hosts.
    root@192.168.18.145's password:
    nginx                                                        100%  124MB 124.0MB/s   00:01
    再回到CentOS 7-5上进行查看操作:

    [root@localhost ~]# cd /opt/
    [root@localhost opt]# ls
    containerd  nginx  rh
    [root@localhost opt]# docker load  < nginx              #导入过程
    831c5620387f: Loading layer  72.48MB/72.48MB
    5fb987d2e54d: Loading layer  57.67MB/57.67MB
    4fc1aa8003a3: Loading layer  3.584kB/3.584kB
    Loaded image: nginx:latest
    [root@localhost opt]# docker images             #查看镜像
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               latest              231d40e811cd        4 weeks ago         126MB

    Demo:容器的操作

    [root@localhost opt]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@localhost opt]# docker create -it nginx:latest /bin/bash        #容器创建82013604d57b7e0cbad870b367ca241579581a3c34d977aec58157a89fe9188e
    [root@localhost opt]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    82013604d57b        nginx:latest        "/bin/bash"         18 seconds ago      Created                                 laughing_robinson
    [root@localhost opt]# docker start 82013604d57b             #启动
    82013604d57b
    [root@localhost opt]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    82013604d57b        nginx:latest        "/bin/bash"         2 minutes ago       Up 20 seconds       80/tcp              laughing_robinson
    #此时状态为up,端口为80
    
    [root@localhost opt]# docker search centos7
    [root@localhost opt]# docker pull paigeeworld/centos7
    [root@localhost opt]# docker images
    REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
    nginx                 latest              231d40e811cd        4 weeks ago         126MB
    paigeeworld/centos7   latest              4cbe7aa905e7        5 years ago         382MB
    
    [root@localhost opt]# docker create -it paigeeworld/centos7/bin/bash
    fe74e5e0e354e855f76b2edc043358c71f9a2e99d10ac3875c610e1fd9dac4d7
    [root@localhost opt]# docker ps -a
    CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS               NAMES
    fe74e5e0e354        paigeeworld/centos7   "/bin/bash"         8 seconds ago       Created                                 trusting_satoshi
    #此时只是Created创建好的状态
    [root@localhost opt]# docker start fe74e5e0e354             #启动
    fe74e5e0e354
    [root@localhost opt]# docker ps -a
    CONTAINER ID        IMAGE                 COMMAND             CREATED              STATUS              PORTS               NAMES
    fe74e5e0e354        paigeeworld/centos7   "/bin/bash"         About a minute ago   Up 11 seconds                           trusting_satoshi
    82013604d57b        nginx:latest          "/bin/bash"         8 minutes ago        Up 6 minutes        80/tcp              laughing_robinson
    #此时是Up开启的状态

    Demo:对于开启的容器进行命令操作

    [root@localhost opt]# docker run paigeeworld/centos7 /usr/bin/bash -c ls /
    #查看镜像根目录下有哪些文件bin
    boot
    dev
    etc
    home
    lib
    lib64
    lost+found
    media
    mnt
    opt
    proc
    root
    run
    sbin
    srv
    sys
    tmp
    usr
    var
    [root@localhost opt]# docker ps -a
    CONTAINER ID        IMAGE                 COMMAND                  CREATED              STATUS                          PORTS               NAMES
    d04961e9862f        paigeeworld/centos7   "/usr/bin/bash -c ls…"   About a minute ago   Exited (0) About a minute ago                       frosty_pare
    #docker run = 镜像做了create然后start,再进入到容器中执行了ls,最后执行了stop
    此时我们再对没有此镜像的CentOS 7-5 执行相同操作,看看有何不同:
    它会先找仓库进行下载,再创建容器,再启动容器 ,在执行ls命令,最后再stop,过程一气呵成(过程如下图)

    五分钟了解docker

    #进入容器[root@localhost opt]# docker ps -a
    CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                      PORTS               NAMES
    d04961e9862f        paigeeworld/centos7   "/usr/bin/bash -c ls…"   15 minutes ago      Exited (0) 15 minutes ago                       frosty_pare
    fe74e5e0e354        paigeeworld/centos7   "/bin/bash"              22 minutes ago      Up 21 minutes                                   trusting_satoshi
    82013604d57b        nginx:latest          "/bin/bash"              30 minutes ago      Up 28 minutes               80/tcp              laughing_robinson
    [root@localhost opt]# docker exec -it fe74e5e0e354 /bin/bash        #选择运行的容器进入环境
    bash-4.2# ls /bin   dev  home  lib64       media  opt   root  sbin  sys  usr
    boot  etc  lib   lost+found  mnt    proc  run   srv   tmp  var
    bash-4.2# exit
    exit
    #终止运行
    [root@localhost opt]# docker stop fe74e5e0e354              #停止
    fe74e5e0e354
    [root@localhost opt]# docker ps -a
    CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                       PORTS               NAMES
    fe74e5e0e354        paigeeworld/centos7   "/bin/bash"              25 minutes ago      Exited (137) 4 seconds ago                       trusting_satoshi
    #此时状态为退出

    四、Docker资源控制

    限制CPU使用速率:

    1.通过--cpu-quota选项来限制CPU的使用率
    2.通过修改配置文件cpu.cfs_quota_us实现

    多任务按比例分享CPU:(其中数字为权重)

    docker run --cpu-shares 1024容器A
    docker run --cpu-shares 1024容器B
    docker run --cpu-shares 2048容器C

    使用--cpuset-cpus选项限制CPU内核使用权

    Demo1:CPU使用率控制

    [root@localhost ~]# docker run --cpu-quota 20000 nginx:latest
    #该容器在电脑中所占资源只有20%,如果没有设置它就会对别的资源进行抢占
    [root@localhost ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
    e1e8a4aef629        nginx:latest        "nginx -g 'daemon of…"   5 seconds ago       Up 4 seconds               80/tcp              strange_dubinsky
    #此时会显示一个新的进程(需要新开一个终端进行查看)
    
    [root@localhost ~]# cd /sys/fs/cgroup/cpu/docker/
    [root@localhost docker]# ls
    cgroup.procs           cpu.shares
    cpuacct.stat           cpu.stat
    cpuacct.usage          e1e8a4aef6293bb2f116fe219ef0e2e190d9e094d79bb583925b49d0af3e9e67
    #此时会在配置文件的目录下找到以’e1e8a4aef629’开头的配置文件
    [root@localhost docker]# cd e1e8a4aef6293bb2f116fe219ef0e2e190d9e094d79bb583925b49d0af3e9e67
    [root@localhost e1e8a4aef6293bb2f116fe219ef0e2e190d9e094d79bb583925b49d0af3e9e67]# ls
    cgroup.clone_children  cpuacct.usage         cpu.rt_period_us   notify_on_release
    cgroup.event_control   cpuacct.usage_percpu  cpu.rt_runtime_us  tasks
    cgroup.procs           cpu.cfs_period_us     cpu.shares
    cpuacct.stat           cpu.cfs_quota_us      cpu.stat
    [root@localhost e1e8a4aef6293bb2f116fe219ef0e2e190d9e094d79bb583925b49d0af3e9e67]# cat cpu.cfs_quota_us     #此quota文件可以设置上限值20000
    Demo2:按比例分配

    [root@localhost docker]# docker pull paigeeworld/centos7
    #需要再下载一个cento7的镜像
    [root@localhost docker]# docker images
    REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
    nginx                 latest              231d40e811cd        4 weeks ago         126MB
    paigeeworld/centos7   latest              4cbe7aa905e7        5 years ago         382MB
    
    `创建两个容器为c1和c2,若只有这两个容器,设置容器的权重,使得c1和c2的CPU资源占比为33.3%和66.7%`
    [root@localhost docker]# docker run -itd --name cl --cpu-shares 512 paigeeworld/centos7ab596821561386ec6519652606b79b363e548f29ad2c289480f7a577e8f5803b
    [root@localhost docker]# docker run -itd --name c2 --cpu-shares 1024 paigeeworld/centos7462562fbf8ba7614328c3afde41bcc466dd329fbfe79317b5ec0e6e5cefde71d
    
    [root@localhost docker]# docker ps -a
    CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                      PORTS               NAMES
    462562fbf8ba        paigeeworld/centos7   "/bin/bash"              35 seconds ago      Up 34 seconds                                   c2
    ab5968215613        paigeeworld/centos7   "/bin/bash"              36 seconds ago      Up 36 seconds                                   cl#此时就会产生cl和c2两个新的容器了,分别占用1/3和2/3
    Demo3:限制容器使用指定的CPU

    [root@localhost docker]# docker run --name c3 --cpuset-cpus 0,1 paigeeworld/centos7
    #此时可以使用到两个核心数资源
    Demo4:内存使用限制

    [root@localhost docker]# docker run --name c4 -m 512m paigeeworld/centos7
    [root@localhost docker]# docker ps -aCONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                      PORTS               NAMES
    580c4e066308        paigeeworld/centos7   "/bin/bash"              3 seconds ago       Exited (0) 2 seconds ago                        c4
    Demo4:对blkio的限制

    --device-read-bps:限制读某个设备的bps(数据量)  
    [root@localhost dev]# docker run -d --device-read-bps /dev/sda:30mb paigeeworld/centos7627b05085a2305f5e2ef5a3725458e25b85441c8e400402f72f562fb71813ab1
    
    --device-write-bps:限制写入某个设备的bps(数据量) 
    例:docker run -d --device-write-bps /dev/sda:30mb paigeeworld/centos7
    
    --device-read-iops:限制读某个设备的iops (次数)
    --device-write-iops:限制写入某个设备的iops (次数)

    五、Docker的数据管理

    数据管理操作:

    1.方便查看容器内产生的数据
    2.多容器间实现数据共享

    两种管理方式:

    1.数据卷
    2.数据卷容器


    数据卷:直接在centos上添加,可实现数据共享,实现的是宿主和容器之间的数据共享

    数据卷容器:容器之间实现共享,和宿主机没有关系,A容器中的a目录与B容器上的d目录实现数据共享


    数据卷

    数据卷是一个提供容器使用的特殊目录

    创建数据卷:

    docker run -d -v /data1 -v /data2 --name web
    httpd:centos

    挂载主机目录作为数据卷:

    docker run -d -v /var/www:/data1 --name web-1
    httpd:centos


    数据卷容器

    1. 数据卷容器就是一个普通的容器
    2. 挂载web容器中的数据卷到新的容器

    docker run -it --volumes-from web --name db1
    httpd:centos /bin/bash

    原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/182809.html

    (0)
    上一篇 2021年11月1日 23:00
    下一篇 2021年11月1日 23:01

    相关推荐

    发表回复

    登录后才能评论