ref="/tag/2019/" style="color:#C468A7;font-weight:bold;">Docker run命令详解
在使用Docker的过程中,docker run是最常接触的命令之一。它用来启动一个新的容器,并在其中运行指定的程序。比如你想快速试用一个Linux环境,不需要安装虚拟机,只要一行命令:
docker run -it ubuntu /bin/bash这行命令会自动下载Ubuntu镜像(如果本地没有的话),然后启动一个交互式容器,让你直接进入bash操作界面。基本语法结构
docker run的基本格式是:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]其中,IMAGE是必须的,表示要用哪个镜像来创建容器。后面的COMMAND是你希望在容器中执行的命令,如果不写,默认使用镜像预设的启动命令。常用的选项参数
实际使用中,经常需要加一些参数来控制容器的行为。比如想让容器以后台模式运行,可以用 -d 参数:
docker run -d nginx这条命令会启动一个Nginx服务容器,并立即返回终端,不会卡住屏幕输出。如果要和容器进行交互,比如调试程序,通常加上 -it:
docker run -it alpine sh这里的 -i 表示保持标准输入打开,-t 是分配一个伪终端,组合起来就能像登录一台服务器那样操作容器。端口映射与目录挂载
开发Web应用时,经常需要把容器内的服务暴露到主机上。比如运行一个Node.js项目,默认在3000端口,可以通过 -p 做端口映射:
docker run -p 8080:3000 my-node-app这样访问本机的8080端口,实际上就转发到了容器的3000端口。代码改动频繁时,不想每次修改都重建镜像,可以用 -v 挂载本地目录:
docker run -v /Users/yourname/project:/app my-node-app容器里的/app目录就会实时同步你电脑上的项目文件,改完代码立刻生效,特别适合本地开发。设置环境变量和容器名称
有些应用依赖特定环境变量,比如数据库连接地址。可以用 -e 来传递:
docker run -e MYSQL_HOST=dbserver -e MYSQL_USER=admin my-app这样容器内部就能读取这些变量了。默认情况下,Docker会给容器起一个随机的名字,比如peaceful_turing。如果想自己命名,使用 --name:
docker run --name my-redis -d redis以后就可以用这个名字来管理容器,比如 docker stop my-redis,比记一串ID方便多了。资源限制与网络配置
在测试环境中,可能想模拟低配机器的情况。可以限制容器使用的内存和CPU:
docker run -m 512m --cpus=1.5 my-app这会让容器最多使用512MB内存和1.5个CPU核心,防止占用过多资源影响主机。网络方面,Docker默认使用bridge模式,但如果多个容器需要互相通信,比如前端、后端、数据库,可以创建自定义网络并加入:
docker network create mynet
docker run -d --network=mynet --name db mysql
docker run -d --network=mynet --name webapp my-web这样webapp容器可以直接通过db这个主机名访问数据库。临时容器与数据清理
有时候只是想临时跑个命令看看结果,比如解析一段JSON,可以用 --rm 参数:
docker run --rm alpine jq --version容器运行结束后会自动删除,不会留下垃圾记录。适合做一次性任务。如果不加这个参数,即使容器停止了,仍然可以通过 docker ps -a 看到。长期积累会占用磁盘空间,记得定期清理:
docker rm $(docker ps -aq --filter status=exited)这条命令能批量删除所有已退出的容器。