Published 2023-02-06

Docker 容器基本操作

如何运行容器

Hello world中我们已经介绍了如何运行一个容器,这里我们再来详细介绍一下如何运行一个容器。

运行 docker 容器基本命令

docker run <image name>

详细命令

docker <object> <command> <options>
docker container run <image name>

image name 可以是镜像 ID、镜像名、镜像名:tag,例如:

docker container run --publish 8080:80 nginx

如何发布端口

容器是独立的环境。您的主机系统对容器内发生的事情一无所知。因此,在容器内运行的应用程序仍然不能从外部访问。

要允许从容器外部访问,必须将容器内的适当端口发布到本地网络上的端口。--publish-p 选项的常用语法如下:

docker container run --publish <host port>:<container port>

host port: 主机端口,可以是任意端口,例如 8080

container port: 容器端口,可以是容器内部的任意端口,例如 80

通过上面的命令,我们可以将容器内的 80 端口发布到主机的 8080 端口,这样我们就可以通过主机的 8080 端口访问容器内的 80 端口了。

默认情况下,docker container run 命令会在前台运行容器。这意味着,您的终端会被占用,直到您按下 Ctrl+C 停止容器。

如何使用分离模式

docker 分离模式可以让我们在后台运行容器,这样我们就可以在终端执行其他命令了。

docker container run --publish 8080:80 --detach nginx

如何列出容器

container ls 命令可以列出所有正在运行的容器。

docker container ls

# CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                  NAMES
# 9f21cb777058        fhsinchy/hello-dock   "/docker-entrypoint.…"   5 seconds ago       Up 5 seconds        0.0.0.0:8080->80/tcp   gifted_sammet

名称为 gifted_sammet 的容器正在运行,创建于 5 秒前,状态是Up 5 seconds。CONTAINER ID 是 9f21cb777058,镜像是 fhsinchy/hello-dock,端口是 8080:80。

如何命名或重命名容器

--name 选项可以为容器命名。

docker container run --publish 8080:80 --detach --name webhost nginx

CONTAINER ID 是随机的 64 位字符串,如果您想要为容器命名,可以使用--name选项。

docker container run --detach --publish 8888:80 --name hello-dock-container fhsinchy/hello-dock

# b1db06e400c4c5e81a93a64d30acc1bf821bed63af36cab5cdb95d25e114f5fb

使用container rename重命名已经存在的容器。

docker container rename hello-dock-container hello-dock

如何停止或终止正在运行的容器

使用docker stop命令终止正在运行的容器。比如:

docker stop container_name_or_ID

如果容器未终止,可以使用docker kill <container name or container id>杀掉容器。

docker kill <container_name_or_ID>

停止或终止容器可能会丢失任何未保存的数据或状态。

如何重启容器

使用docker restart重启容器,例如:

docker restart container_name_or_id

这将停止容器,然后使用与前面相同的配置重新启动它。适用于对容器的环境变量、网络设置应用更改时,或者当容器由于错误而停止时。

如何在不运行的情况下创建容器

docker container create --publish 80:80 --name webhost nginx
docker container start webhost

如何删除容器

删除已经停止的容器,使用docker container rm命令。

docker container rm container_name_or_id

通过 container ls --all 命令可以列出所有容器,其中 status 为 exited 的容器是已经停止的容器。

docker container ls --all

如何以交互模式运行容器

要以交互模式运行容器,可以使用 docker run 命令并在命令末尾加上 -it 选项。例如:

docker run -it image_name /bin/bash

这将启动一个新的容器,并以交互模式运行 /bin/bash。这对于进入容器内部并执行命令非常有用。

如何在容器内执行命令

使用 docker exec 命令在容器内执行命令。语法如下:

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

例如,要在容器内部运行 ls 命令,可以使用以下命令:

docker exec container_name_or_id ls

如何使用可执行镜像

可执行映像是包含可执行二进制文件或脚本的映像,它被设计为作为独立进程运行。要处理可执行映像,需要使用docker run命令。基本语法是:

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

例如:运行名称为 hello-dock 的可执行镜像,可以使用以下命令:

docker run hello-dock

如果在 Dockerfile 中指定了 默认命令,可以使用以下命令:

docker run hello-dock

否则,可以使用以下命令:

docker run hello-dock /bin/bash

同样,可以使用命令传递参数:

docker run hello-dock /bin/bash -c "echo hello world"

如何忽略不必要的文件

在 Dockerfile 中,可以使用 .dockerignore 文件来忽略不必要的文件。例如,如果 Dockerfile 位于项目根目录中,可以使用以下命令忽略所有 .git 文件:

echo ".git" >> .dockerignore