文档章节

Docker run命令使用

China_OS
 China_OS
发布于 2014/05/24 11:32
字数 1547
阅读 424
收藏 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
粉丝 417
博文 460
码字总数 513813
作品 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 run”VS“docker exec”,这两个命令有区别吗?

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

docker公司
2018/09/17
0
0
docker RUN CMD ENTRYPOINT 区别

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

阿豪boy
2018/08/05
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技术实践——初级篇

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

闪亮的蛤蟆
2018/04/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据教程(11.9)hive操作基础知识

上一篇博客分享了hive的简介和初体验,本节博主将继续分享一些hive的操作的基础知识。 DDL操作 (1)创建表 #建表语法CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name ...

em_aaron
今天
2
0
OSChina 周四乱弹 —— 我家猫真会后空翻

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @我没有抓狂 :#今天听这个# 我艇牛逼,百听不厌,太好听辣 分享 Led Zeppelin 的歌曲《Stairway To Heaven》 《Stairway To Heaven》- Led Z...

小小编辑
今天
3
0
node调用dll

先安装python2.7 安装node-gyp cnpm install node-gyp -g 新建一个Electron-vue项目(案例用Electron-vue) vue init simulatedgreg/electron-vue my-project 安装electron-rebuild cnpm ins......

Chason-洪
今天
3
0
scala学习(一)

学习Spark之前需要学习Scala。 参考学习的书籍:快学Scala

柠檬果过
今天
3
0
通俗易懂解释网络工程中的技术,如STP,HSRP等

导读 在面试时,比如被问到HSRP的主备切换时间时多久,STP几个状态的停留时间,自己知道有这些东西,但在工作中不会经常用到,就老是记不住,觉得可能还是自己基础不够牢固,知识掌握不够全面...

问题终结者
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部