Docker run参考指南
docker运行在一个独立的隔离的进程中。
当用户执行dockerrun,它将启动一个有着独立的文件系统,独立的网络和独立的进程树的进程。
基本的docker run命令的格式:
docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
[OPTIONS]分为两种:
1.对于用户独占性的设置:
前台、后台运行
容器定义
网络设定
容器在CPU和内存中的运行时间
运行权限和LXC配置
2.在操作者和开发者之间的共享设定,操作者可以覆盖掉开发者在build镜像的时候的默认设置。
前台和后台
后台(-d)
在后台模式(-d=true或者直接使用-d)
所有的IO操作都必须通过网络连接或者共享卷来进行,因为容器在后台运行的时候就不能收到命令行。
当然也可以通过执行dockerattach重新连上在后台执行的容器。
如果你选择运行一个容器在后台模式,那你就不能使用-rm选项了。
前台
在前台模式(默认的)
docker run可以在容器里开启一个进程的同时
你可以通过控制台来获得进程的STDIN、STDOUT、STDERR。
也可以作为终端和传递信号。所有这些的配置方法如下:
-a, --attach=[] 连接容器的stdin、stdout、stderr (默认连接这三个流)
-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参数。(特别适合初学者随便建容器)
容器的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="" 设置默认的工作目录