创建并运行一个容器。该命令相当于docker create + docker start
docker run
的帮助:
docker run
命令的使用格式:
docker run [option]... <imageId|imageRepository:[tag]> [commandOfContainer]
docker run
是最为复杂的一个命令,参数非常多,下面是一些常用的参数:
参数 | 说明 |
---|---|
-h <hostname> | 容器的hostname,默认是容器的ID |
-p <portOfHost[:portOfContainer]> | 端口映射,将宿主机的端口和容器的端口进行映射,这样就可以通过http://ipOfHost:portOfHost 访问容器了 |
-u <username|uid> | 指定启动的容器以哪个用户登陆,默认是root |
-e <key=value> | 设置容器启动后可以使用的环境变量,这样动态指定比较灵活 |
-name <str> | 给容器起一个名字,这样,我们在启动、重启、停止、删除等后续的容器操作中使用这个名字, 如果不起名字,只能使用containerId |
-d | 以后台方式运行,这样,我们执行完这条命令,还可以干其他事情,写脚本最常用 |
-i | 以交互方式运行,是阻塞式的 |
-t | 分配一个伪终端,这个参数通常与-i 参数一起使用,然后, 在后面跟上容器里的/bin/bash ,这样就把我们带到容器里去了。 |
--rm | 在容器停止的时候自动删除容器。如果是临时使用的话,这样是非常方便的。 |
示例1:
sudo docker run -p 3036:3036 -d -e MYSQL_ROOT_PASSWORD=123456 -name mysql5.7 mysql:5.7
说明:
使用ImageRepository
为mysql
,ImageTag
为5.7
的镜像, 创建并运行了一个新容器,新容器的名字为mysql5.7
,以后台方式运行,把宿主机器的3036
端口与 要启动的这个新容器的3306
端口进行映射,这样,我们就可以通过宿主机的IP
访问容器了,同时还给 新容器设置了一个环境变量,在容器中可以直接使用。
示例2:
sudo docker run --tty --interactive -name ubuntu ubuntu /bin/bash
说明:
使用ImageRepository
为ubuntu
,ImageTag
为latest
的镜像, 创建并运行了一个新容器,新容器的名字为ubuntu
,以交互方式运行,容器启动后执行了容器里的/bin/bash
命令。
这样,我们就创建了一个Ubuntu服务器的容器, 这比使用Virtual Box等虚拟机安装Ubuntu操作系统简单多了!而且运行速度更快!
是否授予此容器全部权限。
默认是--privileged=false
,也就是说默认的容器内的root
用户并没有真正的root
权限, 它只有宿主机器上的普通用户
的权限, 在容器内无法操作宿主机器上的东西。但是一但设置了--privileged=true
,在容器内可以操作宿主的任意东西。显然, 这样是很危险的。
--privileged=[false|true]
是一刀切的做法,不建议这么做,建议使用精确的权限分配参数--cap-add
、--cap-drop
。
追加此容器指定的权限。
示例:
docker run -d --cap-add NET_ADMIN --cap-add NET_RAW --name myName xx:latest
去除此容器指定的权限。
示例:
docker run -d --cap-drop NET_ADMIN --cap-drop NET_RAW --name myName xx:latest