精华内容
下载资源
问答
  • Docker

    万次阅读 多人点赞 2019-10-29 23:15:26
    文章目录@[toc]dockerdocker 手册centos7 联网安装docker官方安装手册镜像加速基本概念镜像容器docker 镜像操作下载 CentOS 镜像查看centos7镜运行 centos7删除镜像镜像导出镜像导入容器操作启动容器后台运行查看...




    docker

    官网是这样介绍docker的:

    Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications…

    其实看完这句话还是不明白docker究竟是什么

    我们可以把他想象成是一个用了一种新颖方式实现的超轻量虚拟机。当然在实现的原理和应用上还是和VM有巨大差别的,并且专业的叫法是应用容器(Application Container)。

    docker

    比如现在想用MySQL,那就找个装好并配置好的MySQL的容器(可以认为是特殊的,轻量级的虚拟机),运行起来,那么就可以使用 MySQL了。

    那么为什么不直接在操作系统中安装一个mysql,而是用容器呢?

    安装MySql过程并不简单,要配置安装源,安装依赖包,对mysql进行配置…如果要在多台主机上安装,每台主机都要进行这些繁琐的操作,万一服务器挂了,这一系列操作还要再重来一遍

    但有了docker,一个安装配置好的mysql容器,可以直接拿到另一台主机上启动,而不必重新安装mysql

    另外,docker还有一重要的用处,就是可以保证开发,测试和生产环境的一致.




    docker 手册

    中文免费手册 [Docker — 从入门到实践]
    https://vuepress.mirror.docker-practice.com

    docker 从入门到实践,离线版

    docker pull dockerpracticecn/docker_practice
    docker run -it --rm -p 4000:80 dockerpracticecn/docker_practice
    




    centos7 安装docker

    离线安装包

    下载离线安装包
    https://download.csdn.net/download/weixin_38305440/12265961

    上传离线安装包

    • docker-install 目录上传到 /root

    切换到docker-install目录

    cd docker-install
    

    安装

    rpm -ivh *.rpm
    

    yum 在线安装 docker

    官方安装手册

    https://docs.docker.com/install/linux/docker-ce/centos/

    卸载旧版

    
    sudo yum remove docker-ce \
                    docker-ce-client \
                    docker-client-latest \
                    docker-common \
                    docker-latest \
                    docker-latest-logrotate \
                    docker-logrotate \
                    docker-engine
    
    

    安装一组工具

    sudo yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2
    

    设置 yum 仓库地址

    
    sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
        
    sudo yum-config-manager \
         --add-repo \
         http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    

    更新 yum 缓存

    sudo yum makecache fast
    

    安装新版 docker

    sudo yum install -y docker-ce docker-ce-cli containerd.io
    

    启动docker系统服务

    启动 docker

    sudo systemctl start docker
    

    设置 docker 开机启动

    sudo systemctl enable docker
    

    镜像加速

    由于国内网络问题,需要配置加速器来加速。
    修改配置文件 /etc/docker/daemon.json

    下面命令直接生成文件 daemon.json

    cat <<EOF > /etc/docker/daemon.json
    {
      "registry-mirrors": [
        "https://docker.mirrors.ustc.edu.cn",
        "http://hub-mirror.c.163.com"
      ],
      "max-concurrent-downloads": 10,
      "log-driver": "json-file",
      "log-level": "warn",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
        },
      "data-root": "/var/lib/docker"
    }
    EOF
    

    之后重新启动服务。

    # 重新加载docker配置
    sudo systemctl daemon-reload
    
    #重启docker服务
    sudo systemctl restart docker
    

    查看镜像配置

    docker info
    

    运行 hello-world 镜像,验证 docker

    sudo docker run hello-world
    




    基本概念

    镜像

    Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

    镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。

    镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

    分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

    容器

    镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

    容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

    前面讲过镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。

    容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。

    按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。

    数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。




    docker 镜像操作

    下载 CentOS 镜像

    docker pull centos:7
    

    查看centos7镜

    docker images
    

    docker image ls
    

    运行 centos7

    docker run -it xxxx bash
    
    • xxxx - 镜像名, 或 image id 的前几位
    • -it 这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
    • bash 放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。

    删除镜像

    • 501 镜像 id 前几位,一般三位以上,足够区分即可
    docker image rm 501
    
    • 删除指定仓库的镜像
    docker image rm centos
    

    镜像导出

    docker save mysql:5.7 node:8 | gzip > app.tar.gz  
    

    镜像导入

    docker load < apps.tar.gz  
    




    容器操作

    启动容器

    docker run -it centos:7 bash
    

    当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

    • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
    • 利用镜像创建并启动一个容器
    • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
    • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
    • 从地址池配置一个 ip 地址给容器
    • 执行用户指定的应用程序
    • 执行完毕后容器被终止

    后台运行

    docker run -dit centos:7
    
    • -d 后台运行容器
    • 容器是否会长久运行,是和 docker run 指定的命令有关,和 -d 参数无关。

    查看后台运行的容器输出结果

    docker container logs 802
    

    查看容器

    docker container ls -a
    # 或
    docker ps -a
    
    • -a all, 全部

    终止容器

    docker container stop 802
    

    重新启动容器

    docker container restart 802
    

    进入容器

    在使用 -d 参数时,容器启动后会进入后台。

    某些时候需要进入容器进行操作,可以使用 docker exec 命令

    docker exec -it 802 bash
    

    删除容器

    docker container rm 802
    
    • 如果删除运行中的容器,需要添加 -f 参数

    清理所有终止状态容器

    docker container prune
    




    数据管理

    在这里插入图片描述

    在容器中管理数据主要有两种方式:

    • 数据卷(Volumes)
    • 挂载主机目录 (Bind mounts)

    数据卷

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

    • 数据卷 可以在容器之间共享和重用
    • 对 数据卷 的修改会立马生效
    • 对 数据卷 的更新,不会影响镜像
    • 数据卷 默认会一直存在,即使容器被删除

    创建数据卷

    docker volume create my-vol
    

    查看所有数据卷

    docker volume ls
    

    查看指定 数据卷 的信息

    docker volume inspect my-vol
    

    查询的结果:

    [
        {
            "Driver": "local",
            "Labels": {},
            "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
            "Name": "my-vol",
            "Options": {},
            "Scope": "local"
        }
    ]
    

    启动挂载数据卷的容器

    docker run -it --mount source=my-vol,target=/webapp centos:7 bash
    
    # 或者:
    
    docker run -it -v my-vol:/webapp centos:7 bash
    
    • -v my-vol:/webapp 把数据卷 my-vol 挂载到容器的 /webapp 目录

    删除数据卷

    • 删除指定的数据卷,如果数据卷被容器使用则无法删除
    docker volume rm my-vol
    
    • 清理无主数据卷
    docker volume prune
    

    挂载主机目录

    docker run -it --mount type=bind,source=/usr/app,target=/opt/app centos:7 bash
    
    # 或
    
    docker run -it -v /usr/app:/opt/app centos:7 bash
    
    
    • -v 如果本地目录不存在 Docker 会自动为你创建一个文件夹
    • --mount 参数时如果本地目录不存在,Docker 会报错

    查看挂载目录信息

    docker inspect 91a
    

    显示结果:

    ...
    
    "Mounts": [
        {
            "Type": "bind",
            "Source": "/usr/app",
            "Destination": "/opt/app",
            "Mode": "",
            "RW": true,
            "Propagation": "rprivate"
        }
    ],
    
    ...
    
    




    网络

    自动分配映射端口

    docker run -d -P tomcat
    
    # 查看容器信息
    docker container ls -a
    

    显示结果:

    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
    d03480b1a781        tomcat              "catalina.sh run"   3 minutes ago       Up 3 minutes        0.0.0.0:32768->8080/tcp   trusting_gagarin
    

    映射指定端口

    docker run -d -p 8080:8080 tomcat
    
    • 8080:8080 本机端口:容器端口

    映射多个端口

    docker run -d \
           -p 5000:5000 \
           -p 80:8080 tomcat
    

    映射指定端口(指定网卡)

    docker run -d -p 192.168.64.150:8080:8080 tomcat
    

    自动分配映射端口(指定网卡)

    docker run -d -p 192.168.64.150::8080 tomcat
    

    查看端口配置

    docker port 8af
    




    容器互联

    新建网络

    docker network create -d bridge my-net
    
    • -d driver,网络类型,默认 bridge,也可以是 overlay(Swarm mode)

    列出网络

    docker network ls
    

    查看网络信息

    docker inspect 67d
    

    连接容器

    docker run -it --name app1 --network my-net centos:7
    

    新开终端执行:

    docker run -it --name app2 --network my-net centos:7
    

    在两个终端中分别执行:

    ping app1
    
    ping app2
    

    显示如下:

    [root@35569c623c4c /]# ping app1
    PING app1 (172.18.0.2) 56(84) bytes of data.
    64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=1 ttl=64 time=0.577 ms
    64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=2 ttl=64 time=0.061 ms
    64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=3 ttl=64 time=0.066 ms
    ......
    
    • 多个容器互联,推荐使用 Docker Compose




    Dockerfile

    准备

    • centos:7镜像
    • jdk压缩包 jdk-8u212-linux-x64.tar.gz
    • tomcat7压缩包 apache-tomcat-7.0.96.tar.gz

    Dockerfile文件

    #以centos7为基础,安装oracle jdk8和tomcat7
    FROM centos:7
    #ADD命令将压缩包传入镜像中的指定目录,并同时解压缩
    ADD jdk-8u212-linux-x64.tar.gz /opt/
    ADD apache-tomcat-7.0.96.tar.gz /usr/
    #为了方便,把文件夹名称改得简单一点
    RUN mv /usr/apache-tomcat-7.0.96 /usr/tomcat
    #设置环境变量
    ENV JAVA_HOME=/opt/jdk1.8.0_212 \
        CATALINA_HOME=/usr/tomcat \
        PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/bin
    #暴露容器的8080端口
    EXPOSE 8080
    #设置启动容器时自动运行tomcat
    ENTRYPOINT /usr/tomcat/bin/startup.sh && tail -F /usr/tomcat/logs/catalina.out
    
    FROM centos:7
    ADD jdk-8u212-linux-x64.tar.gz /opt/
    ADD apache-tomcat-7.0.96.tar.gz /usr/
    RUN mv /usr/apache-tomcat-7.0.96 /usr/tomcat
    ENV JAVA_HOME=/opt/jdk1.8.0_212 \
        CATALINA_HOME=/usr/tomcat \
        PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/bin
    EXPOSE 8080
    ENTRYPOINT /usr/tomcat/bin/startup.sh && tail -F /usr/tomcat/logs/catalina.out
    

    使用 Dockerfile 构建镜像

    docker build -t tomcat:7 .
    
    • 注意末尾的点,表示构建过程中从当前目录寻找文件

    启动容器

    准备存储目录

    • webapps目录,例如 /opt/webapps
    • logs目录,例如 /var/lib/tomcat-logs
    mkdir /opt/webapps
    mkdir /opt/webapps/ROOT
    mkdir /var/lib/tomcat-logs
    
    # 添加欢迎页
    cat <<EOF > /opt/webapps/ROOT/index.html
    <h1>Hello Docker!!!</h1>
    EOF
    

    启动容器,挂载目录

    docker run \
    -d \
    -p 8080:8080 \
    --name tomcat7 \
    -v /opt/webapps:/usr/tomcat/webapps \
    -v /var/lib/tomcat-logs:/usr/tomcat/logs \
    tomcat:7
    
    展开全文
  • docker三要素以及架构

    2020-07-16 22:39:01
    docker部分组成:image(镜像)、容器(container)、仓库(repository). 1.image Image是一个只读模板,其中包含有关创建Docker容器的说明;Image可以用来创建容器且一个镜像可以创造多个容器。通常,一个...

    docker由三部分组成:image(镜像)、容器(container)、仓库(repository).

    1.image

    Image是一个只读模板,其中包含有关创建Docker容器的说明;Image可以用来创建容器且一个镜像可以创造多个容器。通常,一个Image基于另一个Image,并带有一些额外的自定义。通过引入分层技术,可以增加镜像复用度,减少磁盘占用;同时可以实现差分上传下载,加快镜像pull、push性能。

    2.container

    Docker利用容器(container)独立运行的一个或者一组应用。容器是利用镜像创建的运行实例(相对于Java中的类和对象的概念)。容器可以被启动、开始、停止、删除。每个容器都是互相隔离的,保证安全的平台。可以把容器看做是一个简易版的Linux环境 (包括root用户名权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

      容器的定义和镜像几乎是一模一样的,也是一堆层的统一视角, 唯一区别的是容器的最上面那一层是可读可写的。

      容器是镜像启动或执行阶段。Docker中的每个容器都包含了一个软件镜像,该镜像可以被创建、启动、关闭、重启和销毁。

    3.repository

    集中存放Image的场所,Repository很容易和下面说的Registry(仓库注册服务器)混淆。通俗地说,它们的关系是Registry上往往存放着多个Repository,每个Repository存又放着一大堆Images,每个Image存在不同的标签(Tag);用户可以从通过注册服务器从仓库拉取(带有某个tag的)Image,从而创建Container。

     

    docker-registry

      Docker registries是指存储Docker Image的地方。如Docker Hub是任何人都可以使用的公共registries,这一性质类似于Github。Docker默认配置为在Docker Hub上查找你所需要的Image。注意和Repository进行区分

    unionfs

    UnionFS(联合文件系统)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下;UnionFS一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。UnionFS是Docker镜像的基础,镜像通过分层进行继承,基于基础镜像(images that no parent image),可以制作各种具体应用的镜像。

     

      因此,我们会想,那基础镜像是什么呢?答案就是bootfs(boot file system),其主要包含bootloader和kernel。bootloader主要是引导、加载Kernel。这一层和典型的Linux/Unix系统是一样的,当boot加载完成之后整个内核就会在内存中了,此时内存的使用权已由bootfs交给Kernel,此时系统也会卸载bootfs。

     

      ok,那在bootfs之上,又是什么呢?其实也和典型Linux/Unix一样,即是系统中的/dev、/proc、/bin、/etc等标准目录和文件,这些文件称为rootfs(root filesystem),是各种不同操作系统的发行版,如Centos、Ubuntu.Docker就是这样一个创建精简OS的工具,具有灵活迁移、部署的特性,因此广受业界欢迎。其rootfs可以很小,只需要包括最基本的命令、工具和程序库,因为底层直接使用Host的kernel。

     

    容器在内核中支持的两种重要技术:

      docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)

        1)namespaces 名称空间

     

     

     

        2)control Group 控制组

          cgroup的特点是:       

            cgroup的api以一个伪文件系统的实现方式,用户的程序可以通过文件系统实现cgroup的组件管理

            cgroup的组件管理操作单元可以细粒度到线程级别,另外用户可以创建和销毁cgroup,从而实现资源载分配和再利用

            所有资源管理的功能都以子系统的方式实现,接口统一子任务创建之初与其父任务处于同一个cgroup的控制组

           四大功能:        

            资源限制:可以对任务使用的资源总额进行限制

            优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级

            资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等

            任务控制:cgroup可以对任务执行挂起、恢复等操作

     

    docker架构:

     

     

     

     

     

     

     

    docker daemon就是docker的守护进程即server端,可以是远程的,也可以是本地的,这个不是C/S架构吗,客户端Docker client 是通过rest api进行通信

        docker cli 用来管理容器和镜像,客户端提供一个只读镜像,然后通过镜像可以创建多个容器,这些容器可以只是一个RFS(Root file system根文件系统),也可以ishi一个包含了用户应用的RFS,容器再docker client中只是要给进程,两个进程之间互不可见

        用户不能与server直接交互,但可以通过与容器这个桥梁来交互,由于是操作系统级别的虚拟技术,中间的损耗几乎可以不计

     

    docker run 运行流程图:

    展开全文
  • docker

    2020-09-07 15:39:28
    Docker 是一个开源的应用容器引擎 开发者可以打包他们的应用以及依赖包到一个可移植的容器中然后发布到任何流行的linux机器上,也可以实现虚拟化 容器是完全使用沙箱机制,... Docker的功能特性 ##3. Docker的安装 Do

    Docker 是一个开源的应用容器引擎
    开发者可以打包他们的应用以及依赖包到一个可移植的容器中然后发布到任何流行的linux机器上,也可以实现虚拟化
    容器是完全使用沙箱机制,相互之间不会有任何接口。

    ##1. 一个完整的Docker组成部分:

    1> Docker client 客户端
    2> Docker Daemon 守护进程
    3> Docker Lmage  镜像
    4> Docker Container 容器
    

    ##2. Docker的功能特性
    1.png-175.9kB

    ##3. Docker的安装

    Docker 安装CE社区版 centos7上
    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    vim /etc/selinux/config
    SELINUX=disabled
    
    yum -y install yum-utils device-mapper-persistent-data lvm2
    echo $?
    curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-cd.repo
    yum -y install docker-ce
    systemctl start docker      //启动docker
    systemctl enable docker     //添加开机启动
    docker version      //看docker的版本
    *******************更改为国内的镜像源
    vim /etc/docker/daemon.json
    {
        "registry-mirrors":[ "https://registry.docker-cn.com" ]
    }
    
    systemctl daemon-reload     //重启配置文件
    systemctl restart docker    //重启docker
    

    ##4.docker的命令

    docker search centos        查看官网上的docker版本都有哪些
    docker search centos -f stars=100      //查看官网上的docker版本星级大于100(使用热度)
    docker search centos --filter is-official=true         //查看官网上的docker版本星级大于100(使用热度)且是官方发布的
    docker pull centos:7    //下载centos7
    mkdir -p /root/dockerfile/lib/centos/7      //创建centos7的工作目录
    cd /root/dockerfile/lib/centos/7
    vim docker.sh
     #!/bin/bash
    while true
        echo "welcome"
        sleep 5
    done
    
    
    vim Dockerfile
    
    FROM centos
    LABEL MAINTATNER="Mr.zhang.com"
    
    RUN ln -sfv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
    ADD docker.sh /home/test/
    
    RUN chmod +x /home/test/docker.sh
    
    CMD ["/home/test/docker.sh"]
    

    QQ截图20190811174200.png-33.2kB

    docker build -t Mr.zhang/centos7:1 /root/dockerfile/lib/centos/7/
    docker images           //查看已下载的所有镜像
    docker run -dit --name test Mr.zhang/centos7:1 /bin/bash
    创建一个test容器使用的是Mr.zhang/centos7:1的镜像
    -d 守护进程可以放后台
    -i 命令交互式
    -t 伪终端
    /bin/bash 卡后台这样创建的容器就是启动的
    

    4.png-61.7kB

    docker ps -a        //查看所有的容器不加-a时只查看开启的容器
    
    docker attach 容器名字/ID     //进入test1容器中   ID是docker ps 中显示的ID,ID可以只取前几位和其他ID不一样的
    
    docker stop 容器名字/ID        //停止容器
    
    docker rm 容器名字/ID          //删除容器
    
    docker rmi -f 镜像名/ID     //删除镜像,先停容器再删容器再删镜像(-f 是强删,强删可以不停容器,而且强删后容器可以继续运行)
    
    docker exec 容器名字/ID ls     //非交互式在test容器中输入命令
    
    docker cp 本地  容器名字/ID:路径        
    //例:docker cp /tmp/111 test:/tmp/   将本地/tmp/111文件复制到test容器中的/tmp/下
    docker cp test:/tmp/222 /tmp/
    将test容器下的/tmp/222文件复制到本地的/tmp下
    
    docker create -it 容器名字      //创建一个容器但是不启动他
    docker start 容器名字/ID        //启动容器进程
    
    docker diff 容器名字/ID         //显示中C表示增加A表示删除
    docker events                   //实时监控容器的变化情况(所有的容器)
    
    docker export 容器名字/ID > test.tar    //将容器进程的文件系统导出到本地  以.tar结尾
    
    docker inspect 容器名字/ID | grep -i "ipaddress"       //查看容器的ip
    
    docker logs -f -t --tail 10 容器名字/ID                 //实时查看docker容器的最后10行日志,-t 显示具体的时间,-f 实时查看
    

    ##1.问题: 报启动失败docker run之后状态总是Exited

    docker run -d  -p 8088:8080 -p 50000:50000 -v /home/docker/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime  --name suntechjenkins jenkins/jenkins
    
    解决办法:      chown -R 1000:1000 /home/docker/jenkins_home
    
    展开全文
  • Docker1.11新特性

    万次阅读 2016-04-26 12:40:09
    本次分析的Docker版本号:v1.11.0。我们来看daemon模块,daemon模块核心的结构体是Daemon,同v1.10.0相比增加了containerd和defaultIsolation两个变量,删除了execDriver变量。

    本次分析的Docker版本号:v1.11.0。

    我们来看daemon模块,daemon模块核心的结构体是Daemon,同v1.10.0相比增加了containerd和defaultIsolation两个变量,删除了execDriver变量。

    type Daemon struct {

       ID                      string
    
       repository                string
    
       containers                container.Store
    
       execCommands           *exec.Store
    
       referenceStore            reference.Store
    
       downloadManager           *xfer.LayerDownloadManager
    
       uploadManager             *xfer.LayerUploadManager
    
       distributionMetadataStore dmetadata.Store
    
       trustKey                  libtrust.PrivateKey
    
       idIndex                   *truncindex.TruncIndex
    
       configStore               *Config
    
       statsCollector            *statsCollector
    
       defaultLogConfig          containertypes.LogConfig
    
       RegistryService           *registry.Service
    
       EventsService             *events.Events
    
       netController             libnetwork.NetworkController
    
       volumes                   *store.VolumeStore
    
       discoveryWatcher          discoveryReloader
    
       root                      string
    
       seccompEnabled            bool
    
       shutdown                  bool
    
       uidMaps                   []idtools.IDMap
    
       gidMaps                   []idtools.IDMap
    
       layerStore                layer.Store
    
       imageStore                image.Store
    
       nameIndex                 *registrar.Registrar
    
       linkIndex                 *linkIndex
    
       containerd                libcontainerd.Client
    
       defaultIsolation          containertypes.Isolation
    

    }

    containerd这个变量替换了execDriver变量,因为从1.10版本,docker已经完全放弃了对LXC容器的支持,把没有用的代码都删除掉了;defaultIsolation这个变量作用是在windows操作系统上设置容器默认隔离模式,用来更好的对windows操作系统上容器提供支持。

    Docker1.11版本依赖于containerd和runC来管理容器,containerd是控制runC的后台程序,runC是Docker公司按照OCI标准规范编写的一个操作容器的命令行工具,containerd这个后台程序还可以操作满足OCI标准规范的其他容器工具,也就意味着以后只要是按照ODI标准规范开发的容器工具,都可以被containerd使用起来。使用containerd好处是,当docker daemon或者containerd两个进程crash后,应用容器不会“死掉”,未来要是实现的功能是,当containerd daemon重新启动后可以同应用容器重新建立连接。

    Docker1.11版本daemon模块调用关系图如下:
    这里写图片描述
    在NewDaemon这个方法中,还预留了对AppArmor的支持接口,但是并没有写具体实现源代码。AppArmor(Application Armor)是Linux内核的一个安全模块,AppArmor允许系统管理员将每个程序与一个安全配置文件关联,从而限制程序的功能。简单的说,AppArmor是与SELinux类似的一个访问控制系统,通过它你可以指定程序可以读、写或运行哪些文件,是否可以打开网络端口等。作为对传统Unix的自主访问控制模块的补充,AppArmor提供了强制访问控制机制,它已经被整合到2.6版本的Linux内核中。

    在NewDaemon这个方法中,还预留了设置运行时最大线程数的配置方法configureMaxThreads,但是并没有写具体实现源代码。

    结构体ImageInspect增加了变量RootFS,在inspect镜像的时候可以输出rootfs内容,显示基础层的名字和每层文件系统ID。

    在daemon模块中还增加了错误日志输出内容,更方便定位和维护。

    下面是最新的daemon版本同remote api版本的对应关系

    这里写图片描述

    在1.11版本中Remote API相关功能变化如下:

    在创建容器时,相比1.10增加了一个功能,如果linux内核版本超过了4.3,容器就支持pids cgroup,也就是可以根据cgroup限制容器中的进程数;还增加了nocopy选项,docker run -v foo:/bar:nocopy,这样就不会自动将数据从容器路径拷贝到卷路径;还修改CreateDaemonEnvironment方法,如果创建容器时使用到了Hostname变量和Domainname变量,那么在设置容器中HOSTNAME环境变量时设置的是Hostname变量,在v1.10.0中设置的是Hostname.Domainname。

    GET /containers/json返回值结构体:

    type Container struct {

       ID         string `json:"Id"`
    
       Names      []string
    
       Image      string
    
       ImageID    string
    
       Command    string
    
       Created    int64
    
       Ports      []Port
    
       SizeRw     int64 `json:",omitempty"`
    
       SizeRootFs int64 `json:",omitempty"`
    
       Labels     map[string]string
    
       State      string
    
       Status     string
    
       HostConfig struct {
    
              NetworkMode string `json:",omitempty"`
    
       }
    
       NetworkSettings *SummaryNetworkSettings
    
       Mounts          []MountPoint
    

    }

    相比1.10增加了State变量和Mounts变量,State变量表示容器的状态,包括created、restarting、running、paused、exited和dead六种状态,Mounts变量表示容器的挂载点信息,挂载点信息结构体MountPoint如下:

    type MountPoint struct {

       Name        string `json:",omitempty"`
    
       Source      string
    
       Destination string
    
       Driver      string `json:",omitempty"`
    
       Mode        string
    
       RW          bool
    
       Propagation string
    

    }

    GET /containers/(id or name)/stats返回结构体containerStats:

    type containerStats struct {

       Name             string
    
       CPUPercentage    float64
    
       Memory           float64
    
       MemoryLimit      float64
    
       MemoryPercentage float64
    
       NetworkRx        float64
    
       NetworkTx        float64
    
       BlockRead        float64
    
       BlockWrite       float64
    
       PidsCurrent      uint64
    
       mu               sync.RWMutex
    
       err              error
    

    }

    相比1.10增加了PidsCurrent,如果linux内核版本超过了4.3,容器就支持pids cgroup,在stats时就会返回pids信息。

    GET /info返回结构体Info:

    type Info struct {

       ID                 string
    
       Containers         int
    
       ContainersRunning  int
    
       ContainersPaused   int
    
       ContainersStopped  int
    
       Images             int
    
       Driver             string
    
       DriverStatus       [][2]string
    
       SystemStatus       [][2]string
    
       Plugins            PluginsInfo
    
       MemoryLimit        bool
    
       SwapLimit          bool
    
       KernelMemory       bool
    
       CPUCfsPeriod       bool `json:"CpuCfsPeriod"`
    
       CPUCfsQuota        bool `json:"CpuCfsQuota"`
    
       CPUShares          bool
    
       CPUSet             bool
    
       IPv4Forwarding     bool
    
       BridgeNfIptables   bool
    
       BridgeNfIP6tables  bool `json:"BridgeNfIp6tables"`
    
       Debug              bool
    
       NFd                int
    
       OomKillDisable     bool
    
       NGoroutines        int
    
       SystemTime         string
    
       ExecutionDriver    string
    
       LoggingDriver      string
    
       CgroupDriver       string
    
       NEventsListener    int
    
       KernelVersion      string
    
       OperatingSystem    string
    
       OSType             string
    
       Architecture       string
    
       IndexServerAddress string
    
       RegistryConfig     *registry.ServiceConfig
    
       NCPU               int
    
       MemTotal           int64
    
       DockerRootDir      string
    
       HTTPProxy          string `json:"HttpProxy"`
    
       HTTPSProxy         string `json:"HttpsProxy"`
    
       NoProxy            string
    
       Name               string
    
       Labels             []string
    
       ExperimentalBuild  bool
    
       ServerVersion      string
    
       ClusterStore       string
    
       ClusterAdvertise   string
    

    }

    相比1.10增加了KernelMemory变量和CgroupDriver变量,KernelMemory变量表示是否设置linux内核内存限制,CgroupDriver变量表示使用哪个Cgroup驱动,有两种驱动,分别是cgroupfs和systemd,默认使用cgroupfs,下面的例子是使用systemd:

    sudo docker daemon –exec-opt native.cgroupdriver=system

    更新容器信息POST /containers/(name)/update结构体UpdateConfig如下:

    type UpdateConfig struct {

       // Contains container's resources (cgroups, ulimits)
    
       Resources
    
       RestartPolicy RestartPolicy
    

    }

    相比1.10增加了RestartPolicy变量,这个变量用来设置容器重启策略,用来配置容器退出后的操作行为。

    GET /networks/(name)返回值结构体:

    type NetworkResource struct {

       Name       string
    
       ID         string `json:"Id"`
    
       Scope      string
    
       Driver     string
    
       EnableIPv6 bool
    
       IPAM       network.IPAM
    
       Internal   bool
    
       Containers map[string]EndpointResource
    
       Options    map[string]string
    
       Labels     map[string]string
    

    }

    相比1.10增加了EnableIPv6变量、Internal变量和Labels三个变量,EnableIPv6变量表示是否启用了IPv6,在创建网络时,通过POST /networks/create可以设置,Internal变量表示网络是否内部网络,Labels变量表示创建时的网络标签。

    展开全文
  • 镜像(Image),容器(Container),仓库(Repository)是我们常说的Docker三大组件,其实我们在上一篇文章《10分钟快速掌握Docker必备基础知识》已经有简单地了解过三大组件的知识,但是并没有很详细地讲解,所以在这篇...
  • Docker 架马车

    2018-09-06 14:17:00
    1. Docker Compose 我们前面的课程讲到过两个容器之间通过名字进行互联互通的话可以通过link参数来关联,这种做法比较麻烦,更好的方式是使用Docker Compose来定义一个YAML文件,来描述我们的项目和服务之间的关系...
  • docker优秀特性

    2021-07-12 21:03:00
    文章目录什么是docker?容器与虚拟机的区别docker的概念架构 什么是docker? Docker 是一个开源的应用容器引擎,基于 Go 语言 开发。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后...
  • Docker Swarm新特性

    2016-08-02 10:36:54
    本文将系统性的介绍Swarm及其新特性,如果你想全面了解Docker Swarm,学习本文及后续文章将是您很好的选择!
  • Docker的架构特性与局限

    千次阅读 2019-04-04 16:26:25
    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 关于...
  • Docker 镜像是容器的基础 镜像是分层存储的 容器的实质是进程 容器也是分层存储,在镜像上创建存储层 容器不应该向其存储层内写入任何数据,而要使用数据卷进行存储数据 数据卷是独立于容器的 镜像都藏在...
  • 从这张gif图片,我们不难看出Docker网站想传达这样一条信息, 使用Docker加速了build,ship和run的过程。 Docker最早问世是2013年,以一个开源项目的方式被大家熟知。 Docker的奠基者是dotcloud,一家开发PaaS平台的...
  • Docker1.12新特性之集群

    万次阅读 2016-08-07 16:54:15
    Docker1.12版本中,一个的功能点是swarm集群(基于swarmkit项目),通过docker命令可以直接实现docker-engine相互发现,并组建成为一个容器集群。有关集群的docker命令如下: (1)docker swarm:集群管理,...
  • 镜像(Image)、容器(Container)、仓库(Repository)是我们常说的Docker三大组件,接下来就让我们一起详细地探索一番吧。 一、镜像(Image) 什么是Docker镜像? 简单地理解,Docker镜像就是一个Linux的文件...
  • Docker其它安全特性

    2018-02-20 13:38:00
    除了能力机制之外,还可以利用一些现有的安全机制来增强使用 Docker 的安全性,例如 TOMOYO, AppArmor, SELinux, GRSEC 等。 Docker 当前默认只启用了能力机制。用户可以采用多种方案来加强 ...并且,启用该特性不...
  • Docker随着1.13版本的发布,Docker对Daemon的API和命令行做了一系列的改造,除了对容器,镜像等命令做了二级的命令(containers,images)的改造完,还增加了很多的系统或集群的管理的接口和命令,包含system,plugin,...
  • 摘要:近期发布的1.13的版本中,DockerDocker Engine内置的编排能力做了很多的更新,使用新的这些特性,我们能更好的编排和迭代我们的应用。 我们都知道在去年Docker轰动容器社区的在Docker Engine中集成了编排...
  • 深度解析Docker高级特性,王家林老师带你走入Docker大世界

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,101
精华内容 24,840
关键字:

docker三大特性