文档章节

Docker run命令使用

China_OS
 China_OS
发布于 2014/05/24 11:32
字数 1547
阅读 417
收藏 0

      docker在一个隔离的容器中运行进程,当你运行一个docker run命令的时候,docker会在自己的文件系统中启动一个进程,有它自己的网络、自己隔离的进程树等等。docker run命令控制了你运行的容器的状态。

      docker命令如:docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

         这些配置一起组合起来,可以使docker run完全控制一个容器运行时的行为,它还允许覆盖docker build在构建镜像时配置的一些默认配置。

         列表[OPTIONS]中包含了两大组设置信息:

            1    Operator Exclusive Options

                   操作者在运行docker run时可以设置以下参数

                    1    Detached vs Foreground

                            在你启动一个容器的时候,你第一要考虑的是该容器是运行在后台呢还是运行在前端。在后台模式下(-d=true或者-d),所有I/O操作应该通过网络连接或者共享卷来实现,因为容器在后台模式下并没有长时间的监听在命令行模式下。但是你可以使用docker attach附加到一个容器上面。如果你运行一个容器在后台模式,则不能使用--rm选项。

                            在前端模式下(不指定-d参数即可),docker run在容器中启动一个进程并且attach console到这个进程的标准输入、输出、错误上面。它甚至可以伪装成一个TTY。如果你不用-a参数指定attach到哪里,则默认attach到stdin、stdout、stderr。你尅这样使用:docker run -a stdin -a stdout -i -t ubuntu /bin/bash

                    2    Container Identification

                            有三种方法识别一个容器,一种是长的UUID,一种是短的UUID,还有一种是容器的名称。如果你在运行一个容器时没有使用--name参数指定一个容器名称,  则docker守护进程会产生一个UUID,你也可以让docker把容器ID写入到一个文件中,通过指定--cidfile参数来实现。

                    3    Network Settings

                            默认情况下,所有的容器都是有网络的,并且可以从容器内部链接到外部的。但是你可以把网络完全禁止掉,使用-net none参数来实现该功能,它会禁止进入容器和从容器出去的流量。默认情况下容器和你的宿主机使用的是同一个dns,但是你可以指定容器使用自己的dns,通过--dns来指定。容器目前支持四种网络模型:none--容器没有网络,只有loopback地址。bridge--容器使用docker自建的默认网络,一个名为docker0的网桥会在宿主机上被建立,一个veth接口被桥接到容器上。host--共享使用宿主机自己的网络栈和所有网络接口。容器的主机名和宿主机的主机名会匹配。container--容器共享其他容器的网络栈,其他容器的名称必须通过-net container:<name|id>来提供。

                            高级网络设置参考:网络配置

                    4    Clean Up (–rm)

                            默认情况下载容器退出后,容器的文件系统是会继续保留的,这样使得debugging会变得容易一些,但是有时候你只是运行一个简短任务的容器在前端,这会导致容器文件系统大量堆积,而你希望在容器运行完之后自动删除容器及其文件系统,你可以通过--rm参数来实现。该参数和-d参数不能同时使用。

                    5    Runtime Constraints on CPU and Memory

                            你也可以调整容器的一些性能参数,例如cpu和mem。你可以通过-m来设置容器所能使用的内存大小,如果系统支持swap,你也可以把内存设置的比物理内存大。同样的可以通过-c来指定容器的优先级,默认情况下所有的容器运行在相同的优先级,获得相同的cpu运行时间,但是你可以指定某个容器分配更多的cpu运行时间

                    6    Runtime Privilege and LXC Configuration

                             默认情况下,容器是无特权的,例如你要在一个容器中再运行一个docker守护进程,这是不允许的,因为容器不被允许访问device的,但是被授予特权的容器却是可以访问的,可以通过--priviledged参数来指定。如果你在启动容器时使用了lxc执行驱动,则可以指定一些lxc配置。

            2    Overriding Dockerfile Image Defaults

                    有四个Dockerfile命令不能被覆盖:FROM、MAINTAINER、RUN、ADD。除此之外的Dockerfile命令都可以用docker run来覆盖。

                    1    CMD (Default Command or Options)

                            你可以在命令行提供一个COMMAND,用来覆盖在Dockerfile中CMD指定的命令。

                    2    ENTRYPOINT (Default Command to Execute at Runtime)

                    3    EXPOSE (Incoming Ports)

                            Dockerfile并没有给予网络更多的控制,只是提供了一个EXPOSE指令来给操作者说明那个入口可以提供服务。正如我们理解的,EXPOSE指令可以使通过一个端口连接到容器内部,在容器内部的端口号不需要和暴露在容器外面的端口号一致。例如:你的容器运行一个HTTP服务,监听在内部的80端口,然后你EXPOSE 80在Dockerfile中,但是在容器外部这个端口可能被映射成42800。为了是客户端可以连接到容器内部经过EXPOSE指定的端口,有三种办法可以选择,使用-P,-p,--link三个参数。

                    4    ENV (Environment Variables)

                            你可以通过-e参数给容器设置一些环境变量,用来覆盖Dockerfile中ENV的设置。

                    5    VOLUME (Shared Filesystems)

                            这个比较复杂,参考:volume配置

                    6    USER

                            默认情况下,容器有一个id=0的root用户,但是假如你创建了一个其他用户,并且希望用该用户来运行应用,则可以使用-u参数来指定,覆盖Dockerfile中USER指令。

                    7    WORKDIR

                            设置一个工作目录,默认是根目录


© 著作权归作者所有

共有 人打赏支持
China_OS
粉丝 412
博文 451
码字总数 510295
作品 0
静安
技术主管
“docker run”VS“docker exec”,这两个命令有区别吗?

出品丨Docker公司(ID:docker-cn) 编译丨小东 每周一、三、五晚6点10分 与您不见不散! “docker run”和“docker exec”都是 Docker 容器中用于执行的命令。然而,在不同的情况下,它们的...

docker公司
09/17
0
0
利用Dockfile 制作镜像

mkdir /home/patzheng/docker/sshdubuntu 三个文件: run.sh :负责启动sshd服务。宿主机上,使用ADD命令拷贝到docker容器中间去 #!/bin/bash /usr/sbin/sshd -D authorizedkeys:本地公钥 ...

zheng_pat
2015/10/14
631
0
Docker技术实践——初级篇

这是一篇关于Docker技术的初级文档,主要针对Docker的babies。当然,如果是老鸟也欢迎温故知新。 2. Docker组件(C/S) Docker组件分为客户端和服务端。 Docker Client:Docker的客户端 Dock...

闪亮的蛤蟆
04/18
0
0
Docker理论与实践(二)

文章作者:Tyan 博客:noahsnail.com 1. Docker命令 1.1 docker run hello-world解析 这个命令总共有三部分: docker:告诉操作系统你使用的是docker程序 run:创建和运行docker容器的子命令...

Quincuntial
2016/09/22
0
0
docker RUN CMD ENTRYPOINT 区别

RUN 执行命令并创建新的镜像层,RUN 经常用于安装软件包。 CMD 设置容器启动后默认执行的命令及其参数,但 CMD 能够被 后面跟的命令行参数替换。 ENTRYPOINT 配置容器启动时运行的命令。 如果...

阿豪boy
08/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
今天
2
0
OSChina 周五乱弹 —— 想不想把92年的萝莉退货

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @罗马的王:分享松澤由美的单曲《地球ぎ》 很久没看圣斗士星矢了 《地球ぎ》- 松澤由美 手机党少年们想听歌,请使劲儿戳(这里) @开源中国首...

小小编辑
今天
14
2
springBoot条件配置

本篇介绍下,如何通过springboot的条件配置,控制Bean的创建 介绍下开发环境 JDK版本1.8 springboot版本是1.5.2 开发工具为 intellij idea(2018.2) 开发环境为 15款MacBook Pro 前言 很多时候,...

贺小五
今天
1
0
javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
1
0
谈谈如何学Linux和它在如今社会的影响

昨天,还在农耕脑力社会,今天已经人工智能技术、大数据、信息技术的科技社会了,高速开展并迅速浸透到当今科技社会的各个方面,Linux日益成为人们信息时代的到来,更加考验我们对信息的处理程...

linux-tao
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部