• 【随手记录】关于docker的一些基础


    1.1、服务器docker安装

      找下对应的安装环境,本地还是生产环境,搜下安装教程

    1.2、docker配置、命令

      1.2.1、配置文件

        位于/etc/docker/daemon.json

        常见配置:

    默认网段:
    
      "bip": "168.188.0.1/16"
    
    文件存储路径:
    
      "data-root": "/data/lib/docker"
    
    镜像仓库:
    
      "registry-mirrors": [
    
          "https://reg-mirror.qiniu.com",
    
          "http://hub-mirror.c.163.com"
    
      ]
    
    日志相关:
      #日志驱动
      "log-driver": "json-file",  
    
      "log-opts": {
    
          "max-size": "10m",
    
          "max-file": "3"
    
      }
    存储驱动:
    
      "storage-driver": "overlay2"
    
    私有仓库信任:
    
      "insecure-registries": [
    
          "http://172.20.1.208:8080"
    
      ]

    docker日志驱动类型:

        改完保存配合文件,重启docker,docker info可以查看docker一些配置信息

      1.2.2、镜像

        docker pull xx 仓库拉取镜像(默认中央仓库) ,默认latest版本 中央仓库地址: https://hub.docker.com/
    
        docker images -a 展示所有镜像
    
        docker load -i xx.rar 导入镜像
    
        docker save cent:v1 -o ~/desktop/xx 保存镜像
    
        docker login --username=xx --password=xxx1234! https://dockerhub.yndk.cn     登陆私有仓库
    
        docker push dockerhub.yndk.cn/fwgl/fwgl-consumer-app:1.8 推送镜像
    

      1.2.3、容器   

      docker run -d -p 8090:8090 -v `pwd`/my_opts:/opt/iserverOPTs supermap/iserver:latest 启动一个容器
    
        -d 后台运行
    
        -v 挂载
    
        -p 端口映射出来
    
        -it xx bash 进入镜像交互
    
        --restart=always    开机自启动
    
        --name yolov3_spp 起个名称
    
      docker ps -a 查看所有容器
    
      docker stats --no-stream -a 容器占用资源情况查看

      1.2.4、dockerfile & docker build构建镜像 

      FROM python:3.6-alpine 基础镜像(alpine精简版 - 安全)
    
      ADD . /code
    
      WORKDIR /code
    
      RUN pip install redis flask
    
      CMD ["python", "app.py"]
    

        docker build -t nginx:v3 . 打镜像

          -t 是选项 指定新定义镜像名称、版本

         后面那个 . 指的是镜像操作上下文,docker本身是一个cs架构,我们的命令行好比一个客户端,通过命令 然后转成restAPI然后去访问docker engine 我们的docker build命令也是在服务端进行构建镜像的,同时 有时候我们的构建里 不仅仅是run指令还有其他指令 比如 copy add这些,用来给镜像添加文件, 这时候构建之前需要把所需的文件拷贝到服务端engine,然后再进行操作,这时候就需要指定需要拷贝的文件所在的路径,也就是镜像上下文

          一般是 新建一个目录 把需要的文件 和 Dockerfile一起放进去 特别是别放在根目录下 太大了!

         Sending build context to Docker daemon 2.048 GB    <---像这样,这句表示要发给docker守护进程要打镜像了,文件有多大!

         .dockerignore 配置文件可以写不需要拷贝到镜像的文件

         docker build本质还是docker的daemon守护进程在基础镜像基础上,开始一条条的执行每一行命令,没执行一行就会commit一次!docker 镜像其实本质是文件目录,可以把镜像解压缩,可以看到每个镜像都是一些文件组成的,包含一个manifest元信息文件,里面记录了该镜像对应的配置文件(开放端口、挂载目录、环境变量)、层文件(具体文件)、清单文件(需要哪些文件)拉取镜像时候会先拉 manifest文件,然后再根据manifest拉取各类清单文件,如果清单文件本地有则不用获取(上传也是一个道理 避免重复)

        docker构建一些要点:

         1、精简、官方镜像

         2、RUN等命令合并

         3、上下文、.dockerignore 可以写不需要处理的文件

         4、分阶段构建,基础环境打一个镜像,使用打一个,类似 cent:v1 公司object

        官方构建文档:

           https://docs.docker.com/engine/reference/builder/  

          1.CMD docker 容器启动之后 默认运行的命令,docker容器本身也是一个进程,CMD意思是这个进程启动之后运行的命令!可以在启动容器时候 + 命令 替换默认的! ----> docker run xxx cat xxx 
          2.ENTRYPOINT 也是添加容器启动时候去运行的命令 和 参数,但是区别在于 ENTRYPOINT 会把 启动时候的参数 和 dockerfile写的命令拼接起来一起执行 而CMD 是启动时的参数直接替换原本dockerfile写的参数!
          3.RUN   && 可以把多条指令融合, 顺序执行! 每条指令的末尾 可以加 \表示换行! 每行开头可以加 #注释 如果有下载安装过程,最后一条命了需要把多余的安装包给清理掉! apt-get purge -y --auto-remove $buildDeps  docker是多层存储的 前一层的内容不会被后一层操作!要是留着安装包 永远操作不了了!
            4.ENV name=xyl age=xxx 设置环境变量,便于统一管理操作!
          5.ARG 也是设置环境变量,但是在容器运行时候 这些环境变量都会被替换成 值引用不再存在,但是可以在docker history里查看历史!
           --build-arg <参数名>=<值>  可以在docker build --build-arg <参数名>=<值> 来替换默认的变量!
          6.VOLUME /data 匿名卷,为了避免用户运行容器时候 忘记创建数据卷添加的匿名卷! 可以在 docker run -v myvolume:/data xx替代匿名!
          7.EXPOSE <端口1> [<端口2>...] 只是声明容器可能用这个端口! 并不会真的暴露!
          8.WORKDIR
            如该目录不存在,WORKDIR 会帮你建立目录,创建的目录 是相对于当前的路径的 比如 workdir /a workdir b --> /a/b这样! 目录不存在帮忙创建!
          UN 分层存储,每层都是一个新的工作目录 互相不影响、不能操作!WORKDIR 意思是之后的层都用统一的工作目录 可以相互操作!
          9.USER    跟WORKDIR一样,WORKDIR是改变统一的工作目录,USER是改变工作用户!但是这个用户需要存在!
          10.Label "key" = "value" key="value" 可以添加多个,主要是给容器添加元数据!
          11.Add 有缺点,可能导致镜像缓存失效,从而导致镜像构建的特别慢!
          12.COPY /xx /xx    这里copy的源 目录是相对于工作目录的(就是docker build xx . 最后这个点对应的目录!) 

      1.2.4、docker网络相关

        docker port dockerId 查看容器开放端口

          https://www.jianshu.com/p/04b33284f742

      1、如果你对一个容器使用的是host网络驱动,这个容器的网络栈并不是和docker宿主机隔离的。例如,你启动了一个容器绑定的是80端口,使用的host网络驱动,而你的应用程序将使用主机的ip和端口。
    
        host驱动只支持 Linux 且必须打开端口!
    
      2、bridge 桥接网络,虚拟网络设备,连接 docker容器 和 外部网络!
    
      3、OverLay网络
    
        多个 docker宿主机 之间架构了一个分布式网络!允许加入该网络的容器互联!
    
      4、none 禁用网络
    
      5、container模式
    
      container: docker镜像内部通信
    
       * docker run -it --name xx1 image sh
    
       * docker run -it --name xx2 --network xx1 image sh

      1.2.5、docker-compose

      version: ""  https://docs.docker.com/compose/compose-file/   这个version不是随便写的!  需要跟版本对应!!
    
      services:
    
      image: xxx/xx
    
      build:
    
         context: ./
    
      dockerfile: xxx/xxx
    
      args:
      depends_on:
    
        -db
    
       -redis ---> 依赖镜像, 服务不会等待 redis db 「完全启动」之后才启动,只要依赖开始启动就算! 启动xxx时候 也会启动depends,关闭时候先关闭xxx再关闭依赖!
    
     dns:
    
        - 8.8.8.8
    
        - 114.114.114.114 
    
    env_file:
    
      - ./common.env
    
      - ./apps/web.env
    
      - /opt/secrets.env 在配置文件设置环境变量! 如果与environment冲突,则以environment为主!  配置文件注释可以以 # 开头的注释    相对于compose.yml路径!
    
     healthcheck: 健康检查!
    
      test: ["CMD", "curl", "-f", "http://localhost"]
    
      interval: 1m30s
    
      timeout: 10s
    
      retries: 3
    
     network_mode: "bridge"
    
     networks:
    
     ports:
    
     ulimits:
    
        nproc: 65535 最大进程数
    
        nofile: 文件数
    
          soft: 20000
    
          hard: 40000
    
      volumes:
    
      - /var/lib/mysql
    
     logging
    
       driver: "json-file"
    
      options:
    
        max-size: "200k"
    
        max-file: "10"
    
    
    docker-compose -f xxx.yml up -d 启动容器
    
    docker-compose -f xxx.yml down
  • 相关阅读:
    JavaScript基础知识
    font属性+ul列表+table属性+border属性
    一级段项目学习
    考点整理代码块系列
    考试点总结
    JavaScript复习
    1017
    复习HTML
    1012总结
    1011js学习总结
  • 原文地址:https://www.cnblogs.com/whaleX/p/16226209.html
Copyright © 2020-2023  润新知