常用的 Docker 命令
基本命令
docker version # 查看 docker 版本
docker images # 查看所有已下载镜像,等价于 `docker image ls` 命令
docker container ls # 查看所有容器
docker ps # 查看正在运行的容器
docker image prune # 清理临时的、没有被使用的镜像文件
拉取镜像
docker pull 命令默认使用的 Registry/Hub 是 Docker Hub。当你执行 docker pull 命令而没有指定任何 Registry/Hub 的地址时,Docker 会从 Docker Hub 拉取镜像。
docker search mysql # 查看mysql相关镜像
docker pull mysql:5.7 # 拉取mysql镜像
docker image ls # 查看所有已下载镜像
删除镜像
现在,假设我们要删除我们之前拉取到本地的 mysql 镜像。
通过 docker rmi [image] (等价于 docker image rm [image])可以删除本地的镜像,但在此之前首先要确保这个镜像没有被容器引用。通过我们前面讲的 docker ps 命令即可查看。
删除镜像时可以通过标签名称或者镜像 ID 进行索引(标识)。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4cd691d9f80 mysql:5.7 "docker-entrypoint.s…" 7 weeks ago Up 12 days 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
可以看到在这个例子中, mysql 镜像正在被 id 为 c4cd691d9f80 的容器引用,我们需要首先通过 docker stop c4cd691d9f80 或者 docker stop mysql 暂停这个容器。
然后查看 mysql 镜像的 ID:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 f6509bac4980 3 months ago 373MB
最后通过 IMAGE ID 或者 REPOSITORY 名字即可删除指定的镜像。
docker rmi f6509bac4980 # 或者 docker rmi mysql
在使用 ID 对容器或镜像进行操作时,如果其他容器或镜像与要操作的容器或镜像的 ID 前几位不相同,可以使用 ID 的前几位代表整个 ID 来标识镜像。
例如,上面的 mysql 镜像的完整 IMAGE ID 为
f6509bac4980,如果这个时候其他镜像 IMAGE ID 的前4位与这个 mysql 镜像的前四位f650都不相同,那么我们可以直接使用docker rmi f650来删除这个镜像。这样做在很多时候都能够提高操作效率。
运行镜像
docker run 命令用于从镜像创建并启动一个新的容器。语法如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
下面是对常用参数的一些说明:
-d:后台运行容器并返回容器 ID。-it:交互式运行容器,分配一个伪终端。(i参数)--name:给容器指定一个名称。-p:端口映射,格式为host_port:container_port。-v:挂载卷,格式为host_dir:container_dir。--rm:容器停止后自动删除容器。--env或-e: 为容器设置环境变量。--network:指定容器的网络模式。--restart:容器的重启策略(如no、on-failure、always、unless-stopped)。-u:指定运行容器的用户。
示例
现在,让我们来看一些具体的例子:
1. 基本用法
docker run ubuntu
拉取 ubuntu 镜像并在前台启动一个容器。
2. 后台运行容器
docker run -d ubuntu
在后台运行 ubuntu 容器并返回容器 ID。
3. 交互式运行并分配终端
docker run -it ubuntu /bin/bash
以交互模式运行 ubuntu 容器,并启动一个 Bash shell。
4. 指定容器名称
docker run --name my-container ubuntu
运行一个 ubuntu 容器,并将其命名为 my-container。
5. 端口映射
docker run -p 8080:80 nginx
将本地主机的 8080 端口映射到容器内的 80 端口,运行 nginx 容器。
6. 挂载卷
docker run -v /host/data:/container/data ubuntu
将主机的 /host/data 目录挂载到容器内的 /container/data 目录。
7. 设置环境变量
docker run -e MY_ENV_VAR=my_value ubuntu
设置环境变量 MY_ENV_VAR 的值为 my_value,运行 ubuntu 容器。
8. 使用网络模式
docker run --network host nginx
使用主机的网络模式运行 nginx 容器。
9. 指定重启策略
docker run --restart always nginx
设置容器的重启策略为 always,即使容器停止也会自动重启。
10. 指定用户
docker run -u user123 ubuntu
以 user123 用户的身份运行 ubuntu 容器。
11. 组合多个选项
docker run -d -p 8080:80 -v /host/data:/data --name webserver nginx
后台运行一个命名为 webserver 的 nginx 容器,将主机的 8080 端口映射到容器的 80 端口,并将主机的 /host/data 目录挂载到容器的 /data 目录。