zoukankan      html  css  js  c++  java
  • docker 常用命令

    docker和传统虚拟化方式不同:

    1. 传统虚拟化技术是虚拟出一套硬件后,在其上运行一个完整的操作系统,在该系统上运行所需应用进程;
    2. 容器内的应用进程直接运行于宿主的内核,容器没有自己的内核,也没有硬件虚拟。因此更为轻便
    3. 每个容器之间相互隔离,每个容器都有自己的文件系统,容器直接的进程不会相互影响,能区分计算资源

     

    docker三要素:

    镜像(Image):一个只读的模板。镜像可以用来创建docker容器,一个镜像可以创建很多容器

    容器(Container):docker利用容器独立运行的一个或一组应用。容器是镜像创建的运行实例。

    可以被启动,开始,停止,删除。每个容器都是相互隔离的、保证安全的平台。

    可以把容器看成简易版的Linux环境(root权限,进程空间,用户空间和网络空间)和运行在其中的应用程序。

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

    仓库(Repository):存放镜像文件的场所。

    仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放多个仓库,每个仓库又包含多个镜像,每个镜像都有自己的唯一标签(tag).

    仓库分为公开仓库(public)和私有的仓库(private)。最大的公开仓库是Docker Hub(https://hub.docker.com/

     

    docker使用EPEL发布,RHEL系的OS首先确保已经持有EPEL仓库,否则先检查os的版本,然后安装相应的EPEL包

     

    docker常用帮助命令 docker version,docker info,docker --help

     

    docker 镜像命令:

    1. docker images

     

    REPOSITORY:镜像仓库源

    TAG:镜像的标签

    IMAGE ID:镜像ID

    CREATED:创建时间

    SIZE:镜像大小

    同一个仓库源可以有多个TAG,代表这个仓库源的不同版本,使用REPOSITORY:TAG 来定义不同的镜像。

    如果不指定一个镜像的版本标签,例如只使用ubuntu,docker会默认使用ubuntu:lastest镜像

     

    OPTIONS说明:-a:列出本地所有镜像(含中间映像层)

    -q:只显示镜像ID

    --digests:显示镜像的摘要信息

    --no-trunc:显示完整的镜像信息

     

    1. docker search

    docker search [OPTIONS] 镜像名字

    OPTIONS说明:--no-trunc:显示完整的镜像描述

      -s:列出收藏数不小于指定值的镜像(Flag --stars has been deprecated, use --filter=stars=3 instead)

      --automated:只列出automated build类型的镜像

     

    1. docker pull

    docker pull tomcat 等价于docker pull tomcat:latest

     

    1. docker rmi

    删除单个:docker rmi 镜像ID或镜像名 #docker rmi hello-world等价于docker rmi hello-world:latest

    -f:强制删除

    删除多个:docker rmi 镜像名1:TAG 镜像名2:TAG  

    删除全部:docker rmi -f $(docker images -qa)

     

    Docker 容器命令:

      docker create [OPTIONS] IMAGE [COMMAND] [ARG…]

      创建一个容器但不启动它。

     

    1. docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

    OPTIONS: --name=“容器新名字”:为容器指定一个名称

       -d:后台运行容器,并返回容器ID,即启动守护式容器

       -i:以交互模式运行容器,通常与-t同时使用

       -t:为容器重新分配一个伪输入终端,通常与-i同时使用

       -P:随机端口映射

       -p:指定端口映射,有以下四种格式:

    ip:hostPort:containerPort

    ip::containerPort

    hostPort:containerPort

    containerPort

      

    OPTIONS说明:
    
    -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
    
    -d: 后台运行容器,并返回容器ID;
    
    -i: 以交互模式运行容器,通常与 -t 同时使用;
    
    -P: 随机端口映射,容器内部端口随机映射到主机的高端口
    
    -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
    
    -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    
    --name="nginx-lb": 为容器指定一个名称;
    
    --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
    
    --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
    
    -h "mars": 指定容器的hostname;
    
    -e username="ritchie": 设置环境变量;
    
    --env-file=[]: 从指定文件读入环境变量;
    
    --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
    
    -m :设置容器使用内存最大值;
    
    --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
    
    --link=[]: 添加链接到另一个容器;
    
    --expose=[]: 开放一个端口或一组端口;
    
    --volume , -v: 绑定一个卷
    OPTIONS说明

     

    1. docker ps

    docker ps [OPTIONS]:查看docker有哪些容器在运行

    OPTIONS:-a:列出当前所有正在运行的容器+历史上运行过的容器

           -l:显示最近创建的容器

           -n 3:显示最近3个创建的容器

           -q:静默模式,只显示容器编号

           --no-trunc:不截断输出

     

    1. 退出容器

    exit:容器停止退出

    ctrl+P+Q:容器不停止退出

    1. 启动容器

    docker start 容器ID或者容器名

    1. 重启容器

    docker restart 容器ID或者容器名

    1. 停止容器

    docker stop 容器ID或者容器名

    1. 强制停止容器

    docker kill 容器ID或者容器名

    1. 删除已停止的容器

    docker rm 容器ID

    删除多个容器:docker rm -f $(docker ps -a -q)

    docker ps -a -q| xargs docker rm

     

    重要:

    docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 2; done"

     

    docker run -d 镜像:后台运行镜像。

    docker容器后台运行,就必须有一个前台进程。容器运行的命令如果不是那些一直挂起的命令(比如top,tail),就是会自动退出的。

     =====================

    1. 镜像原理:

     镜像是一个轻量级、可执行的独立软件包,用来打包运行环境和基于运行环境开发的软件。它包含应用软件所需的所有内容,包括代码,运行时,库,环境变量以及配置文件。

      联合文件系统(UnionFS):

      是一种分层,轻量级,高性能的文件系统,它支持文件系统的修改作为一次提交来层层叠加。Union文件系统是docker镜像的基础。镜像通过分层来继承,基于基础镜像,可以制作各种各样的应用镜像。特性:一次加载多个文件系统,但是在外面看来,只有一个文件系统。联合加载会把各个文件叠加起来,这样的文件系统会包含所有的底层和目录。

      docker镜像加载原理:

      bootfs(boot file system)主要包含bootloader 和kernel,bootloader主要是引导加载kernel。linux刚启动时会加载bootfs系统。docker的底层就是bootfs,Linux系统启动时,通过bootloader加载内核,加载完成后内核就在内存中了,此时系统将会卸载bootloader。

      rootfs(root file system),在bootfs之上,典型的是Linux系统的标准文件和目录(/dev,/etc。。。)。rootfs是不同操作系统的发行版(Ubuntu,centos etc)。

    特点:镜像都是只读的,当容器启动时,一个可写层被加载到镜像的顶部,这一层叫容器层,容器层下的都叫做镜像层。

    镜像提交:

    docker commit 提交容器副本使之成为一个新的镜像

    docker commit -m "描述信息" -a "作者" 容器ID 要创建的镜像名:标签

    容器是一个简易的Linux系统包括root用户权限,进程空间,用户空间和网络空间等

    启动守护式进程:docker run -d 容器名

    查看容器日志:docker logs -f -t --tail 容器id

        -t:加入时间戳(time)

        -f:持续输出

        --tail 数字:显示后多少行

    查看容器内进程:docker top 容器ID

    查看容器内部细节:docker inspect 容器ID

    操作容器并以命令行交互:1. docker exec -it 容器ID /bin/bash

                2. docker attach 容器ID:重新进入docker

                区别:attach 进入容器启动的终端 exec:在容器中启动新的终端,并可以启动新的进程,exit不会终结容器

            docker exec -t centos容器id ls -l /tmp:查看centos容器内/tmp路径下的文件并返回给宿主机

            -t:tty命令行 -i:interactive交互式

    从容器内拷贝文件到宿主机:docker cp 容器ID:docker内路径 宿主机路径

    容器数据卷 

    概念:容器和宿主机之间共享数据的文件夹

    特点:1.数据卷可在容器间共享或重用数据

      2.卷中的更改可以直接生效

      3.数据卷中的更改不会包含在镜像中

      4. 数据卷的生命周期一直持续到没有容器使用它为止

    容器内添加:

      1.直接命令添加

        命令:docker run -it -v /宿主机绝对路径:/容器内路径 镜像名(--mount source=myvol2,target=/app 也可)

        查看数据卷是否挂载成功:docker inspect containerID (会在Mounts:"RW":true 显示 read write)

        容器停止后再启动依然会同步

        带权限的容器数据卷:docker run -it -v /宿主机绝对路径:/容器内路径:ro 镜像名(read only)

      2.Dockerfile添加

        VOLUME["/dataVolumeContainer", "/dataVolumeContainer2", "/dataVolumeContainer3"]

        说明:出于可移植性和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。并不能保证所有的宿主机都存在这样的目录。

        docker build -f /DockerfilePath -t 镜像名称 .    #-f:file -t:命名空间 最后还有一个点

        使用: docker inspect containerID 查看映射的宿主机路径

        如果出现docker挂载主机目录docker访问出现cannot open directory.:Permission denied, 解决办法:在挂载目录后面多加一个--privieged=true 即可

      

      数据卷容器:命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器

      容器间传递共享: --volumes-from

      docker run -it --name c02 --volume-from c01 imageID

      删除数据卷容器后子容器依然可以共享数据卷,因为都绑定的是同一个宿主机目录。容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。 

    Dockerfile

      概念:Dockerfile是用来构建docker镜像的构建文件,是由一系列命令和参数构建成的脚本。

      构建三步曲:编写Dockerfile -> docker build -> docker run

      scratch: 所有镜像的父镜像相当于java object类

    Dockerfile基础:

      1. 每条保留字指令都必须为大写且后面必须跟随至少一个参数

      2. 指令按照从上到下,顺序执行。

      3. #表示注释

      4. 每条指令都会创建一个新的镜像层,并对镜像进行提交

    Docker执行Dockerfile的大致流程:

      1. docker从基础镜像运行一个容器

      2. 执行一条指令并对容器作出修改

      3. 执行类似docker commit 的操作提交一个新的镜像层

      4. docker再基于刚提交的镜像运行一个新的容器

      5. 执行Dockerfile中的下一条指令直至所有指令都执行完成

    Dockerfile、Docker镜像、Docker容器关系:

      1. Dockerfile定义了进程所需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统发行版、服务进程和内核进程等。

      2.Docker镜像:在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行Docker镜像时,会真正开始提供服务;

      3. Docker容器,容器是直接提供服务的。

    Dockerfile保留字指令:

    FROM:基础镜像,当前新镜像是基于哪个镜像的。

    MAINTAINER: 镜像维护者的姓名 和邮箱地址

    RUN:容器构建时需要的命令

    EXPOSE:当前容器对外暴露的端口号

    WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

    ENV:用来在构建镜像过程中设置环境变量 ENV KEY VALUE

    ADD:在宿主机目录下的文件拷贝进镜像并且ADD命令会自动处理URL和解压tar压缩包

    COPY:类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置

      1)copy src dest

      2)COPY ["src", "dest"]
    VOLUME:容器数据卷,保存数据和数据持久化工作

    CMD:指定一个容器启动时要运行的命令

      CMD指令的格式和RUN相似,也是两种格式:

      1)shell格式:CMD <命令>

      2)exec格式:CMD ["可执行文件", "参数1", "参数2"]

      参数格式:CMD ["参数1", "参数2"...], 在指定了ENTRYPOINT 指令后,用CMD指定具体的参数。

    Dockerfile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换。

    ENTRYPOINT:指定一个容器启动时要运行的命令

      ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。(追加)


    ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发。

    docker run -p 3306:3306 --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

    Docker build 镜像

    docker build -f /DockerfilePath -t 镜像名称 .    #-f:file -t:命名空间 最后还有一个点

    Docker commit 镜像

    docker commit -a author -m "commit content" containerID imageName:version

    Mac 查看docker volume路径

    https://www.jianshu.com/p/f0ad94ba8ba4

  • 相关阅读:
    Strange RadioButton group behavior with ToolBar
    在XAML中为ItemsControl定义分组,适合mvvm绑定
    如何编写无法维护的代码 让自己稳拿铁饭碗 ;-)
    WPF 应用程序资源、内容和数据文件
    XNA+WPF solution worked
    object转List<XXX>的问题
    VS2013 执行Enable-Migrations,产生错误的解决办法
    WPF 为 PasswordBox 控件添加水印,最低级版
    为 ItemsControl 类型的控件提供行号,mvvm模式 绑定集合
    把父窗体设置为桌面,显示桌面时程序仍然能显示
  • 原文地址:https://www.cnblogs.com/tiandz/p/12164061.html
Copyright © 2011-2022 走看看