• docker


    docker

    1. 什么是容器

    首先 —— 容器是一种虚拟化的方案,但与传统的虚拟机不同

    传统虚拟机—— 通过中间层将一台或多台独立的机器虚拟运行在物理硬件之上

    容器 —— 直接运行在操作系统上的用户空间,所以也被成为操作系统虚拟化,

    只能运行相同或相似内核的操作系统

    docker —— 依赖于linux的内核特性,所以只能运行以linux为基础的系统

    有点 —— 不需要包含操作系统(虚拟机包含),所以资源占用减少,虚拟机需要模拟硬件行为,对内存和cup损

    耗比较大,容器技术较复杂,不易管理,不易自动化,而docker很好的解决了这一系列行为

    docker —— 将应用程序自动部署到容器的开源引擎,go语言,拥有应用程序部署引擎

    docker特点 —— 简单轻量的建模方式、职责的逻辑分离、快速高效的开发生命周期(环境一直),面向服务的架

    构(单个容器只运行一个)

    docker作用 —— 使用docker容器开发、测试、部署;隔离运行环境;测试环境;PaaS;SaaS

    2. docker的基本组成

    • Client 客户端

    • Daemon 守护进程

    • Image 镜像

    • Container 容器

    • Registry 仓库

    1. 客户端/守护进程 ——> c/s

      客户端发送命令,命令传给守护进程,守护进程将结果返回给客户端

    2. 镜像

      容器的基石,基于镜像启动与运行,层叠的只读文件系统

    3. 容器

      通过镜像启动,执行单元,从镜像的可写层中(镜像顶层),写时复制

    4. 仓库

      保存用户构建的镜像,docker hub(公用镜像)

    关系 —— 客户端访问docker的守护进程,从而操作docker的容器,而容器是通过镜像进行启动与执行的,而镜像

    保存在仓库之中,以上几位docker各部分的关系

    3. docker容器相关技术

    docker依赖的linux内核特性

    • Namespaces 命名空间

    • Control groups(cgroups) 控制组

    Namespaces

    变成语言包含命名空间的概念,可以理解为是一种封装的概念,而封装本省就是代码隔离

    在操作系统中命名空间提供系统资源隔离(进程、网络、文件系统等)

    Control groups(cgroups)

    分配资源。资源限制,优先级设定,资源计量,资源控制

    docker容器的能力

    • 文件隔离系统——每个容器都有自己的root文件系统

    • 进程隔离——每个容器都运行在自己的进程环境之中

    • 网络隔离——容器间的虚拟网络接口和IP地址都是分开的

    • 资源隔离与分组——使用cgroups将cpu和内存之类的资源独立分配给每个docker容器

    4. 安装命令

    • 检查内核版本

      uanme -a

    • 检查device mapper(存储驱动)

      ls -l /sys/class/misc/device-mapper、

    推荐使用docker维护的版本

    • 检查APT的https支持查看/usr/lib/apt/methods/https文件是否存在,如果不存在则运行安装命令进行安装(apt-get update) ,然后 apt-get install -y apt-transport-https

    • 添加docker的APT仓库

      echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list

    • 添加仓库的key

      apt-key adv --keyserver hkp://keysever.ubuntu.com:80 --recv-keys 36.......E9(此处为key,省略)

    • 安装

      apt-get update

      apt-get install -y lxc-docker

    由于以上安装比较繁琐,所以推出了建议安装版本

    1. sudo apt-get install -y curl

    2. curl -sSL https://get.docker.com/ubuntu/ | sudo sh

    5. 容器的基本命令

    • 启动容器

      docker run image【command】【arg...】

      docker run -i -t image /bin/bash 提供交互式的容器

      -i --interactive=true|false 默认为false 始终打开标准输入

      -t --tty=true|false 默认为false 为创建的容器分配一个伪tty终端

    • 查看容器

      docker ps 【-a】(列出所有的容器)【-l】(列出最新的容器)

      不加参数时是列出运行中的容器

      docker inspect 容器名字或者容器Id

    • 自定义容器名

      docker run --name (自定义名字) -i -t image /bin/bash

    • 重启启用停止的容器

      docker start 【-i】 容器名

    • 删除不在运行中的容器

      docker rm 容器名称或ID

    守护式容器

    什么是守护式容器——能够长期运行、没有交互式回话、适合运行应用程序与服务

    启动守护式容器的方法

    • 以交互式容器的方式启动,然后以ctrl+P,ctrl+Q的方式退出该交互式容器,注意两个ctrl命令是连续的

    • 以run命令启动一个守护式容器 docker run -d image 【command】【arg...】

    附加到运行中的容器(即重新进入守护式容器)

    docker attach 容器名

    查看容器日志

    docker logs 【-f】【-t】【--tail】 容器名

    -f --follows=true|false 默认为false 跟踪日志并返回结果

    -t --timestamps=true|false 默认为false 返回的结果上加上时间戳

    --tail ="all" 返回结尾处日志数量

    查看容器内进程

    docker top 容器名

    在运行中的容器中启动新进程

    docker exec 【-d】【-i】【-t】容器名【command】【args...】

    停止守护式容器

    1. docker stop 容器名

      发送一个信号等待容器结束

    2. docker kill 容器名

      直接停止容器

    man docker -run/man docker -logs查看清晰命令

    6. 容器的使用(部署静态网站)

    1. 设置容器的端口映射

      run -P -p

      -P,--publish -all=true|false 默认为false 为容器暴露的所有端口进行映射

      docker run -P -i -t ubuntu /bin/bash

      -p,--publish=[] 指定映射那些容器的端口

      docker run -p 80 -i -t ubuntu /bin/bash

      其中端口的映射有多种方式,推荐下面两种

      指定宿主机和容器的端口,即 8080:80 ——将容器80端口映射到宿主机的8080端口

      指定宿主机IP+port:容器端口 ,即0.0.0.0:8080:80

    2. 安装Nginx

      • docker run -p 80 --name web -i -t ubuntu /bin/bash

      • 运行apt-get install -y nginx

      • 如果提示Unable to locate package nginx,则先运行 apt-get update

      • 安装vim apt-get install -y vim

      • 创建包 mkdir -p /var/www/html

      • 切换目录 创建一个index.html vim index.html

      • 书写简单的页面内容

      • 通过whereis nginx查看nginx的安装目录

      • ls /etc/nginx/sites-enabled/

      • vim /etc/nginx/sites-enabled/default

      • 编辑 增加 root /var/www/html

      • 切换到根目录运行nginx(直接输入nginx便可以直接运行)

      • 通过ps -ef便可以查到nginx已经运行

      • 以守护容器退出(上述方法)

      • 可以使用docker ps 查看端口使用情况,也可以使用docker port 容器名称,查看端口情况

      • 使用curl http://127.0.0.1:32768 查看是否可以返回index.html页面

      当容器停止后,端口号也会随之发生变化,这点要注意

      7.docker镜像的查看与删除

      • 列出镜像

        docker images 【optsions】【repository】

        -a,--all=false 不显示中间层镜像

        -f,--filter=[] 显示式的过滤条件

        --no-trunc = false 指定不使用截断的形式(id长度)

        -q,--quiet=false 只显示镜像的唯一Id

      • 镜像的仓库与标签组成一个完整的镜像,获得唯一Id

      • 查看镜像的完整信息

        docker inspect 【options】container|image (容器或镜像)

      • 删除一个镜像

        docker rmi 【options】image

        -f,--force 强制删除镜像

        --no-prune=false 不删除被打标签的父镜像

        docker rmi $(docker images ubuntu -q) 删除ubuntu的所有镜像 ,原因是docker images ubuntu -q

        只返回镜像id,而rmi支持多个删除,中间用空格间隔

      8. 获取与推送镜像

      • 查找镜像

        通过docker search 【options】trem

        --automated=false 只会显示自动化构建的

        --no-trunc=false 不截断

        -s,--stars=0 星级,限制最低星级

        只会返回最多25条

      • 拉取镜像

        docker pull 【options】name【:tag】

        -a,--all-tags=false 所有镜像

        加速镜像拉取得方法

        修改/etc/default/docker

        添加DOCKER_OPTS="--registry-mirror=http://MIRROR-ADDR(该部分的地址为在daocloud.io中获

        取的地址)"

        重新启动守护进程 service docker restart

      • 推送镜像

        docker push 【name】

        push 前先进行账号登录

        docker login -u 账号 -p 密码

      9. 构建镜像

      为什么要构建镜像

      • 保存对容器的修改,并再次使用

      • 自定义镜像的能力

      • 一软件的形式打包并分发服务及其运行环境

      构建方式

      • docker commit 通过容器构建

      • docker build 通过Dockerfile文件构建

      通过docker commit 构建镜像

      • docker commit 【OPTIONS】container【repository】【:tag】

        -a,--author="" 作者

        -m,message="" 提交信息

        -p,--pause=true 不暂停正在运行的容器

      通过docker build构建镜像

      创建dockerfile

      使用docker build命令

      10. docker的远程访问

      • 修改vim /lib/systemd/system/docker.service 文件

      • 在ExecStart=/usr/bin/dockerd增加参数设置

      • -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock --label name=docker_service_1

        其中--label name=docker_service_1 为标识 tcp://0.0.0.0:2375代表可以通过ip+2375端口进行远程访问

      • 验证在另一台可以访问的docker端访问curl http://ip:2375/info 可以查到信息,并能从中找到标示

        docker_service_1 ,代表远程访问成功

      上面是服务端的配置,那么客户端如何进行远程调用,向服务端的守护线程发送命令呢

      • 在运行命令的时候添加-H tcp://ip:2375 例如docker -H tcp://29.106.21.163:2375 info

      • 在客户端添加docker_host 命令行为export DOCKER_HOST="tcp://ip:2375"

        然后便可以像调用本地的守护线程一样调用,当不适用远程的服务端时,直接将docker_host 置空

        export DOCKER_HOST=""

      •  

  • 相关阅读:
    [AGC020E] Encoding Subsets
    [Topcoder16346]TwoPerLine
    CF913E Logical Expression
    英语面试
    CRM
    WEB使用第三方支付服务大致流程
    OO语言 prototype 初级用法
    flash设置字体
    air 提示问题
    c#里的BYTE
  • 原文地址:https://www.cnblogs.com/fengerlong/p/9101829.html
Copyright © 2020-2023  润新知