• docker


    Docker

    1. 简介

      • 开源的应用容器引擎,基于Go语言
      • 完全隔离的沙箱机制,类似app之间的关系
      • 重要的是性能开销极低
        • 程序简化
        • docker镜像中包含环境,服务环境搭建简单
    2. 应用场景

      1. web自动打包发布
      2. 自动化测试
      3. 在服务型环境中部署,调整 应用
    3. Docker引擎

      1. 包含以下组件的客户端服务器应用程序

        • 一种服务器,一种称为守护进程并长时间运行的程序

        • REST API 用于指定程序可以用来与守护进程通信的接口

        • 一个有命令行界面的CLI工具的客户端

    4. Docker系统架构

      1. 使用客户端-服务器架构模式,使用远程api来管理和创建Docker容器

      2. Docker容器通过Docker镜像来创建

      3. 关系:容器---》对象,镜像------》类

        1. 镜像封装了基本的属性
        2. 真正操作的是容器,
      4. docker pull ---->守护进程---》创建两个容器------》本机存在镜像的时候直接创建,否则到docker库下载

    5. Docker安装

      1. 可以安装在windwos,mac,linux

      2. 前提条件

        1. 若为linux只适用于64位
        2. linux内核要大于3.10
      3. 一般使用脚本安装(linux环境ubuntu)
        1. 使用在线安装脚本

          1. curl -sSL https://get.daocloud.io/docker | sh

          2. 执行后会下载安装包

            若报错表示未更新数据源,/etc/apt/source.list 可更新为阿里云的数据源 apt-get update

          3. 再次执行1即可

            与网络环境有关,失败再次尝试即可

          或直接:sudo apt-get install -y docker.io

        2. 默认安装的是client,server

          1. root 可操作两个版本,普通用户只能使用client
          2. sudo usermod -aG docker 用户名 ,普通用户加入docker组即可(重新登陆生效或newgrp docker 生效)
        3. 配置加速器

          1. docker镜像都在海外

          2. vim /lib/systemd/system/docker.service

          3. 添加 --registry-mirror=https://jxus37ac.mirror.aliyuncs.com 到ExecStart

            ExecStart=/usr/bin/dockerd --registry-mirror=https://jxus37ac.mirror.aliyuncs.com
            
          4. 重启docker 服务

    6. 第一个Docker应用程序

      1. docker run ubuntu:15.10 /bin/echo "hello Docker"
        

        从网上下载ubuntu15.10 的镜像,创建一个容器 ,使用容器打印 “hello docker"

        运行完毕就会释放

      2. docker images
        

        查看所有的镜像

      3. docker ps
        

        查看启动中的容器, -a 参数 查看所有的,包括结束的

      4. docker rm containerID
        

        删除容器,id很长,通常情况下只适用前n位也可

        rmi 可删除镜像

      5. docker run -it ubuntu:15.10 /bin/bash
        

        占用主线程的交互式容器,即可进入Ubuntu容器 root命令行

      6. docker run -d ubuntu:15.10 /bin/bash -c "while true:do echo hello docker;sleep 1;done"
        

        后台运行 -d表示在后台

      7. docker logs containerId
        

        查看容器日志,加参数 -f可动态查看

      8. docker stop containerId
        

        停止容器

      9. docker exec -it containerId /bin/bash
        

        适用bash与正在运行的容器进行交互

    7. Docker客户端

      1. docker COMMAND --help
        

        所有命令help文档

    8. 运行web容器

      1. docker run -d -P training/webapp python app.py
        

        在一个完整的操作系统上运行python程序

        -P:表示把容器的端口映射到宿主机,宿主机随机一个端口映射到容器 docker ps 查看

        镜像为training/webapp 它是一个flask程序

        运行命令python app.py

      2. 可以将自己写的java等打包成容器

      3. docker run -d -p 4000:5000 training/webapp python app.py
        

        -p:可以指定访问端口 宿主机4000,容器5000

      4. docker top containerId
        docker top names
        

        查看容器中的进程

      5. docker inspect
        

        查看容器状态:json字符格式

      6. docker 安装后会产生一个虚拟网卡,mac等,容器产生的Ip都是基于虚拟网卡的

      7. docker tag containerId imageName:newTag
        

        出现一个新的image,与上个同名,tag不同, 设置镜像标签

      8. docker rm containerId1  containerId2
        

        同时移除多个容器

    9. Docker镜像管理

      1. 若使用的镜像不存在会从 Docker Hub 下载

      2. docker pull tomcat
        docker pull tomcat:8.5.49-jdk11-openjdk
        

        获取镜像,默认获取最新版本,也可以指定版本获取

      3. docker search tomcat
        

        查找镜像,一般选择官方的,使用docker pull name 获取,

        starts 表示的是使用量,可作为评价标准

      4. 创建镜像

        1. 从已经创建的容器中更新镜像,并且提交这个镜像

          1. 交互式运行ubuntu,进入bash

          2. apt-get update

            1. 可能会报错,数据源错误
            2. 需要修改容器内source.list
            3. vim 修改即可,若没有vim命令,可使用echo 命令覆盖文件
          3. 退出容器,此时若不提交,以上的操作下次生成容器时会重置

          4. docker commit -m="has update" -a="userName" containerId  newImageName:Tag(随便)
            

            修改源镜像------》提交为一个新的镜像

        2. 使用DockerFile指令来创建镜像

          1. 真正的创建镜像

          2. mkdir myUbuntu
            cd myUbuntu
            vi Dockerfile #(名字不要更改)
                FROM ubuntu:15.10 # 系统
                MAINTAINER your-email
                COPY test.txt /home # 将宿主机的文件test.txt copy 到镜像的home下
                RUN /bin/bash -c "Hello world" # 指定镜像默认执行的命令
                CMD ["/bin/echo","this is param1"] # 文件中只能有一个cmd,有多个会只执行第一个
                WORKDIR /home # 指定默认的工作目录
                EXPOSE 80 # 暴露端口
                EXPOSE 8080
            docker build -t yourImageName . # 在当前目录查找dockerfile 为改文件的镜像命名
            
    10. Docker实例教程

      1. # 使用docker 后台运行tomcat容器 并做端口映射,并修改容器的默认名字为tomcat,
        docker run --name tomcat -p 8080:8080 -d tomcat
        # 若要在容器内tomcat 部署程序,交互式进入,写自己的html即可
        
      2. docker pull mysql # 拉去mysql 镜像
        docker run -p 3306:3306 -name mysql 
        -v /usr/local/deoker/mysql/conf:/etc/mysql  # 映射宿主机目录到容器目录
        -v /usr/local/docker/mysql/logs:/val/log/mysql  # -v 数据卷
        -v /usr/local/docker/mysql/data:/var/lib/mysql 
        -e MYSQL_ROOT_PASSWORD=123456  # -e 指定环境边变量
        -d mysql
        # 若以后要重新运行时,密码变更了,需要删除宿主机下原来的数据卷,否则会不生效,还使用原来的配置。
        
      3. vim Dockerfile
            FROM tomcat
            MAINTAINER email
            ADD xxx.war /usr/local/tomcat/webapps/xxx.war # 添加war包到容器
        docker build -t name . # 构建镜像
        docker run -d -p 8080:8080 imageName
        # 本方式是直接将war打入本镜像,比较麻烦,可使用数据卷解决
        

        部署项目

    11. 数据卷

      1. 优点

        1. 绕过拷贝写,修改容器内容相当于直接修改宿主机内容,性能高
        2. 不需要在docker commit 打包进镜像文件
        3. 宿主,容器,容器之间共享文件
      2. 创建数据卷

        1. 方法一

          docker run -d -P -v /webapps training/webapps python app.py
          # 将tomcat容器的目录映射到宿主目录,即时原容器目录有内容也不可用
          docker run -name tomcat1 -d -p 8080:8080 -v
          	/usr/local/docker/tomcat/share/webapps:
          	/usr/local/tomcat/webapps tomcat
          
        2. 方法二

          dockerfile中指定 VOLUME /var/lib/test

      3. 备份数据卷

        1. docker run -p 3306:3306 -name mysql 
          -v /usr/local/deoker/mysql/conf:/etc/mysql  
          -v /usr/local/docker/mysql/logs:/val/log/mysql  
          -v /usr/local/docker/mysql/data:/var/lib/mysql 
          -e MYSQL_ROOT_PASSWORD=123456  
          -d mysql
          # 启动数据库
          
        2. 连接容器内数据库,做出修改

        3. 进入宿主机的数据卷,直接备份docker/mysql目录即可

          tar -zcvf backup.tar.gz .

      4. 恢复数据卷,其重新的容器时,挂载备份的文件即可

    12. Docker Compose

      1. 简化docker操作的工具

      2. 安装docker-compose

        curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
        # 或直接下载上传即可
        
        

        重命名为docker-compose,

        放入环境变量目录

        chown -R root:root docker-compose 赋给root

        chmod +x docker-compose 加执行权限

      3. docker-compose 使用

        # 启用tomca容器
        # 原始方法:docker run .......
        # docker-compose
        mkdir tomcat;cd tomcat
        vim docker-compose.yml # yml 语言
        	version: "3" # compose的版本号决定
        	services:
        	 tomcat: # 服务名字,可变的
        	  restart:always
        	  image:tomcat
        	  container_name:tomcat
        	  ports:
        	  	- "8080:8080"
        docker-compose up # 此时是主线程启动
        docker-compose down # 停止,并删除
        
      4. docker-compose up -d # 后台运行 必须在docker-compose.yml所在的目录
        
      5. version: "3"
        services:
         tomcat:
          restart:always
          image:tomcat
          container_name:tomcat
          ports:
           - "8080:8080"
          volumes:
           - "/usr/local/docker/tomcat/webapps/test:/usr/local/tomcat/webapps/test"
          environment:
           TZ: Asia/Shanghai
        
      6. # mysql
        version: "3"
        services:
         mysql:
          restart: always
          image:mysql
          container_name:mysql
          port:
           - 3306:3306
           environment:
            TZ:Asia/Shanghai
            MYSQL_ROOT_PASSWORD:123456
           command:
            --character-set-server=utf8mb4
            --collation-server=utf8mb4_general_ci
            --explicit_defaults_for_timestamp=true
            --lower_case_table_name=1
            --max_allowed_packet=128M
            --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBST
            ITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATA,ERROR_FOR_DIVISION_BY_ZERO"
           volumes:
            - mysql-data:/var/lib/mysql
          volumes:
           mysql-data: # docker安装目录/volumes/下创建mysql_mysql-data文件夹作为映射
           # /var/lib/docker/volumes/mysql_mysql-data
        
    13. 项目部署

      1. mkdir project;cd project
        vim docker-compose.yml
        	version: 3
             services:
              tomcat:
               restart:always
               image:tomcat
               container_name:tomcat
               ports:
                - 8080:8080
               volumes:
                - /usr/local/docker/project/webapps/:/usr/local/tomcat/webapps/
               environment:
                TZ: Asia/Shanghai
              mysql:
               restart: always
               image:mysql
               container_name:mysql
               port:
                - "3306:3306"
               environment:
                TZ:Asia/Shanghai
                MYSQL_ROOT_PASSWORD:123456
               command:
                --character-set-server=utf8mb4
                --collation-server=utf8mb4_general_ci
                --explicit_defaults_for_timestamp=true
                --lower_case_table_name=1
                --max_allowed_packet=128M
                --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SU
              BSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATA,ERROR_FOR_DIVISION_BY_ZERO"
               volumes:
                - mysql-data:/var/lib/mysql
             volumes:
              mysql-data:
        
  • 相关阅读:
    典型用户模版和场景
    第一冲刺阶段——个人工作总结05
    第一冲刺阶段——个人工作总结04
    第一冲刺阶段——个人工作总结03
    第一冲刺阶段——个人工作总结02
    第一冲刺阶段——个人工作总结01
    学习进度条7
    构建之法阅读笔记06
    个人总结
    第十六周进度条
  • 原文地址:https://www.cnblogs.com/Dean0731/p/11965965.html
Copyright © 2020-2023  润新知