设为首页 收藏本站
查看: 662|回复: 0

[经验分享] 三、docker 容器管理(常用命令篇)

[复制链接]

尚未签到

发表于 2018-5-26 15:14:56 | 显示全部楼层 |阅读模式
三、docker 容器管理(常用命令篇)
  docker --help :查看帮助
  man docker
1.获取docker镜像
  docker search [image name],搜索相关镜像。
  > 如果下载镜像速度慢,可以考虑更换源。
  > curl -sSL https://get.daocloud.io/daotools/set_mirror.sh |sh -s http://04be47cf.m.daocloud.io
  docker pull [image name],下载指定镜像。
2.查看本地镜像
  docker images
3.创建|启动容器(docker create --help|docker run --help)
  man docker run


  •   docker create 创建后不会启动
      docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

  •   docker run 创建后启动容器
      docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

  •   OPTIONS 容器的常用参数 (docker create 和docker run 创建时参数相同。)

    • 数据持久化
    • 数据卷(将外部存储挂载到容器内。

      • 相当于nfs挂载的效果,可以多容器共享使用。

      -v --mount (最初,-v或--volume用标志独立的容器和--mount用于群服务标志。但是,从Docker 17.06开始,您也可以使用--mount独立的容器。一般来说, --mount更明确和详细。最大的区别在于,-v 语法将所有选项组合在一个字段中,而--mount 语法将它们分开。以下是每个标志的语法比较。提示:新用户应使用--mount语法。有经验的用户可能更熟悉-v或--volume语法,但鼓励使用--mount,因为研究表明,它更容易使用。如果您需要指定音量驱动程序选项,则必须使用--mount。)
    > docker run -itd -v /data:/home [image name]
      -itd 常用
    > -i (interactive) 开启容器标准输入(后期可以进入容器)
      > -t 伪终端
      > -d (detach) 后台运行
      --name 指定容器名
    > docker run -itd --name myfirstdocker [image name]
      -h (--hostname) 指定主机名
    > docker run -itd -h test_001 [image name]
      --add-host list 给运行容器动态添加hosts记录
    > dcoker run -itd --add-host test_001:192.168.1.102 [image name]
      --link 通过link方式创建容器,然后我们可以使用被link容器的别名进行访问。从而解除应用对IP的依赖。不幸的是,link方式只能解决单机容器间的互联。多机情况下,容器的互联需要其他的方式。(警告:该--link标志是Docker的旧版功能。它可能最终被删除。除非您绝对需要继续使用它,否则我们建议您使用用户定义的网络来促进两个容器之间的通信,而不是使用 --link。用户定义的网络不支持的一个功能--link是在容器之间共享环境变量。但是,您可以使用其他机制(如卷)以更受控制的方式共享容器之间的环境变量。)
    > docker run -itd --link [CONTAINER id]:myfirstdocker [image name]
      -a (--attach list)
      --cap-add list 设置容器中使用的cgroups的特定Capablity。若设置为ALL,则使用所有的Capablity
      --cap-drop list 从容器删除cgroup的特定Capablity
      cidfile string  将container id写入文件
    > docker run -itd -cidfile /path.cid [image name]
      --pid PID namespace to use
      device list 把一个主机设备添加到容器
      --dns list  指定容器dns (内部集成,也可以用外部。)
    > docker run -itd --dns 114.114.114.114 [image name]
      --dns-search=[]设置docker要使用的DNS搜索域
      -e (--env list) 设置环境变量(警告:重要的是要明白,一个容器内的所有源自Docker的环境变量都可供任何链接到它的容器使用。如果敏感数据存储在其中,这可能会带来严重的安全隐患。)
    docker run -itd -e "TEST=12345" [image name]
      env-file list
      --entrypoint="" 忽略Dockerfile的ENTRYPOINT设置,强制设置为其他值。
      --expose list 声明映射端口,只用于记录,并不是真的。
      -p (小写)(--publish list) 映射宿主机端口到容器(是否起作用,也要看情况,是否被占用端口。)
    > docke run -itd -p 8080:80 [image name]
      -P (大写)(--publish-all=true|false) 映射容器端口到宿主机随机端口
    > docker run -itd -P 80 [image name]
      --net="bridge" (--network)设置容器的网络模式(选项可以是:bridge,none,container,host)
    > docker run -itd --network net_192_168_100 [image name]
      --ip string 分配指定网络中的ip
    > docker run -itd --network net_192_168_100 --ip 192.168.1.1 [image name]
      --restart [always|on-failure:3] 当容器停止时自动重启,重启3次。
    > docker run -itd --restart on-failure:3 [image name]
      --ulimit nproc=9999 nofile=9999 用户打开最大进程数/最大打开文件数。
    > docker run -itd --ulimit nproc=9999 nofile=9999 [image name]
      --oom-kill-disable 关闭linix oomkill机制(物理内存不足时,清理高内存进程。)
    > docker run -itd --oom-kill-disable [image name]
      --log-driver [none|json-file|syslog|fluentd|splunk] 日志输出
    > docker run -itd --log-driver syslog [image name]
      --log-opt NAME=VALUE 标志指定其他journald日志记录驱动程序选项。
      -W (--workdir) 指定进入容器后的工作目录
      --cpu-period int 限制cpu周期
      --cpu-quota int 限制cpu使用量
      -c (--cpu-shares int) 设置cup资源分配。默认是这值为1024,各值为相对值
      --cpuset-cpus string 限制cpu个数
    > --cpuset="0,1" 则使用第一与第二个cup
      > --cupset="0-2" 则使用从第一到第三个cup
      --device-read-bps list 限制磁盘读取
      --device-write-bps list 限制磁盘写入
      --device-read-iops list 限制磁盘读取io
      --device-write-iops list  限制磁盘写入io
      -m (--memory bytes) 限制容器内存
      --memory-reservation bytes 容器内存软限制,允许突破限制
      memory-swap bytes 限制虚拟内存
      memory-swappiness int 设置swap权重 【0-10】 0禁止使用
      --storage-opt list 限制磁盘使用(只支持devicemapper存储驱动)

4.查看运行中容器
  docker ps -a
5.查看所有运行中容器id
  docker ps -a -q
6.删除镜像
  docker rmi [REPOSITORY|image id]
7.删除容器

  •   删除未运行容器。
      docker rm [CONTAINER ID|NAMES]

  • 删除运行中的容器
      docker rm -f [CONTAINER ID|NAMES]
    > docker rm -f $(docker ps -a -q)

8.进入容器
  1.使用ssh登陆进容器

  • 需要在容器中启动sshd,存在开销和攻击面增大的问题。同时也违反了Docker所倡导
    的一个容器一个进程的原则。
  2.使用nsenter、nsinit等第三方工具。

  • 需要额外学习使用第三方工具。
  3.使用docker本身提供的工具(常用)

  • docker attach [CONTAINER ID|NAMES]

    • Docker attach可以attach到一个已经运行的容器的stdin,然后进行命令执行的动作。
      但是需要注意的是,如果从这个stdin中exit,会导致容器的停止。

  •   docker exec [CONTAINER ID|NAMES] [COMMAND]

    •   docker exec执行后,会命令执行返回值。
        docker exec [CONTAINER ID|NAMES] [COMMAND]

    • 关于-i、-t参数.

      • 只用-i时,由于没有分配伪终端,看起来像pipe执行一样。但是执行结果、命令.返回值都可以正确获取。
      • 如果只使用-t参数,则可以看到一个console窗口,但是执行命令会发现由于没有获得stdin 的输出,无法看到命令执行情况。
      • 使用-it时,则和我们平常操作console界面类似。而且也不会像attach方式因为退出,导致整个容器退出。这种方式可以替代ssh或者nsenter、nsinit方式,在容器内进行操作。
      • docker exec -it [CONTAINER ID|NAMES] [COMMAND]相当于将容器执行效果反馈到当前终端。

    • 关于-d参数

      • 在后台执行一个进程。可以看出,如果一个命令需要长时间进程,使用-d参数会很快返回。 程序在后台运行。
      • 如果不使用-d参数,由于命令需要长时间执行,docker exec会卡住,一直等命令执行完成才返回。


9.退出容器
  ctrl+p --> ctrl+q
  exit 会停止容器
10.显示更底层的容器或image信息
  docker inspect [CONTAINER ID|NAMES]


  •   显示实例ip:
      sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' $INSTANCE_ID

  •   列出绑定端口:
      sudo docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID

  •   获取特殊端口映射
      sudo docker inspect --format='{{(index (index .NetworkSettings.Ports "8787/tcp") 0).HostPort}}' $INSTANCE_ID

  • 获取配置信息:
      sudo docker inspect --format='{{json .config}}' $INSTANCE_ID

11.docker网络管理

  •   docker network [options]
    DSC0000.jpg
      docker network create [options] 创建网络,默认闯将出来是bridge
    > docker network create --subnet=192.168.100.0/24 network_192.168_100 创建名称为‘network_192.168_100’ 网络范围为192.168.100.0/24的网络。(注意:强烈建议--subnet在创建网络时使用该选项。如果--subnet未指定,则docker守护程序会自动选择并为网络分配一个子网,并且可能会与您的基础架构中不由docker管理的另一个子网重叠。当容器连接到该网络时,这种重叠会导致连接问题或故障。除了--subnet选项,你也可以指定--gateway, --ip-range和--aux-address选项。)
    > -d overlay (--driver=overlay)overlay属性的驱动。
    > DSC0001.jpg
      docker network ls 查看网络
      --network-alias string 指定容器在网络中的别名
      docker network connect [networkname] [CONTAINER ID|NAMES] 将容器加入到网络中
      docker network disconnect [option](-f 强制) [networkname] [CONTAINER ID|NAMES] 将容器从网络中断开。
      docker network rm [networkname] 删除网络

12.docker拷贝

  •   拷贝容器内的文件到宿主
      docker cp [CONTAINER ID|NAMES]:$path $path

  • 拷贝宿主文件到容器中
      docker cp $path [CONTAINER ID|NAMES]:$path

13.docker diff

  • 比较一个容器不同版本提交的文件差异
      docker diff [CONTAINER ID|NAMES]

14.docker容器重命名
  docker rename [CONTAINER ID|NAMES]
15.docker获取容器终端日志
  docker logs [CONTAINER ID|NAMES]
16.docker动态获取容器负载情况
  docker top [CONTAINER ID|NAMES]
17.docker动态获取容器性能使用情况
  docker status [CONTAINER ID |NAMES]
18.docker获取映射端口信息
  docker port [CONTAINER ID|NAMES]
19.更新docker资源和参数限制
  docker update [OPTIONS] [CONTAINER ID|NAMES]

  • DSC0002.jpg
20.docker整体事件日志
  docker events [OPTIONS]


  •   事件过滤。
  •   事件日志格式化输出
  • DSC0003.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-481490-1-1.html 上篇帖子: Docker 容器资源隔离 namespace(十) 下篇帖子: 二、Docker概述(笔记)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表