Docker run 参考指南

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker run 参考指南相关的知识,希望对你有一定的参考价值。

docker运行在一个独立的隔离的进程中。

当用户执行docker run,它将启动一个有着独立的文件系统,独立的网络和独立的进程树的进程。

--rm:告诉Docker一旦运行的进程退出就删除容器。这在进行测试时非常有用,可免除杂乱[图片]

-ti:告诉Docker分配一个伪终端并进入交互模式。这将进入到容器内,对于快速原型开发或尝试很有用,但不要在生产容器中打开这些标志


基本的docker run命令的格式:

docker run  [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

 

[OPTIONS]分为两种:

1.对于用户独占性的设置:

前台、后台运行

容器定义

网络设定

容器在CPU和内存中的运行时间

运行权限和LXC配置

2.在操作者和开发者之间的共享设定,操作者可以覆盖掉开发者在build镜像的时候的默认设置。

 

前台和后台

后台(-d)

在后台模式(-d=true或者直接使用-d)

所有的IO操作都必须通过网络连接或者共享卷来进行,因为容器在后台运行的时候就不能收到命令行。

当然也可以通过执行dockerattach重新连上在后台执行的容器。

如果你选择运行一个容器在后台模式,那你就不能使用-rm选项了。

 

前台

在前台模式(默认的)

docker run可以在容器里开启一个进程同时

你可以通过控制台来获得进程的STDINSTDOUTSTDERR

可以作为终端和传递信号。所有这些的配置方法如下:

-a, --attach=[]           连接容器的stdinstdoutstderr (默认连接这三个流)

-t, --tty=false           使用终端。经常和 -i一起使用。

--sig-proxy=true          代理所有收到的系统信息(测试了一下好像没有作用)

-i, --interactive=false   打开STDIN和容器交互。经常和 -t一起使用。

 

docker run -a stdin -a stdout -i-t ubuntu /bin/bash

 

容器的标识

我们可以通过三种方式来定义一个容器

UUID长定义("f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778")

UUID短定义("f78375b1c487")

名字     ("evil_ptolemy")

UUID标识是来自于Docker后台进程

如果你不通过-name来分配一个名字给容器,那么后台进程就会产生一个随机的字段名。

 

PID等价为了更自动化,你可以在容器启动的时候将容器的进程ID写入到一个指定的文件中

--cidfile=""                   写入容器的进程ID到指定文件

 

网络设定

--dns=[]              设置容器的DNS服务器

--net="bridge"        设置容器的网络连接方式

                           ‘bridge‘:             桥接

                           ‘none‘:               不提供网络连接

                          ‘Container:<name|id>‘:复用另一个容器的网络连接,(共享一个网络堆栈)

                           ‘host‘:               使用宿主机的网络环境

 

$ docker run -d --name redisexample/Redis --bind 127.0.0.1

# use the redis container‘s network stack to access localhost

$ docker run --rm -ti --netcontainer:redis example/redis-cli -h 127.0.0.1

 

清理(-rm)

Docker容器会在运行结束之后继续保留容器的文件系统。

如果你希望在退出的时候自动清理这些文件,可以加上--rm参数。(特别适合初学者随便建容器)

    docker run -it --rm  mariadb:10.0.23 /bin/bash

容器的CPU和内存占用

用户可以调整容器的性能参数:

-m, --memory=""       内存限制(单位:b, k, m or g)

-c=0                  CPU优先级 (相对权重)

用户可以通过docker run -m来方便的限定容器的内存使用。

默认所有容器都运行在相同优先级上,得到相同的比例的CPU周期。

但是你可以在docker启动这些容器的时候告诉内核给予更多的cpu分配。

 

挂载目录(直接给例子吧)

-v=[]:绑定挂载目录

宿主机绑定: -v<host>:<container>:[rw|ro]

Docker中新建一个共享的卷: -v /<container>

sudo docker run --rm-i -t -v /home/hyzhou/docker:/data:rw ubuntu:14.04 /bin/bash

将本机的/home/hyzhou/docker,挂载到镜像中的/data目录

--volumes-from=""         从容器挂载共享目录

sudo docker run --rm -i -t -v/valume --name test ubuntu:14.04 /bin/bash

sudo docker run --rm-i -t --volumes-fromtest buntu:14.04 /bin/bash

挂载test镜像的/valume目录

 

 

用户

容器默认的用户是root(id=0),但是如果开发者创建了其他的用户,那些用户也可以访问。

开发者可以设置一个默认用户来运行第一个进程通过Dockerfile USER命令,但是操作者可以覆盖它:

-u=""                设置默认的用户名或UID

 

 

工作目录

一个容器内的默认工作目录是根目录(/)

-w=""                设置默认的工作目录


docker run -h node1 --name=node1 --ulimit nofile=65535:655350 -m 512M --memory-swap=1024M --net=none -d -it centos:latest /root/run
  这个时候容器就已经启动,但是不符合我的环境
  -h 主机名
  --name 给容器定义名字
  -ulimit 配置ulimit,当容器启动后就无法更改
  -m 分配内存

  --net=none 不使用docker网络,如果不配置会docker会自动分配ip地址给容器,但是每次重启后ip地址会改变,导致不符合我的环境,也可以用-p把端口映射出去,这样 端口不会改变,使用端口即可,但是正如我所说,不符合我的环境要求,后面采用脚本控制命名空间给容器配置静态ip






7、docker run命令详解

    Usage: docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]  
    Run a command in a new container  
    -a=map[]: 附加标准输入、输出或者错误输出  
    -c=0: 共享CPU格式(相对重要)  
    -cidfile="": 将容器的ID标识写入文件  
    -d=false: 分离模式,在后台运行容器,并且打印出容器ID  
    -e=[]:设置环境变量  
    -h="": 容器的主机名称  
    -i=false: 保持输入流开放即使没有附加输入流  
    -privileged=false: 给容器扩展的权限  

    -m="": 内存限制 (格式:<number><optional unit>, unit单位 = b, k, m or 


本文出自 “无法长大” 博客,请务必保留此出处http://tfbaby.blog.51cto.com/3125450/1902961

以上是关于Docker run 参考指南的主要内容,如果未能解决你的问题,请参考以下文章

docker 命令实用指南

性能环境之docker操作指南3(全网最全)

Docker 操作指南之构建镜像篇

docker run Influxdb

Docker命令-docker run

docker CLI官方教程 run方法解析(docer run docker attach 与 docker exec的区别)