`docker run` :创建一个新的容器并运行一个命令 语法 ``` docker run [OPTIONS] IMAGE [COMMAND] [ARG...] ``` OPTIONS说明: - -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项; - -d: 后台运行容器,并返回容器ID; - -i: 以交互模式运行容器,通常与 -t 同时使用; - -P: 随机端口映射,容器内部端口随机映射到主机的高端口 - -p: 指定端口映射,格式为:主机(宿主)端口:容器端口 - -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; - --name="nginx-lb": 为容器指定一个名称; - --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致; - --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致; - -h "mars": 指定容器的hostname; - -e username="ritchie": 设置环境变量; - --env-file=[]: 从指定文件读入环境变量; - --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行; - -m :设置容器使用内存最大值; - --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型; - --link=[]: 添加链接到另一个容器; - --expose=[]: 开放一个端口或一组端口; - --volume , -v: 绑定一个卷 ## 实例 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。 ``` docker run --name mynginx -d nginx:latest ``` 使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。 ``` docker run -P -d nginx:latest ``` 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。 ``` docker run -p 80:80 -v /data:/data -d nginx:latest ``` 绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。 ``` docker run -p 127.0.0.1:80:8080/tcp ubuntu bash ``` ## 交互模式 使用镜像`ubuntu:16.04`以交互模式启动一个容器,在容器内执行`bash`命令。 ``` docker run -it --rm ubuntu:16.04 bash root@b8573233d675:/# ``` docker run 就是运行容器的命令,我们这里简要的说明一下上面用到的参数。 - -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。 - --rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。 ubuntu:16.04:这是指用 ubuntu:16.04 镜像为基础来启动容器。 - bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。 进入容器后,我们可以在 Shell 下操作,执行任何所需的命令。这里,我们执行了 `cat /etc/os-release`,这是 Linux 常用的查看当前系统版本的命令,从返回的结果可以看到容器内是 `Ubuntu 16.04.4 LTS` 系统。 ## 列出容器 `docker ps` : 列出容器 ### 语法 ``` docker ps [OPTIONS] ``` OPTIONS说明: - -a :显示所有的容器,包括未运行的。 - -f :根据条件过滤显示的内容。 - --format :指定返回值的模板文件。 - -l :显示最近创建的容器。 - -n :列出最近创建的n个容器。 - --no-trunc :不截断输出。 - -q :静默模式,只显示容器编号。 - -s :显示总的文件大小。 如: 列出最近创建的5个容器信息。 ``` docker ps -n 5 ``` ## 删除容器 `docker rm` :删除一个或多少容器 语法 ``` # 删除 [OPTIONS] 一个或多个容器id或启动时的容器名称 docker rm [OPTIONS] CONTAINER_ID|NAME [CONTAINER_ID|NAME...] ``` OPTIONS说明: - -f :通过SIGKILL信号强制删除一个运行中的容器 - -l :移除容器间的网络连接,而非容器本身 - -v :-v 删除与容器关联的卷 实例 强制删除容器db01、db02 ``` docker rm -f db01 db02 ``` 移除容器nginx01对容器db01的连接,连接名db ``` docker rm -l db ``` 删除容器nginx01,并删除容器挂载的数据卷 ``` docker rm -v nginx01 ``` ## 进入容器 `docker exec -it [OPTIONS] /bin/sh` :进入一个启动中的容器