zoukankan      html  css  js  c++  java
  • docker 基本使用

    docker 基本使用

    Docker文档: https://docs.docker.com
    参考链接: https://www.jianshu.com/p/afb20541d781

    命令格式

    docker <选项><命令><参数>
    

    Docker命令

    选项说明

    • [] 表示设置选项时可以设置不同的值,并且可以多次使用。
    • =false表示默认值为false
    • =""表示默认是为空

    帮助文档

    docker --help                                                              
    管理命令:                                                                                                               
      config      管理Docker配置
      container   管理容器                                                                                                    
      image       管理镜像
      network     管理网络
      node        管理Swarm节点
      plugin      管理插件
      secret      管理Docker安全
      service     管理服务
      swarm       管理Swarm集群
      system      管理Docker系统
      trust       Manage trust on Docker images                                                                                        
      volume      管理卷
                                                                                                                                       
    命令:                                                                                                                          
      attach      将标准输入和标准输出连接到正在运行的容器                                        
      build       使用dockerfile文件创建镜像                                                                                     
      commit      从容器的修改项中创建新的镜像
      cp          将容器的目录或文件复制到本地文件系统中
      create      创建一个新的镜像
      diff        检查容器文件系统的修改
      events      实时输出docker服务器中发生的事件
      exec        从外部运行容器内部的命令
      export      将容器的文件系统到处为tat文件包
      history     显示镜像的历史
      images      输出镜像列表
      import      从压缩为tar文件的文件系统中创建镜像
      info        显示当前系统信息、docker容器与镜像个数、设置信息等
      inspect     使用JSON格式显示容器与镜像的详细信息
      kill        向容器发送kill信号关闭容器
      load        从tar文件或标准输入中加载镜像
      login       登录docker注册服务器
      logout      退出docker注册服务器
      logs        输出容器日志信息
      pause       暂停容器中正在运行的所有进程
      port        查看容器的端口是否处于开放状态
      ps          输出容器列表
      pull        从注册服务器中拉取一个镜像或仓库
      push        将镜像推送到docker注册服务器
      rename      重命名一个容器
      restart     重启一个或多个容器
      rm          删除一个或多个容器,若没有指定标签则删除lastest标签。
      rmi         删除一个或多个镜像,若没有指定标签则删除lastest标签。                                                
      run         在一个新容器中中运行命令,用于指定镜像创建容器。
      save        将一个或多个镜像保存为tar包             
      search      从Docker Hub中搜索镜像
      start       启动一个或多个已经停止的容器
      stats       Display a live stream of container(s) resource usage statistics                                                      
      stop        停止一个或多个正在运行的容器
      tag         设置镜像标签
      top         显示容器中正在运行的进程信息
      unpause     重启pause命令暂停的容器
      update      更新一个或多个容器的配置
      version     显示docker版本信息
      wait        等待容器终止然后输出退出码                                                                                                                                   
    Run 'docker COMMAND --help' for more information on a command.                                                                     
    

    img

    容器生命周期

    docker run

    # run用于指定镜像创建容器
    docker run [选项] <镜像名称, id> [命令] [参数]
    
    # 选项
    -d, --detach=false 指定容器运行于前台还是后台,默认为false。
    -i, --interactive=false 打开标准输入用于控制台交互
    -t, --tty=false 分配tty设备用来支持终端登录,默认为false。
    -u, --user="" 指定容器的用户
    -a, --attach=[] 登录容器,必须是以docker run -d启动的容器。
    -w, --workdir="" 设置容器的工作目录
    -c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景下使用。
    -e, --env=[] 设置环境变量,容器中可使用该环境变量。
    -m, --memory="" 设置容器的内存上限
    -p, --public=[] 设置容器暴露的端口
    -h, --hostname="" 设置容器的主机名
    -v, --volume=[] 设置容器挂载的存储卷,也就是挂载到容器的某个目录。
    --volumn-from=[] 给容器挂载其他容器上的卷,也就是挂载到容器的某个目录。
    --cap-add=[] 添加权限
    --cap-drop=[] 删除权限
    --cidfile="" 运行容器后在指定文件中写入容器PID值,这是典型的监控系统的用法。
    --cpuset="" 设置容器可以使用那些CPU,此参数用来设置容器独占CPU。
    --device=[] 添加主机设备给容器,相当于设备直通。
    --dns=[] 设置容器的DNS服务器
    --dns-search=[] 设置容器的DNS搜索域名,写入到容器的/etc/resolv.conf文件。
    --env-file=[] 设置环境变量文件,文件格式为每行一个环境变量。
    --expose=[] 设置容器暴露的端口,即修改镜像的暴露端口。
    --link=[] 设置容器之间的关联关系,使用其他容器的IP、env等信息。
    --lxc-conf=[] 设置容器的配置文件,只有在指定--exe-driver=lxc时使用。
    --name="" 设置容器的名称,可通过名字进行容器管理,links特性需要使用名字。
    --net="bridge" 容器网络设置
    --privileged=false 设置容器是否为特权容器,特权容器拥有所有的capabilities。
    --restart="no" 设置让其停止后的重启策略
    --rm=false 设置容器停止后自动删除容器,不支持以docker run -d启动的容器。
    --sig-proxy=true 设置由代理接收并处理信号,但SIGCHLD、SIGSTOP、SIGKILL不能被代理。
    
    # 命令
    -d, --detach Detach模式,默认为守护进程模式,即容器以后台方式运行。
    --rm=false 若容器内的进程终止则自动删除容器,禁止和-d选项一起使用。
    --sig-proxy=true 将所有信号传递给进程,非TTY模式也一样,但不能传递SIGCHLD、SIGKILL、SIGSTOP信号。
    
    # 运行一个在后台执行的容器,同时使用控制台管理。
    docker run -i -t -d ubuntu:latest
    
    # 运行一个带命令且在后台不断执行的容器,不直接展示容器内部信息。
    docker run -d ubuntu:latest ping www.docker.com
    
    # 运行一个在后台不断执行的容器,同时带有命令,程序被终止后还能重启继续跑,可用控制台管理。
    docker run -d --restart=always ubuntu:latest ping www.docker.com
    
    # 为容器指定一个名字
    docker run -d --name=ubuntu_server ubuntu:latest
    
    # 容器暴露80端口并指定宿主机81端口与其通信(宿主机端口:容器端口)
    docker run -d --name=ubuntu -p 81:80 ubuntu:latest
    
    # 指定容器内目录与宿主机目录共享(宿主机目录:容器目录)
    docker run -d --name=ubuntu_server -v /home/www:/var/www ubuntu:latest
    
    # 设置宿主机与docker的共享目录
    docker run -d -i -t  -p 80:80 -v /share/swoft:/var/www/swoft --name swoft swoft/swoft /bin/bash
    

    使用docker run启动容器,docker在后台的标准操作流程:

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

    img

    docker run

    docker create

    # create 使用指定的镜像创建容器,与run命令不同的是,使用create命令只能创建容器而并不启动。
    docker create [选项] <镜像名称,id> <命令> [参数]
    
    # 选项
    -a, --attach=[] 将标准输入、标准输出、标准错误链接到容器
    -C, --cpu-shares=0 设置CPU资源分配,默认为1024。
    -e, --env=[] 向容器设备环境变量,用于传递设置或密码。
    -h, --hostname="" 设置容器主机名
    -i, --interactive=false 激活标准输入,即使未与容器连接,也维持标准输入。
    -m, --memory="" 设置内存限制,格式<数字><单位>,单位可用b、k、m、g。
    -P, --publish-all=false 将连接到主机的容器的所有端口暴露在外
    -p, --publish=[] 将连接到主机的容器的特定端口暴露在外,主要用于暴露web服务器的端口。
    -t, --tty=false 使用TTY模式,若要使用Bash则必须设置该选项。
    -u, --user="" 设置容器运行时要使用的Linux用户账户和UID
    -v, --volume=[] 设置数据卷,设置要与主机共享的目录,不将文件保存到容器而是直接保存到主机,在主机目录后添加:ro与:rw进行读写设置,默认未:rw。
    -w, --workdir="" 设置容器内部要运行进程的目录
    -add-host=[] 向容器的/etc/hosts添加主机名与IP地址
    --cap-add=[] 设置容器中使用的cgroups的特定capablity,若设置为all则使用所有的capablity。
    --cap-drop=[] 从容器中删除cgroup的特定capablity。
    --cidfile="" 设置cid文件路径,cid中存储着所创建容器的id。
    --cpuset="" 在多核CPU中设置要运行容器的核心数
    --device=[] 添加主机设备到容器,格式为<主机设备>:<容器设备>
    --dns=[] 设置容器中使用的DNS服务器
    --dns-search=[] 设置docker中要使用的DNS搜索域
    --entrypoint="" 忽略Dockerfile的ENTRYPOINT设置,强制设置为其他值。
    --env-file=[] 向容器应用设置环境变量文件
    --expose=[] 仅连接容器的端口和主机,并不暴露在外。
    --link=[] 进行容器连接,格式 <容器名称>:<别名>
    --lxc-conf=[] 若使用LXC驱动则可设置LXC选项
    --name 设置容器名称
    --net="bridge" 设置容器的网络模式
    --privileged=false 在容器内部使用主机的所有linux内核功能
    --restart="" 设置容器内部进程终止时重启策略
    --security-opt=[] 设置SELinux、AppArmor选项
    --volumn-from=[] 连接数据卷容器,设置格式未<容器名称,id>:<:ro, :rw>,默认读写设置遵从-v选项的设置。
    
    # 使用docker镜像nginx:latest创建一个容器名为ubuntu_serve
    docker create --name ubuntu_serve ubuntu:latest
    docker create -it --name ubuntu_server ubutnu:latest /bin/bash
    

    docker start

    # start用于启动容器
    docker start <选项><容器名称, id>
    
    # 选项
    -a, --attach=false 将标准输入、标准输出、标准错误连接到容器,传递所有信号。
    -i, --interactive=false 激活标准输入
    

    docker stop

    # stop用于终止容器
    docker stop <选项><容器名称, id>
    
    # 选项
    -t, --timeout=10 设置终止容器前的等待时间,单位为秒。
    

    docker restart

    # restart 用于重启容器
    docker restart [选项] <容器名称, id>
    

    docker pause

    # pause 用于暂停容器中所有的进程
    docker pause [选项] <容器名称, id>
    

    docker unpause

    # unpause用于重启使用pause命令暂停的容器
    docker unpause <容器名称, id>
    

    docker kill

    # kill用于杀掉一个运行中的容器,发送SIGKILL信号来停止的主进程。
    docker kill [选项] <容器名称, id>
    
    # 选项
    -s 向容器发送一个信号
    
    # 杀死运行中的容器nginx
    docker kill -s KILL nginx
    

    docker rm

    # rm用于删除一个或多个容器
    docker rm [选项] <容器名称,id>
    
    # 选项
    -f 通过SIGKILL信号强制删除一个运行中的容器
    -l 移除容器间的网路连接而非容器本身
    -v 删除与容器关联的卷
    
    # 强制删除容器test
    docker rm -f test
    
    # 删除容器test并删除挂载的数据卷
    docke rm -v test 
    

    docker exec

    # exec 用于在运行中的容器中执行命令
    docker exec [选项] <容器名称, id> <命令> [参数]
    
    # 选项
    -d 分离模式即在后台运行
    -i 即使没有附加也保持STDIN标准输入打开
    -t 分配一个伪终端
    
    # 在容器test中以交互模式执行容器内/root/test.sh脚本
    docker exec -it test /bin/sh /root/test.sh
    

    容器操作

    docker ps

    # ps用于输出容器列表
    docker ps <选项>
    
    # 选项
    -a, --all=false 列出所有容器,不带-a则输出当前正在运行的容器。
    --before="" 列出特定容器创建前的容器,包含停止的容器。
    -f, --filter=[] 设置输出过滤
    -l, --latest=false 列出最后创建的容器包含停止的容器
    -q, --quiet=false 只输出容器的ID
    

    docker top

    # top用户显示容器中正在运行的进程信息
    docker top <容器名称, id><ps选项>
    

    docker attach

    # attach 用于将标准输入与标准输出连接到正在运行的容器
    docker attach <选项><容器名称, id>
    

    docker logs

    # logs用于获取容器的日志
    docker logs [选项] <容器名称,id>
    
    # 选项
    -f 跟踪日志输出
    --since 显示某个开始时间的所有日志
    -t 显示时间戳
    --tail 仅仅列出最新n条容器日志
    
    # 跟踪查看test容器的日志
    docker logs -f test
    
    # 查看test容器从2019年4月1日以后的最新10条日志
    docker logs --since="2019-04-01" --tail=10 test
    

    如何动态跟踪并查看myswoft容器的日志详情呢?

    docker logs -tf --details myswoft
    

    如何清理日志文件呢?

    Docker日志默认存储位于:/var/lib/docker/containers//*.log

    # 在docker中切换为root用户
     su -i
    # 查看docker容器的id
    docker ps -a | grep mysoft
    
    # 查看容器日志文件大小
    ls -lh  $(find /var/lib/docker/containers/ -name *-json.log)
    
    # 进入日志目录
    cd  /var/lib/docker/containers/
    
    # 临时清理日志文件
    truncate -s 0 /var/lib/docker/containers/<container_id>/*-json.log
    
    # 临时清理日志文件
    cat /dev/null > *-json.log
    
    # 使用rm删除日志文件后是需要重启容器的,如果容器运行状态下Linux进程会引用着不会释放磁盘空间。
    rm -rf *-json.log
    

    docker port

    # port用于列出指定容器的端口映射,或者用于查找将PRIVATE_PORT NAT到面向公众的端口。
    docker port [选项] <容器名称,id> [PRIVATE_PORT[/PROTO]]
    
    # 查看test容器的端口映射情况
    docker port test
    

    镜像仓库

    # search用于在docker hub中搜索镜像
    docker search <选项><搜索关键词>
    
    # 选项
    --automated=false 只显示由docker hub的automated build创建的镜像
    --no-trunc=false 显示所有因内容过长而省略的部分
    -s, --stars=0 显示有特定星级以上的镜像
    

    本地镜像

    docker images

    # images用于输出镜像列表
    docker images <选项><镜像名称, id>
    
    # 选项
    -a, --all=false 列出所有镜像包含父镜像。
    -f, --filter=[] 设置输出结果过滤,若设置为dangling=true则仅输出无名镜像。
    --no-trunc=false 显示所有因内容过长而省略的部分
    

    docker rmi

    # rmi 用于删除镜像,若没有指定标签则会删除latest标签。
    docker rmi <注册名称>/<镜像名称, id>:<标签>
    
    # 选项
    -f, --force=false 强制删除镜像
    --no-prune=false 不删除不带标签的父级镜像
    
    # 删除所有镜像
    docker rmi `docker images -aq`
    

    docker tag

    # tag用于设置镜像标签
    docker tag <选项><镜像名称>:<标签><注册地址, 用户名>/<镜像名称>:<标签>
    
    # 选项
    - f, --force=false 强制设置,即使已拥有标签,如远程仓库设置标签。
    

    docker save

    # save用于将镜像保存为tag包文件
    docker save <选项><镜像名称>:<标签>
    
    # 选项
    -o, --output="" 设置保存时的文件名称
    

    若不设置-o选项,tar包文件会输出到标准输出,所以必须设置重定向。如果仅指定镜像名称但没有指指定标签,则会将所有标签都保存到一个tar包文件中。

    信息查看

    docker info

    # info用于显示当前系统信息、docker容器和镜像数量、设置等信息。
    docker info
    

    docker version

    # version用户输出docker的版本信息
    docker version
    

    参考链接

  • 相关阅读:
    非域,非匿名用户访问远程企业服务的详细步骤
    调用远程的企业服务的安全问题
    未能加载文件或程序集“****”或它的某一个依赖项的一种情况
    XAMPP使用非80端口的安装配置修改
    Lucene 的存储结构概述
    .NET Framework 4.0 SDK的安装
    lucene 文件存储相关的几个类
    ASP.NET 状态服务 及 session丢失问题解决方案总结
    不安装.net framework框架运行.Net 程序的方法<收藏>
    net面试题集及答案
  • 原文地址:https://www.cnblogs.com/tomyyyyy/p/12813250.html
Copyright © 2011-2022 走看看