Docker 容器常用指令和 Dockerfile 基本语法详解

Docker 是一种轻量级的容器化技术,广泛用于开发、测试和部署应用。Docker 的强大之处在于其简单易用的命令行工具以及灵活的 Dockerfile 配置文件。本篇文章将详细介绍 Docker 容器的常用指令和 Dockerfile 的基本语法,以帮助你快速掌握 Docker 的使用方法。

一、Docker 容器常用指令

1.1 容器管理相关指令

  • docker run:启动一个新的容器

    docker run -d -p 80:80 --name mynginx nginx

    解释:-d表示后台运行容器,-p 80:80将主机的80端口映射到容器的80端口,--name mynginx为容器命名为 mynginx,nginx表示使用的镜像。

  • docker ps:查看正在运行的容器

    docker ps

    解释:列出所有正在运行的容器,包括容器ID、镜像名称、启动时间等信息。使用 docker ps -a查看所有容器(包括已停止的)。

  • docker stop:停止一个容器

    docker stop mynginx

    解释:停止名为 mynginx的容器。

  • docker start:启动一个已停止的容器

    docker start mynginx

    解释:启动名为 mynginx的容器。

  • docker rm:删除一个容器

    docker rm mynginx

    解释:删除名为 mynginx的容器。如果容器正在运行,需要先停止再删除。

  • docker logs:查看容器日志

    docker logs mynginx

    解释:显示名为 mynginx的容器的日志输出,常用于调试。

  • docker exec:在运行中的容器中执行命令

    docker exec -it mynginx /bin/bash

    解释:在名为 mynginx的容器中启动一个交互式的 bash Shell,会话。

1.2 镜像管理相关指令

  • docker pull:下载镜像

    docker pull nginx

    解释:从Docker Hub下载 nginx镜像到本地。

  • docker images:查看本地镜像列表

    docker images

    解释:列出所有本地存储的Docker镜像。

  • docker rmi:删除镜像

    docker rmi nginx

    解释:删除本地的 nginx镜像。

  • docker build:通过 Dockerfile 构建镜像

    docker build -t myapp:v1 .

    解释:根据当前目录下的 Dockerfile 构建一个名为 myapp,版本为 v1的镜像。

二、Dockerfile 基本语法

Dockerfile 是用于定义如何构建Docker镜像的脚本文件,包含一系列指令,每一条指令都会创建镜像的一层。下面是Dockerfile中常用的基本指令。

2.1 基础指令

  • FROM:指定基础镜像

    FROM ubuntu:20.04

    解释:以 ubuntu:20.04作为基础镜像开始构建。

  • MAINTAINER(已弃用,用LABEL替代):定义镜像的作者信息

    LABEL maintainer="youremail@example.com"

    解释:标识镜像的作者信息。

  • RUN:运行命令并创建镜像层

    RUN apt-get update && apt-get install -y nginx

    解释:在镜像内执行命令,比如安装软件包 nginx。

  • COPY:将文件/目录从宿主机复制到镜像中

    COPY ./index.html /usr/share/nginx/html/index.html

    解释:将当前目录下的 index.html文件复制到镜像中的指定目录。

  • ADD:功能类似于 COPY,但支持自动解压缩和从URL下载文件

    ADD https://example.com/app.tar.gz /app/

    解释:将一个远程的tar.gz文件下载并解压到镜像的 /app/目录。

  • CMD:指定容器启动时要执行的命令

    CMD ["nginx", "-g", "daemon off;"]

    解释:设置容器启动时默认执行的命令。CMD可以被 docker run的命令行参数覆盖。

  • ENTRYPOINT:类似于 CMD,但不易被覆盖

    ENTRYPOINT ["nginx", "-g", "daemon off;"]

    解释:设置容器启动时必须执行的命令,通常与 CMD搭配使用。

  • EXPOSE:声明容器服务监听的端口

    EXPOSE 80

    解释:声明容器运行时暴露的端口,方便外部访问。

  • ENV:设置环境变量

    ENV APP_ENV=production

    解释:定义环境变量 APP_ENV,可以在后续的 RUN指令或容器中使用。

  • VOLUME:创建挂载点,以共享数据

    VOLUME ["/data"]

    解释:在容器中创建一个挂载点,外部可以挂载数据卷到此路径。

  • WORKDIR:设置工作目录

    WORKDIR /app

    解释:设置接下来指令运行的默认工作目录。

2.2 完整示例

以下是一个简单的Dockerfile示例,用于构建一个Node.js应用的镜像:

# 使用Node.js官方基础镜像
FROM node:14

# 设置工作目录
WORKDIR /app

# 复制package.json和package-lock.json文件
COPY package*.json ./

# 安装依赖
RUN npm install

# 复制应用源代码
COPY . .

# 暴露应用服务的端口
EXPOSE 3000

# 启动应用
CMD ["node", "app.js"]

三、总结

Docker 提供了强大的命令行工具和灵活的 Dockerfile 语法,使得应用程序的容器化变得简单而高效。通过掌握常用 Docker 命令和 Dockerfile 的基本指令,可以快速构建、管理和部署容器化应用,提高开发和运维效率。