Docker简介
Docker是一个开源的平台,基于Go 语言并遵从 Apache2.0 协议开源,用于开发、运输和运行应用程序。它允许我们将应用程序与基础设施分开,以便我们可以快速交付软件。使用Docker,我们可以像管理应用程序一样管理基础设施。
Docker的重要性体现在以下几个方面:
- 容器化技术:Docker使用容器化技术,允许开发者在隔离的环境中运行应用程序,这有助于避免依赖冲突和环境差异。
- 可移植性:Docker容器可以在任何支持Docker的平台上运行,无论是物理机、虚拟机、云提供商还是本地主机。
- 高效资源利用:与传统的虚拟化技术相比,Docker容器更加轻量级,可以在同一硬件上运行更多的容器,从而提高资源利用率。
- 持续集成和持续部署(CI/CD):Docker可以轻松集成到各种CI/CD工具中,使得自动化测试和部署变得更加简单和快速。
Docker基础
容器化概念
容器化是一种轻量级的技术,用于将应用程序及其依赖项打包到一个可移植的容器中,以便可以在任何支持容器技术的环境中一致地运行。与传统的虚拟化技术相比,容器化不需要为每个应用程序创建一个完整的操作系统,而是共享主机的操作系统内核。这允许容器更加轻量级,启动更快,并且具有更好的性能。
容器之间的关系
容器之间不会相互影响,主要是因为Docker使用了多种隔离机制和技术来确保每个容器都在自己的独立环境中运行。
Docker的容器技术通过Linux内核的命名空间(Namespace)和控制组(Control Groups,简称cgroups)实现隔离。命名空间允许系统将一个全局的资源划分为多个独立的命名空间,每个容器都有自己独特的命名空间,彼此之间互不干扰。例如,进程命名空间为每个容器提供了一份独立的进程表,使得每个容器内的进程仅在容器内部可见,与宿主机及其他容器完全隔离。网络命名空间则为每个容器创建了一个独立的网络环境,容器内部的网络接口和路由仅对本容器可见,不同容器之间无法直接通过网络访问对方。
PID 命名空间:为每个容器提供独立的进程表,这样容器中的进程 ID 与宿主机和其他容器的进程 ID 是隔离的。
NET 命名空间:为容器提供独立的网络栈,这意味着容器可以拥有自己的 IP 地址、端口、路由表等。
IPC 命名空间:隔离进程间通信资源,每个容器可以有自己独立的共享内存段和信号量集。
UTS 命令空间:允许容器拥有自己的 hostname 和 domainname,从而在容器内部拥有独立的身份标识。
控制组(cgroups)是另一个确保容器间隔离的重要技术。它主要负责限制资源的使用,包括CPU时间、内存使用量、磁盘I/O等。通过cgroups,Docker可以对每个容器进行资源配额的分配和管理,确保一个容器占用过多资源而影响到其他容器。例如,如果某个容器设置了内存使用上限为1GB,那么即使这个容器尝试使用更多内存,也会被系统拒绝并可能被终止,从而保证其他容器的稳定运行。
在文件系统方面,Docker使用写时复制(Copy-on-Write, CoW)技术来实现高效的文件系统隔离。每个容器在启动时会基于一个基础镜像创建一个新的文件系统层,这个层是可读可写的,而基础镜像的层则是只读的。这意味着,任何对文件系统的修改都会在当前层的副本上进行,而不会影响到基础镜像或其他容器。这不仅实现了文件系统的隔离,还提高了存储效率,因为相同的基础镜像可以被多个容器共享。
Docker 提供了多种网络模式,如桥接网络 (bridge
)、主机网络 (host
)、无网络 (none
) 和覆盖网络 (overlay
)。通过这些网络模式,可以控制容器之间的通信,以及容器与宿主机之间的通信,确保容器网络资源的隔离。
Docker与虚拟化的区别
Docker是一种容器化技术,而虚拟化是一种在物理硬件上创建多个虚拟化环境的技术。以下是Docker与虚拟化的一些主要区别:
- 资源利用:Docker容器共享主机的操作系统内核,而虚拟机需要为每个虚拟机安装完整的操作系统。因此,Docker容器更加轻量级,可以在同一硬件上运行更多的容器,从而提高资源利用率。
- 启动时间:Docker容器启动时间通常在毫秒到秒之间,而虚拟机可能需要几分钟来启动。
- 性能:由于Docker容器不需要额外的操作系统层,它们通常具有更好的性能。
- 隔离性:虚拟机提供更高的隔离性,因为每个虚拟机都有自己的操作系统和资源。Docker容器共享主机的操作系统内核,因此在隔离性方面可能不如虚拟机。
Docker的基本组件:容器、镜像、仓库
Docker有三个基本组件:容器、镜像和仓库。
- 容器(Container):容器是Docker中的一个运行实例,它是一个独立的运行环境,包含了一个应用程序及其所有的依赖项。容器是从镜像创建的,并且可以在任何支持Docker的平台上运行。
- 镜像(Image):镜像是Docker中的一个只读模板,用于创建容器。镜像包含了创建容器所需的所有信息,包括应用程序代码、运行时环境、库、环境变量和配置文件。镜像是分层构建的,每个层只包含了与其他层不同的部分。
- 仓库(Repository):仓库是Docker中的一个用于存储和分发镜像的地方。Docker Hub是一个公共仓库,提供了大量的官方和社区维护的镜像。我们也可以创建自己的私有仓库来存储和管理组织内部的镜像。
Docker入门
Docker的第一个命令:docker run
Docker 的强大之处在于其简洁的命令行界面和强大的功能。docker run
是我们将使用的第一个命令,它用于启动一个新的容器实例。这个命令的基本格式如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS
:这里可以指定各种选项,比如-d
用于后台运行容器,--name
用于指定容器名称,-p
用于端口映射等。IMAGE
:指定要运行的镜像名称,可以是本地的或者从 Docker Hub 上获取的。COMMAND
:容器内部启动时执行的命令。ARG
:传递给命令的额外参数。
例如,运行一个 Ubuntu 容器并进入其命令行界面,可以使用:
docker run -it ubuntu bash
这里,-it
是两个选项的组合,i
用于交互模式,t
用于分配一个伪终端。
Docker 容器有两种运行模式,前台模式和后台模式。前台模式(默认)下,可以使用 -it
参数为容器设置伪TTY。后台模式下,容器运行在后台,所有 I/O 数据只能通过网络资源或共享卷组进行交互。
镜像和容器的区别
在Docker中,镜像作为构建容器的蓝图,是一个包含应用程序及其所有依赖项(包括代码、运行时、库、环境变量和配置文件)的只读模板。镜像由一系列基于Dockerfile指令的只读层构成,每一层对应于一条构建命令。当从镜像启动容器时,Docker会在这些只读层之上添加一个可读写的容器层。容器运行期间的所有写操作,如文件的创建、修改或删除,都限定在这个读写层中。对于已存在的文件,Docker采用写时复制策略,即首次修改时,文件会被复制到读写层,之后的改动仅影响该层中的副本,而原始的只读层保持不变。这样设计既保证了镜像的不可变性,也实现了资源的有效利用。
使用Docker Hub查找和运行容器
Docker Hub 是 Docker 官方提供的一个公共镜像仓库,类似于 GitHub 对于代码的作用。我们可以在这里找到成千上万的高质量镜像,从简单的操作系统到复杂的应用程序。
要使用 Docker Hub 查找和运行容器,首先需要访问 Docker Hub 网站。在这里,我们可以搜索需要的镜像,比如 ubuntu
、nginx
、mysql
等。每个镜像页面都会提供该镜像的使用说明和 Dockerfile(如果可用)。
例如,要运行一个官方的 Ubuntu 镜像,我们可以执行:
docker run -it ubuntu
如果需要运行一个特定的版本,可以在镜像名称中指定标签,如 ubuntu:18.04
。 通过这种方式,我们可以轻松地找到并运行所需的容器,极大地简化了应用程序的部署和测试过程。
核心Docker操作
在深入理解了Docker的基础知识之后,接下来我们将探讨Docker的核心操作。这些操作是日常使用Docker时最常遇到的,包括镜像管理、容器生命周期管理以及容器监控和日志查看。
Docker镜像管理
Docker镜像就像是容器的蓝图。管理镜像主要包括拉取(pull)和构建(build)。
docker pull
:这个命令用于从Docker仓库(如Docker Hub)下载镜像。例如,要下载最新版本的Ubuntu镜像,可以使用命令docker pull ubuntu:latest
。docker build
:这个命令用于根据Dockerfile构建一个镜像。Dockerfile是一个文本文件,包含了构建镜像所需的指令。例如,创建一个名为my-image
的镜像,可以使用命令docker build -t my-image .
,其中-t
用于指定镜像名称和可选的标签,.
指的是Dockerfile所在的当前目录。
容器生命周期管理
容器是镜像的运行实例。管理容器的生命周期包括启动、停止和删除容器。
docker run
:这个命令用于创建一个新的容器并运行一个命令。例如,运行一个Ubuntu容器并进入交互模式,可以使用命令docker run -it ubuntu bash
,其中-i
表示交互模式,-t
分配一个伪终端。docker stop
:这个命令用于停止一个运行中的容器。例如,停止一个名为my-container
的容器,可以使用命令docker stop my-container
。docker rm
:这个命令用于删除一个或多个容器。例如,删除一个名为my-container
的容器,可以使用命令docker rm my-container
。
容器监控和日志
监控容器状态和查看日志对于调试和日常维护非常重要。
docker ps
:这个命令用于列出当前运行的容器。例如,查看所有运行中的容器,可以使用命令docker ps
。要查看所有容器(包括未运行的),可以使用docker ps -a
。docker logs
:这个命令用于获取容器的日志输出。例如,查看一个名为my-container
的容器的日志,可以使用命令docker logs my-container
。
Dockerfile和镜像构建
Dockerfile 是一个文本文件,包含了一系列用于构建 Docker 镜像的指令。它类似于编程中的源代码,通过这些指令,可以自动化地创建一个可运行的容器环境。Dockerfile 中的每条指令都会在镜像中添加一个新的层,这些层堆叠起来,构成了最终的镜像。
在容器化的过程中,Dockerfile 扮演着核心角色。它允许开发人员将应用程序及其运行环境打包在一起,确保在不同的开发和生产环境中有一致的运行时环境。这样,无论是在本地机器、测试环境还是生产服务器上,应用程序都能以相同的方式运行,大大减少了“在我的机器上可以运行”的问题。
Dockerfile基本结构
一个典型的 Dockerfile 由以下部分组成:
- 基础镜像指令(FROM):指定构建镜像的基础镜像。所有 Dockerfile 必须以
FROM
指令开始。 - 维护者信息(LABEL):用于添加元数据,如作者、版本信息等。
- 运行指令(RUN):在当前镜像中运行指定的命令。
- 复制指令(COPY 或 ADD):将文件或目录从宿主机的文件系统复制到镜像中。
- 工作目录(WORKDIR):为后续的
RUN
,CMD
,ENTRYPOINT
,COPY
和ADD
指令设置工作目录。 - 暴露端口(EXPOSE):声明容器运行时将监听的网络端口。
- 环境变量(ENV):设置环境变量。
- 启动命令(CMD 或 ENTRYPOINT):指定容器启动时执行的命令。
- 其他指令:如
VOLUME
,USER
,ARG
等,用于定义其他配置。
一个简单的 Dockerfile 示例如下所示:
查看代码
# 使用官方 Python 运行时作为父镜像
FROM python:3.8-slim
# 将工作目录设置为 /app
WORKDIR /app
# 将当前目录内容复制到位于 /app 的容器中
COPY . /app
# 安装 requirements.txt 中指定的任何所需包
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# 使端口 80 可供此容器外的环境使用
EXPOSE 80
# 定义环境变量
ENV NAME World
# 在容器启动时运行 app.py
CMD ["python", "app.py"]
这个 Dockerfile 示例展示了如何构建一个简单的 Python web 应用程序镜像。
Dockerfile指令
指令 | 用途 | 示例 |
---|---|---|
FROM | 设置基础镜像 | FROM python:3.8-slim |
RUN | 执行命令 | RUN pip install -r requirements.txt |
COPY | 复制文件 | COPY . /app |
ADD | 更高级的复制文件 | ADD http://example.com/static.tar.gz /app/static/ |
CMD | 容器启动命令 | CMD ["python", "app.py"] |
ENTRYPOINT | 容器入口点 | ENTRYPOINT ["/bin/bash"] |
ENV | 设置环境变量 | ENV NAME World |
ARG | 构建时变量 | ARG buildno=1 |
LABEL | 添加元数据 | LABEL version="1.0" maintainer="docker@example.com" |
EXPOSE | 声明容器监听的端口 | EXPOSE 80 443 |
VOLUME | 管理容器数据卷 | VOLUME /var/log |
WORKDIR | 设置工作目录 | WORKDIR /app |
USER | 设置用户 | USER nginx |
HEALTHCHECK | 健康检查 | `HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ |
Dockerfile构建
构建 Dockerfile 文件后,我们需要执行几个步骤来构建 Docker 镜像并运行容器。
构建镜像
打开终端或命令提示符,导航到包含 Dockerfile 的目录。然后运行以下命令:
docker build -t <image-name> .
-t
:标记要构建的镜像。<image-name>
:指定镜像的名称。.
:表示 Dockerfile 文件位于当前目录。
查看构建的镜像
构建完成后,我们可以通过以下命令查看所有本地镜像:
docker images
Docker容器网络和存储
Docker网络模式
Docker提供了多种网络模式,允许我们根据需要配置容器之间的网络通信。
桥接模式(Bridge Network)
桥接模式是Docker默认的网络配置方式,它通过创建一个名为docker0的虚拟网桥来连接所有启动的容器。这就好比在一个物理交换机上连接了多个设备,使得容器之间可以相互通信,同时每个容器都拥有独立的Network Namespace,确保了文件系统、进程等资源的隔离性。容器内部会分配到一个私有的IP地址,通常属于172.16.0.xx/24这样的子网,并以eth0作为默认网卡接口。当容器需要访问外部网络时,必须通过NAT转换,由宿主机上的端口映射规则实现对外部请求的转发。这种方式保证了容器的安全性和灵活性,适合大多数应用场景。
主机模式(Host Network)
对于那些对网络性能有较高要求的应用来说,host网络模式提供了一种更为直接的解决方案。在这种模式下,容器不再使用独立的Network Namespace,而是与宿主机共享同一套网络栈。这意味着容器可以直接使用宿主机的IP地址和端口,避免了NAT带来的额外开销。不过,这种做法牺牲了部分网络隔离性,因此在使用时需特别注意安全问题。适用于需要快速访问宿主机网络服务或进行网络监控等场景。
无网络模式(None Network)
有时,我们并不希望容器具备任何网络能力,比如运行一些不需要联网的本地应用程序或者执行特定的网络调试任务。这时,none网络模式就派上了用场。它彻底断开了容器与外界的联系,仅保留了回环接口,从而增强了安全性。尽管此模式下的容器无法与其他实体通信,但在某些特殊情况下却能发挥重要作用。
容器模式(Container Network)
最后,container网络模式允许新创建的容器与另一个已存在的容器共享相同的Network Namespace。这不仅简化了多容器之间的网络配置,还让它们能够无缝地相互协作。例如,在构建复杂的微服务体系结构时,可以通过这种方式轻松搭建起服务间的依赖关系,而无需担心复杂的网络设置。
数据持久化
数据卷和卷挂载
Docker中的数据卷和卷挂载是管理容器数据持久化和共享的重要机制。
- 数据卷:是容器外部存储,与容器的生命周期分离。数据卷可以在容器之间共享和重用,即使容器被删除,数据卷仍然存在。
- 卷挂载:是将宿主机上的文件或目录挂载到容器中的过程。这允许容器访问和修改宿主机上的文件系统。
Docker 日志驱动
Docker 日志驱动(Log Drivers)是 Docker 容器用来管理日志输出的机制。Docker 支持多种日志驱动,每种驱动都有其特定的用途和配置选项。
json-file
json-file
是 Docker 的默认日志驱动。它将容器的日志以 JSON 格式写入到宿主机的文件系统中。
特点:
- 日志以 JSON 对象的形式写入,每个日志条目包括时间戳、日志级别和消息。
- 可以通过
--log-opt
参数来配置日志文件的最大大小和最大文件数。
示例:
docker run -d --name myapp --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 myapp-image
配置选项:
max-size
:单个日志文件的最大大小,达到限制后会进行轮转。max-file
:日志文件的最大数量,达到限制后最早的文件将被删除。compress
:启用日志文件压缩。
syslog
syslog
驱动将容器的日志发送到远程或本地的 syslog 服务器。
特点:
- 可以将日志集中存储在中央日志服务器上,便于管理和分析。
- 支持多种传输协议,如 UDP、TCP。
示例:
docker run -d --name myapp --log-driver syslog --log-opt syslog-address=tcp://my-syslog-server:514 myapp-image
配置选项:
syslog-address
:指定 syslog 服务器的地址。syslog-facility
:设置 syslog 的设施(facility)。syslog-tls-ca-cert
:如果使用 TLS,指定 CA 证书。syslog-tls-cert
:指定客户端证书。syslog-tls-key
:指定客户端私钥。
fluentd
fluentd
驱动将容器的日志发送到 fluentd 日志聚合器。
特点:
- 支持多种数据源和输出,易于与其他日志处理工具集成。
- 可以配置灵活的日志路由和过滤规则。
示例:
docker run -d --name myapp --log-driver fluentd --log-opt fluentd-address=my-fluentd-server:24224 myapp-image
配置选项:
fluentd-address
:指定 fluentd 服务器的地址。fluentd-tag
:设置发送到 fluentd 的日志标签。
journald
journald
驱动将日志写入到 journald 日志管理系统。
特点:
- 日志存储在内存中,支持系统级别的日志管理。
- 可以通过
journalctl
命令来查询日志。
示例:
docker run -d --name myapp --log-driver journald myapp-image
配置选项:
tag
:设置日志的标签。
gelf
gelf
驱动将日志以 GELF(Graylog Extended Log Format)格式发送到 Graylog 日志管理系统。
特点:
- 支持结构化日志数据,便于日志分析。
- 可以与 Graylog 等日志分析工具集成。
示例:
docker run -d --name myapp --log-driver gelf --log-opt gelf-address=udp://my-graylog-server:12201 myapp-image
配置选项:
gelf-address
:指定 Graylog 服务器的地址。
配置日志驱动
可以在以下位置配置日志驱动:
- 容器级别:在运行容器时使用
--log-driver
和--log-opt
参数。 - 守护进程级别:在 Docker 守护进程的配置文件(通常是
/etc/docker/daemon.json
)中设置log-driver
和log-opts
。
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
配置完成后,需要重启 Docker 守护进程以使配置生效。
理解容器之间的通信
容器之间的通信是Docker网络功能的一个重要方面。通过适当的网络配置,容器可以轻松地进行通信,这对于构建复杂的应用程序和服务至关重要。例如,一个Web应用容器可以与一个数据库容器通信,以便存储和检索数据。 在接下来的教程中,我们将通过具体的示例和操作来进一步深入这些概念,确保我们能够熟练地管理和配置Docker容器的网络和存储。
Docker Compose
在Docker生态系统中,Docker Compose是一个不可或缺的工具,它允许我们定义和运行多容器Docker应用程序。
Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。它使用YAML文件来配置应用程序的服务。通过一个简单的命令,我们可以从配置中创建并启动所有服务。Docker Compose非常适合开发、测试和部署多容器应用程序。
编写docker-compose.yml
文件
docker-compose.yml
文件是Docker Compose的核心,它定义了应用程序的服务、网络和卷。这个文件使用YAML语法,非常易于阅读和理解。在文件中,我们可以指定每个服务的镜像、构建路径、环境变量、依赖关系、网络和卷挂载等配置。
管理多容器应用
使用Docker Compose,我们可以轻松地管理多容器应用程序的整个生命周期。通过简单的命令,如docker-compose up
、docker-compose down
、docker-compose start
和docker-compose stop
,我们可以启动、停止、重建和重新部署应用程序的服务。Docker Compose还提供了其他命令,如docker-compose logs
和docker-compose ps
,用于查看日志和运行中的服务状态。
实践案例
使用Docker部署一个简单的Web应用
准备Web应用代码
首先,我们需要准备一个简单的Web应用。这里我们以一个静态网站为例,我们可以使用HTML、CSS和JavaScript创建一个基本的网页。将这个网页保存为index.html
。
创建Dockerfile
在包含我们的Web应用代码的目录中,创建一个名为Dockerfile
的文件。Dockerfile是一个文本文件,其中包含了构建Docker镜像所需的指令。在这个例子中,我们的Dockerfile将非常简单,如下所示:
# 使用官方的nginx基础镜像
FROM nginx:latest
# 将本地目录下的静态文件复制到nginx服务器的html目录下
COPY . /usr/share/nginx/html
# 暴露80端口,供外部访问
EXPOSE 80
构建Docker镜像
在包含Dockerfile
的目录中,打开终端或命令提示符,并运行以下命令来构建Docker镜像:
docker build -t my-web-app .
这里,-t
标志用于给镜像打上标签,方便后续引用。
运行Docker容器
镜像构建完成后,使用以下命令来运行一个Docker容器:
docker run -d -p 8080:80 my-web-app
这里,-d
标志让容器在后台运行,-p
标志将宿主机的8080端口映射到容器的80端口。
访问Web应用
现在,我们可以通过浏览器访问http://localhost:8080
来查看我们的Web应用。如果一切正常,我们应该能够看到我们之前创建的静态网页。
使用Docker Compose部署一个多服务应用
Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。
准备应用代码
首先,准备我们的应用代码。这里我们假设有两个服务:一个前端服务和一个后端服务。我们可以将前端代码放在一个目录中,后端代码放在另一个目录中。
创建Dockerfile
为前端和后端服务分别创建Dockerfile。例如,前端服务的Dockerfile可能类似于之前Web应用的Dockerfile,而后端服务的Dockerfile将根据我们的后端技术栈来构建。
编写docker-compose.yml
在项目根目录中创建一个名为docker-compose.yml
的文件,并定义我们的服务、网络和卷。一个基本的docker-compose.yml
文件可能如下所示:
查看代码
version: '3'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
backend:
build: ./backend
ports:
- "4000:4000"
networks:
app-network:
构建和运行应用
在包含docker-compose.yml
的目录中,运行以下命令来构建并启动我们的应用:
docker-compose up --build
这个命令会根据docker-compose.yml
文件中的配置构建镜像,并启动所有定义的服务。
访问应用
根据docker-compose.yml
中的端口映射,我们可以通过相应的端口访问前端和后端服务。例如,前端服务可能通过http://localhost:3000
访问,后端服务可能通过http://localhost:4000
访问。
附录
docker run
命令参数
简写 | 完整参数 | 描述 |
---|---|---|
-a | --attach | 附加到标准输入、输出或错误 |
-c | --cpu-shares | CPU份额(相对权重) |
--cap-add | --cap-add | 添加Linux功能 |
--cap-drop | --cap-drop | 删除Linux功能 |
--cidfile | --cidfile | 将容器ID写入文件 |
--cpus | --cpus | 限制CPU个数(仅在调度策略为cpusets 时有效) |
-d | --detach | 在后台运行容器并打印容器ID。如果不使用 -d ,容器将在前台运行,并且会占用当前shell。使用 -d 可以让容器在后台运行。 |
--detach-keys | --detach-keys | 覆盖分离容器的键序列 |
--device | --device | 添加主机设备到容器。这允许容器访问宿主机上的特定硬件设备。 |
--dns | --dns | 设置容器的DNS服务器 |
--dns-opt | --dns-opt | 设置DNS选项 |
--dns-search | --dns-search | 设置容器的DNS搜索域 |
-e | --env | 设置环境变量。这些变量在容器内可用,可以用来配置应用程序。 |
--entrypoint | --entrypoint | 覆盖镜像的默认ENTRYPOINT |
--env-file | --env-file | 读取环境变量文件。如果有很多环境变量需要设置,使用 --env-file 可以简化命令行。 |
--expose | --expose | 暴露一个端口或一个端口范围 |
-h | --hostname | 设置容器的主机名。这会影响容器内的 /etc/hostname 和 /etc/hosts 文件。 |
-i | --interactive | 即使未连接,也保持标准输入打开 |
--ip | --ip | 设置容器的IPv4地址 |
--ipc | --ipc | 设置IPC模式 |
--kernel-memory | --kernel-memory | 限制内核内存 |
-l | --label | 设置元数据 |
--label-file | --label-file | 读取标签文件 |
--link | --link | 添加到另一个容器的链接 |
--link-local-ip | --link-local-ip | 容器内部使用的主机接口IP地址 |
-m | --memory | 限制内存 |
--mac-address | --mac-address | 设置容器的MAC地址 |
--memory-reservation | --memory-reservation | 内存软限制 |
--memory-swap | --memory-swap | 交换限制等于内存加上交换,'-1'表示无限制 |
--memory-swappiness | --memory-swappiness | 调整容器的内存交换行为 |
--name | --name | 为容器指定一个名称。如果没有指定,Docker会随机生成一个名称。指定名称有助于识别和管理容器。 |
--network | --network | 将容器连接到网络 |
--network-alias | --network-alias | 为容器添加网络别名 |
--oom-kill-disable | --oom-kill-disable | 禁用OOM杀手 |
--oom-score-adj | --oom-score-adj | 调整主机的OOM偏好 |
-P | --publish-all | 发布所有暴露的端口到随机端口 |
-p | --publish | 发布容器的端口到主机 |
--pid | --pid | 设置PID模式 |
--pids-limit | --pids-limit | 调整容器pids限制 |
--privileged | --privileged | 赋予容器扩展权限 |
--read-only | --read-only | 将容器的文件系统设置为只读 |
--restart | --restart | 重启策略以在退出时应用 |
--rm | --rm | 退出时自动移除容器 |
--runtime | --runtime | 指定运行时 |
-t | --tty | 分配一个伪TTY。为容器分配一个终端,使其能够接收用户输入和显示输出。 |
-u | --user | 设置用户名或UID |
--ulimit | --ulimit | Ulimit选项 |
--uts | --uts | 设置UTS模式 |
-v | --volume | 绑定挂载卷。这允许容器访问宿主机的文件系统或持久化容器数据。 |
--volume-driver | --volume-driver | 指定卷驱动程序 |
--volumes-from | --volumes-from | 从指定的容器挂载卷。 |