docker create
命令用于在 Docker 中创建一个新的容器,但不会自动启动它。这个命令会返回容器的 ID,可以使用它来
进一步操作容器,这也是与 docker run
命令的一个区别
以下是 docker create 的基本用法:
OPTIONS
:可以使用一系列选项来配置容器的行为,如端口映射、数据卷挂载、环境变量设置等。IMAGE
:指定要使用的镜像,可以是本地镜像的名称或远程仓库中的镜像。COMMAND
:可选参数,指定容器启动时要执行的命令。ARG...
:可选参数,传递给容器启动命令的参数。以下是一些常用的选项:
-i, --interactive
:打开容器的标准输入,允许交互操作。-t, --tty
:为容器分配一个伪终端。--name CONTAINER_NAME
:为容器指定一个自定义的名称。-e, --env KEY=VALUE
:设置容器的环境变量。-v, --volume SOURCE:DEST
:挂载主机上的目录或数据卷到容器内部。-p, --publish HOST_PORT:CONTAINER_PORT
:将容器的端口映射到主机的端口上。以下是一个示例:
查看镜像
docker images
从镜像 my-ubuntu tag:latest 创建一个容器 my-container2
docker create -it --name my-container2 -p 8080:80 my-ubuntu:latest
启动容器
docker start my-container2
查看容器是否启动
docker ps
docker run
和 docker create
区别
docker create:
docker create
命令用于在 Docker 中创建一个新的容器,但不会自动启动它。docker create
命令通常与 docker start 命令一起使用,以分别创建和启动容器。docker run:
docker run
命令用于创建并立即启动一个新的容器。docker create
和 docker start
命令的组合,可以在一步中创建和启动容器。docker run
命令提供了更便捷的方式来创建和启动容器,适用于大多数常见的容器使用场景。为什么会设计两个命令呢?
设计上的灵活性:Docker 设计了两个命令,以便在不同的场景下提供更多的灵活性。docker create
提供了更细粒度
的控制,允许在创建容器后进行进一步的配置和准备工作,然后手动启动容器。而 docker run
则提供了一种简化的方
式,可以在一步中创建和启动容器。
工作流程的不同:docker create
适用于需要在容器启动之前执行额外操作的场景,例如在容器启动之前挂载数据卷、
设置环境变量等。而 docker run
适用于直接启动容器并运行应用程序的场景,它通常用于常见的容器使用场景。
总之,docker create
和 docker run
提供了不同的方式来创建和启动容器,可以根据具体的需求和工作流程选择合适的命令。
对于简单的容器启动,docker run
是更常用和方便的选择。而对于需要更多控制和定制的场景,可以使用 docker create
和
docker start
命令来分别创建和启动容器。
docker cp
命令用于在 Docker 容器和主机之间复制文件或目录。docker cp 命令的基本语法:
docker cp <source> <destination>
<source>:指定要复制的文件或目录的路径。可以是容器内的路径或主机上的路径。
<destination>:指定目标位置的路径。可以是容器内的路径或主机上的路径。
从容器复制文件到主机:
docker cp <container_name_or_id>:<source_path> <destination_path>
从名为 mycontainer 的容器复制 /app/file.txt 文件到主机的 /tmp 目录:
eg: docker cp mycontainer:/app/file.txt /tmp/file.txt
从主机复制文件到容器:
docker cp <source_path> <container_name_or_id>:<destination_path>
将主机上的 /tmp/file.txt 文件复制到名为 mycontainer 的容器的 /app 目录:
eg:docker cp /tmp/file.txt mycontainer:/app/file.txt
注意事项:
当复制文件到容器时,如果目标路径不存在,Docker 会自动创建目标路径。
当复制文件到容器时,目标路径不能是符号链接。
当复制目录时,目录本身和其中的内容都会被复制。
docker
端口映射当使用 docker run 命令时,通过 -p 或 --publish 参数可以设置容器的端口映射,将容器内部的端口映射到主机的端口上。
docker run -d -p 8888:8080 --name mycontainer your-image
-d:以后台模式运行容器。
-p 8888:8080:将主机的 8888 端口映射到容器的 8080 端口上。
--name mycontainer:为容器指定一个名称。
your-image:要运行的容器镜像。
现在,可以通过在浏览器中访问 http://localhost:8888 来访问容器内部的 Web 应用程序。流量将被重定向到容器的 8080 端口。
在 Docker 中,有几种常见的网络模式可供选择,包括默认的桥接网络、主机网络和覆盖网络。以下是这些网络模式的特点、优缺
点和适用场景的概述:
桥接网络(Bridge Network):
特点:默认的网络模式,每个容器分配一个独立的 IP 地址,可以通过容器名称进行通信。
优点:隔离性好,容器可以在同一主机的不同网络命名空间中运行。
缺点:不适用于多主机环境,容器之间需要通过端口映射才能访问。
适用场景:单主机上多个容器之间需要相互通信的情况,比如微服务架构。
主机网络(Host Network):
特点:容器与主机共享网络命名空间,直接使用主机的 IP 地址和端口。
优点:网络性能好,容器无需通过端口映射即可访问主机网络。
缺点:缺乏隔离性,容器与主机共享网络栈。
适用场景:对网络性能要求较高、需要容器与主机共享网络的情况,比如网络工具、监控工具等。
覆盖网络(Overlay Network):
特点:使用 Docker Swarm 模式创建的多主机集群环境下的网络模式,跨主机通信使用 Overlay 网络。
优点:容器可以在多个主机上通过 Overlay 网络进行通信。
缺点:配置和管理复杂,需要使用 Swarm 模式。
适用场景:在多主机环境下,需要容器之间跨主机通信的情况,比如横向扩展应用程序。
docker run -d --network=bridge --name mycontainer your-image
使用 --network=bridge 参数来指定容器使用默认的桥接网络模式。你可以将 bridge 替换为其他网络模式,如 host 或 overlay
在 Docker 中,你可以为容器分配资源限制,如 CPU 和内存限制。
通过 --cpus 参数设置容器的 CPU 限制。例如,设置容器的 CPU 限制为 0.5:
docker run -d --cpus=0.5 --name mycontainer your-image
通过 --memory 参数设置容器的内存限制。例如,设置容器的内存限制为 512MB:
docker run -d --memory=512m --name mycontainer your-image
docker stats
容器资源监控使用 docker stats 命令可以实时监控正在运行的容器的资源使用情况:
docker stats mycontainer
docker stats 命令将显示容器的 CPU 使用率、内存使用量、网络 I/O、磁盘 I/O 等信息,并以实时更新的方式显示。
可以使用 --format 参数来自定义输出格式,以满足特定的需求。例如,只显示 CPU 使用率和内存使用量:
docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
通过设置容器的资源限制和使用 docker stats 命令,你可以有效地管理和监控容器的资源使用情况
搜索镜像:
在 Docker Hub 或其他镜像仓库的网站上,使用搜索功能来查找你需要的镜像。可以通过关键字、镜像名称或镜像作者来进行搜索。
在搜索结果中,可以查看镜像的描述、标签和其他相关信息。
拉取镜像:
使用 docker pull 命令从镜像仓库中拉取镜像到本地。命令格式为:docker pull <镜像名称>:<标签>。
默认情况下,如果未指定标签,默认会拉取 latest 标签的镜像。
例如,要拉取 nginx 镜像的 latest 版本,可以执行:docker pull nginx:latest。
推送镜像:
如果你开发了自己的镜像,并希望将其推送到镜像仓库,需要先登录到镜像仓库。
使用 docker login 命令登录到 Docker Hub 或其他镜像仓库。需要提供用户名、密码和仓库地址。
登录成功后,可以使用 docker push 命令将本地的镜像推送到镜像仓库。命令格式为:docker push <镜像名称>:<标签>。
镜像标签:
镜像标签用于区分不同版本或变体的镜像。一个镜像可以有多个标签。
通常,latest 标签表示最新的版本,但最好使用特定的版本标签来确保镜像的可重复性和稳定性。
在拉取或推送镜像时,可以通过指定标签来选择特定版本的镜像。
例如,要拉取 nginx 镜像的 1.21.3 版本,可以执行:docker pull nginx:1.21.3。