• Docker学习记录


    一、安装部署

    ##安装
    yum -y install docker
    
    ##启动
    systemctl start docker
    
    ##查看docker服务状态
    systemctl status docker
    
    ##pull hello-world
    docker pull hello-world
    
    ##run hello-world
    docker run hello-world

    碰到的问题

    Cannot set property TasksAccounting, or unknown property.

    问题原因:主要原因还是centos系统版本兼容性问题

    解决方案:将系统做更新升级,更新重启,即可解决。

    ##更新
    yum update
    
    ##重启
    systemctl restart docker

    配置文件

    /etc/docker/daemon.json

    配置镜像加速

    安装完docker后,要下载其docker镜像,可使用国内的镜像加速器来下载:使用方式:
        mkdir /etc/docker
        vim /etc/docker/daemon.json
          {  "registry-mirrors": ["https://registry.docker-cn.com"]  }

    阿里云镜像加速

    https://******.mirror.aliyuncs.com
    1. 登录阿里开发者平台
    
    https://promotion.aliyun.com/ntms/act/kubernetes.html#industry
    
    2. 点击“镜像搜索”
    
    自动跳转到控制台的镜像搜索
    
    3. 注册/登录后
    
    我用的支付宝登录
    
    进入Docker 镜像仓库 (https://cr.console.aliyun.com/#/imageList),选中加速器 Tab

    Docker镜像加速-配置阿里云镜像仓库 

    镜像加速器

    腾讯云加速

    https://mirror.ccs.tencentyun.com

    使用 DockerHub 加速器

    【注意】

    默认安装的不是最新版本,如有需要请安装最新版本

    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum makecache fast
    rpm --import https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
    yum -y install docker-ce
    systemctl enable docker
    systemctl restart docker

    、常用命令

    ###### nginx 为示例镜像名称 ######
    
    
    #版本查询 
    docker version
    
    #查看镜像
    docker search nginx   
    
    #查看已经下载的镜像
    docker images 
    
    #导出镜像
    docker save nginx >/tmp/nginx.tar.gz 
    
    #删除镜像
    docker rmi -f nginx    

    #删除tag为<none>的镜像
    docker images | grep none | awk '{print $3}' | xargs docker rmi
    #导入镜像 docker load </tmp/nginx.tar.gz #运行镜像 docker run nginx
    参数:

      -it: 以 交互模式启动
      -d: 以 附加进程方式启动
      -p 8009:80 指将host 8009 端口 映射到 容器内部 80 端口

    #查看运行中的镜像 
    docker ps 
    
    #查看所有镜像 
    docker ps -a 
    
    #查看镜像详情 
    docker inspect nginx 
    
    #查看日志 
    docker logs [OPTIONS] CONTAINER
      Options:
            --details        显示更多的信息
        -f, --follow         跟踪实时日志
            --since string   显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
            --tail string    从日志末尾显示多少行日志, 默认是all
        -t, --timestamps     显示时间戳
            --until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)



    #查看日志 - 举例

    docker logs -f nginx
     
    #在运行的容器中执行命令, 进入容器并执行命令 docker exec 容器ID或容器名
    例如:
    docker exec -it 容器id bash
    docker exec -it 容器id /bin/sh
    #优雅的停止容器 docker stop 容器ID或容器名 #直接关闭容器 docker kill 容器ID或容器名 #重启一个容器:不管容器是否启动,直接重启容器 docker restart 容器ID或容器名

    #启动一个容器
    docker start 容器ID或容器名 


    #删除容器
    docker rm [OPTIONS] 容器ID或容器名

      -f :通过SIGKILL信号强制删除一个运行中的容器
      -l :移除容器间的网络连接,而非容器本身
      -v :-v 删除与容器关联的卷

    按照【镜像名称】批量删除镜像

    docker images | grep "image-name" | awk '{print $1":"$2}' | xargs docker rmi

    三、Docker的资源限制

      Memory:
      OOM: 对于比较重要的容器,在启动时就要调整其OOM_adj, 其值调整越小, OOM_score的评分就越低,当内核发现内存不足,发生OOM时,就优先将OOM_score得分高的优先kill掉.
      默认: docker daemon会自动将自己的OOM_adj调整很低,避免内核发生OOM时,被内核kill掉.

    可调整容器使用内存的限制:
      -m | --memory=    #限制容器能使用的物理内存大小.单位:k, m, g; 若设置一个容器可用内存为4m,若容器使用超过,将被kill掉.
      --memory-swap=   #要使用它,必须先使用 -m 选项,否则它不生效.
        若设置: -m 7G --memory-swap=10G, 则表示Swap+Ram=10G, Swap=10-7=3G,即可使用3G的Swap内存.
        若设置: -m 7G --memory-swap=7G, 则表示不使用Swap内存.即 若设置这两个参数值相同,表示禁用SWAP.
        若设置: -m 7G --memory-swap=0, 则表示SWAP未设置, 则若DockerHost启用了SWAP,则表示容器可用的SWAP大小=2*RAM的大小.
        若设置: -m 7G --memory-swap=-1, 则表示DockerHost上启用了Swap,则容器可使用的全部的SWAP大小.
       注:
        free : 在容器中使用free看到的swap空间使用情况并非上面这些参数计算出来的实际情况, 也就是说free查看容器使用的内存空间是非常不准确的。
        --memory-swappiness: 设置容器使用SWAP内存的倾向性. 值的范围: 0~100, 0:能不用就不用, 100:只要能需要就使用.
        --memory-reservation: 设置要预留多少内存空间。
        --oom-kill-disable 设置当发生OOM时,是否禁止此容器被kill掉,它要可-m一起使用.

    CPU:
      默认所有容器使用CPU资源都没有限制。
      --cpu-shares #CPU是可压缩性资源,若当前有A,B,C三个容器, 假如分配给他们CPU占用的比例为:1024:512:2048.
            则表示,将CPU资源分2+1+4,即分成7份, 三个容器都需要CPU,则A使用2份CPU时间, B使用1份
            CPU时间, C使用4份CPU时间, 若B和C当前都空闲,则A可使用全部CPU资源; 若此时A和B都需要
            用CPU资源,则按照A使用2份CPU资源, B使用1份CPU时间, 若又新加了D,则再重新分割CPU时间片.
      --cpus=   #限制单个容器最多可使用几核CPU, 即: 假如有4个核心, 还是A,B,C, 若此时B和C都不使用CPU
            在不限制的情况下,A可使用4个核心,即最大可使用400%的计算能力.若设置了单个容器的
            最多可使用CPU核心数,则基本当前所有容器都不用CPU,你也只能使用限制个数的核心数.
      --cpus=1.5 #表示最多可用150%,注意容器最多可使用150%的CPU计算能力,指的是
            只有能限制它最多使用这么多计算能力即可,至于容器在那个CPU核心上
            运行无所谓,随机分配,分到那个核心上就在那个核心上运行。但总量是不会超过150%的。
      --cpuset-cpus= #这是限制容器能够运行在那个CPU核心上的, 假如:有4核心, 则用0~3来表示4个核心的编号.
      --cpuset-cpus=0,1   # 则表示容器只能运行在核心0和1上,其它上面不行。
      --cpu-period=     #限制最多可用CPU的时间.
      --cpu-quota=


    以上这些选项在docker run 时可以设置。

    四、使用容器需要避免的一些做法

    不要在容器中保存数据(Don’t store data in containers)

    将应用打包到镜像再部署而不是更新到已有容器(Don’t ship your application in two pieces)

    不要产生过大的镜像 (Don’t create large images)

    不要使用单层镜像 (Don’t use a single layer image)

    不要从运行着的容器上产生镜像 (Don’t create images from running containers )

    不要只是使用 “latest”标签 (Don’t use only the “latest” tag)

    不要在容器内运行超过一个的进程 (Don’t run more than one process in a single container )

    不要在容器内保存 credentials,而是要从外面通过环境变量传入 ( Don’t store credentials in the image. Use environment variables)

    不要使用 root 用户跑容器进程(Don’t run processes as a root user )

    不要依赖于IP地址,而是要从外面通过环境变量传入 (Don’t rely on IP addresses )

    五、容器编排工具

    Docker-Compose

    Docker Compose是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用。

    使用 compose,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建和启动。

    ##安装
    yum -y install docker-compose

    Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排

    Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)

    Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。

    一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。

    一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。

    Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

    使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。

    例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

    Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

    Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。

    使用方法

    #在docker-compose.yml 文件所在的文件夹中,执行如下命令
    docker-compose up -d

    Docker Machine

    Docker Machine 是一个工具,它允许你在虚拟宿主机上安装Docker,并使用docker-machine命令管理这个宿主机,

    可以使用Docker Machine在本地的MAC或者windows box、公司网络,数据中心或者AWS这样的云提供商上创建docker。

    使用docker-machine命令,可以启动、审查、停止、重启托管的docker 也可以升级Docker客户端和守护程序并配置docker客户端和宿主机通信。

    Docker Machine 也可以集中管理所以得docker主机。

    Swarm

    六、其他

    问:docker pull 下来的镜像都存到了哪里?

    答:docker pull 下来的命令都默认存在 /var/lib/docker/文件夹下。

    问:如何查看一个docker镜像有哪些版本?

    答:地址docker官方镜像仓库:https://hub.docker.com/r/library/

    1、进入之后,在页面左上角搜索框搜索,例如搜索 maven

    2、在搜索结果中选择相应的镜像,点击详情进入镜像详情页面

    3、查看tag

    参考资料:

    Docker 中文指南

    linux 安装docker

    Docker升级到最新版本

    Docker安装以及运行第一个HelloWorld

    安装Docker到CentOS(YUM)

    Docker及Docker-Compose的使用

    Docker快速入门——Docker-Compose

    docker-compose编排参数详解

    Docker三剑客之Docker Machine

    docker常规操作——启动、停止、重启容器实例

    docker rm & docker rmi & docker prune 的差异

    Docker容器进入的4种方式

    docker配置文件

    Docker配置文件位置

    Docker配置文件daemon.json解析

    docker pull 下来的镜像都存到了哪里

    docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面

    Docker命令详解-官方文档

    Docker 命令大全 - 菜鸟学院

    Docker 删除&清理镜像

    docker load 命令

    docker logs-查看docker容器日志

  • 相关阅读:
    C语言集锦(一) C代码生成图片:BMP、PNG和JPEG
    Win32 OpenGL标准例子
    Tcc学习笔记(一) 开篇
    C语言集锦(二) 图像显示 Windows和Linux
    矢量图和Word:EPS,PDF,EMF和SVG
    firefox浏览器无法显示bootstrap图标问题总结
    现代字体栈
    jquery 插件大全
    meta 详解,html5 meta 标签日常设置
    工厂方法模式Factory Method(Java实现)
  • 原文地址:https://www.cnblogs.com/wangwangfei/p/10338155.html
Copyright © 2020-2023  润新知