1、安装

Docker部署配置全流程

通过“ wsl.exe -d Ubuntu” 启动,“ exit ” 退出

image-20260820235734113

2、镜像使用命令

常用命令
拉取镜像docker pull nginx:1.23(1.23为标签,可下载特定版本的镜像,默认为 latest)
运行镜像docker run nginx
为镜像创建新标签docker tag nginx:latest my-nginx:v1
推送镜像到docker hubdocker tag my-image your_username/my-image:1.0(使用登录的 Docker Hub 用户给镜像打标签) docker push your_username/my-image:1.0
查看所有镜像列表docker images
查看指定镜像详细信息docker inspect nginx
查看镜像的构建历史docker history nginx
删除nginx镜像(需先删除所有用它的容器)docker rmi nginx 当镜像有多个标签时,删除一个标签只会移除该标签引用,不会真正删除镜像数据,需要使用 docker rmi 加上镜像 ID 才能彻底删除镜像文件。镜像 ID 可以通过 docker images 命令进行查看。
清理镜像缓存docker image prune 不加参数时,这个命令只删除悬空镜像(没有标签且不被任何镜像引用的中间层)。加上 -a 参数会删除所有未被容器或镜像引用的镜像,包括构建缓存和旧版本镜像。 清理完成后可以用 docker system df 查看磁盘使用情况,确认空间已经释放。定期清理镜像缓存能有效节省存储空间,保持 Docker 环境整洁高效。
查找镜像docker search mysql 镜像的查找可以通过 Docker Hub 网站或命令行完成,使用 docker search 命令能在终端直接搜索公共镜像。 官方镜像由 Docker 官方团队维护,通常更可靠安全,建议优先选择带有 "OFFICIAL" 标记的镜像。

image-20260821173117109

镜像的导出docker save -o nginx.tar nginx:latest
镜像的导入docker load -i nginx.tar

3、容器使用命令

在获取镜像并下载完成之后,可以通过 docker run 命令运行容器,这个命令的基本格式为:

$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用参数说明:

  • -d:以后台模式运行容器。

  • -p:端口映射,格式为 主机端口号:容器端口号,例如 8080:80。

  • --name:指定容器名称。

  • -it:保持交互式终端连接。

  • -v:挂载主机目录到容器,格式为 -v 主机目录:容器目录。

  • --rm:容器停止时自动删除容器。

  • --env 或 -e:设置环境变量,格式为 --env 变量名=变量值。

  • --network:指定容器的网络模式。

  • --restart:容器的重启策略。

  • -u:指定用户运行,格式为 -u 用户名。

以 nginx 为例,如果我们想要启动一个 nginx 容器,可以通过以下命令进行启动。

$ docker run -d -p 8080:80 --name nginx-container nginx

通过以上命令,Docker 会进行以下操作:

  1. 使用指定的 nginx 镜像构建容器。

  2. 允许容器在后台运行。

  3. 将容器的 80 端口映射到主机的 8080 端口上。

  4. 指定容器名称为 nginx-container。

  5. 启动容器。

在容器启动后,通过主机的 IP 地址就能看到 nginx 的默认欢迎页面了。

注:如果每次运行容器使用 docker run 命令,则每次都都会创建一个新的容器实例,即使使用相同的镜像和参数也会生成不同的容器。

命令
运行Nginxdocker run -d -p 8080:80 --name my-nginx nginx Nginx是常用的网页服务器; -d:后台运行容器(不会占着终端) -p 8080:80:把容器的80端口映射到电脑的8080端口(访问电脑的8080端口就等于访问容器的80端口) --name my-nginx:给容器起个名字叫“my-nginx”,方便后续操作 打开浏览器输入http://localhost:8080,能看到Nginx的默认欢迎页面!
停止my-nginx容器docker stop my-nginx
启动已停止的my-nginxdocker start my-nginx
删除my-nginx容器(需先停止)docker rm my-nginx
查看容器详细信息docker inspect my-nginx
查看容器的日志输出(排查问题)docker logs (-f) my-nginx 加上 -f 参数可以实时查看日志输出
查看容器资源使用情况,包括 CPU、内存、网络和磁盘 I/Odocker stats
查看正在运行的容器docker ps
查看所有容器docker ps -a
容器的导出docker export -o nginx-container.tar nginx-container 导出到当前目录下的 nginx-container.tar 文件中
容器的导入docker import nginx-container.tar my-nginx:v1

1)进入容器内部

当容器在后台运行时,我们可以通过 docker exec 命令来进入运行中的容器内部执行命令或查看状态。

$ docker exec -it my-nginx /bin/bash

以上命令会启动一个bash shell 让我们能与 my-nginx 容器进行交互,-it 参数会保持终端交互连接。

通过这种方式可以像操作普通 Linux 系统一样在容器内执行命令、查看文件或修改配置。容器启动后,Docker 会为它分配唯一的 ID 和名称,自动设置网络和存储,并根据镜像定义启动指定的进程。

2)私有镜像仓库

Docker万字教程

4、docker file

Dockerfile:Dockerfile 是用来构建 Docker 镜像的文本文件,它包含了一系列的指令和配置,用于告诉 Docker 如何构建一个镜像。

使用 Dockerfile 可以自动构建镜像,这样在不同的电脑上都能得到一样的镜像。Dockerfile 里可以写很多不同的指令,比如指定用什么基础镜像、往镜像里放什么文件、安装什么软件、设置什么环境变量、打开什么端口、运行什么命令等。每一条指令都会在镜像里新建一层,所有层叠在一起就是最终的镜像。这种分层的方式让镜像构建更快,也更容易分享和重复使用。

在实际开发中,虽然官方镜像提供了基础运行环境,但项目通常需要特定的配置、依赖、文件、程序代码,这时我们就需要用 Dockerfile 来定制自己的镜像。

以 Web 开发为例,我们可以在官方 nginx 镜像基础上,添加自定义的网页文件、修改配置文件、安装必要的工具等。这样就能保证开发、测试和线上环境完全一致,不会因为环境不同出问题。

具体操作如下:

  1. 创建一个新的空白目录 myweb。

  2. 在目录 myweb 下创建一个文本文件,命名为 Dockerfile,并在文件中添加如下内容。

FROM nginx:latest
RUN echo '<h1>My Custom Nginx Page</h1>' > /usr/share/nginx/html/index.html
EXPOSE 80

这个 Dockerfile 做了三件事:第一行 FROM nginx:latest 指定使用最新版 nginx 作为基础镜像;第二行 RUN 命令将网页内容放到容器的 nginx 默认的网页目录中;第三行 EXPOSE 80 声明容器会使用 80 端口。

  1. 在 myweb 目录下运行命令 docker build -t my-web . 进行自定义 nginx 镜像构建。

这样就完成了自定义 nginx 镜像的构建。其中 -t my-web 是给新镜像命名为 my-web,最后的点表示使用当前目录的 Dockerfile。

构建完成后可以用 docker images 查看新构建的镜像。

$ docker images
  1. 运行 docker run -d -p 80:80 my-web 启动容器。

这时访问主机的 80 端口就能看到自定义网页了。

1)docker常用命令

命令描述
FROM指定基础镜像,用于后续指令构建。
LABEL添加镜像的元数据,使用键值对的形式。
RUN创建镜像时,在镜像中要执行的命令。
CMD指定容器启动时默认要执行的命令(可以被覆盖)。如果执行 docker run 后面跟启动命令会被覆盖掉。
ENTRYPOINT设置容器创建时的主要命令(不可被覆盖)。
SHELL覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。
EXPOSE声明容器运行时监听的特定网络端口。
ENV设置环境变量
COPY将文件或目录复制到镜像中。

FROM 指令:FROM 指令用于指定基础镜像,必须是 Dockerfile 的第一个指令。基础镜像可以是官方镜像如 ubuntu:20.04,也可以是用户自定义的镜像。如果不指定标签,默认使用 latest 标签。例如 FROM nginx 表示基于最新版 nginx 镜像构建。每个 Dockerfile 可以有多个 FROM 指令用于构建多阶段镜像,但最终只会保留最后一个 FROM 生成的镜像层。基础镜像的选择直接影响最终镜像的大小和安全性,通常推荐使用官方维护的最小化镜像如 alpine 版本。最后的 AS name 可以选择为新生成阶段指定名称。

  • FROM 指令格式:

FROM <image>[:<tag>] [AS <name>]
  • 参数说明:

    • <image>:必需,指定基础镜像名称。

    • :<tag>:可选,指定镜像版本标签。

    • AS <name>:可选,为构建阶段命名。

  • FROM 指令示例:

FROM nginx:1.23
FROM python:3.9-alpine
FROM ubuntu:20.04 AS builder

LABEL 指令:用于添加元数据到镜像,采用键值对格式。

  • LABEL 指令格式:

LABEL <key>=<value>
  • LABEL 指令示例:

LABEL version="1.0.1"
LABEL maintainer="admin@example.com"

RUN 指令:在镜像构建过程中执行命令,每条 RUN 指令都会创建一个新的镜像层。RUN 有两种格式:Shell 格式(RUN <command>)和 Exec 格式(RUN ["executable", "param1", "param2"])。Shell 格式默认使用 /bin/sh -c 执行,Exec 格式直接调用可执行文件。为了减少镜像层数,建议将多个命令合并到单个 RUN 指令中,用 && 连接命令,用 \ 换行。例如安装软件包时应该先更新包列表再安装,最后清理缓存。

  • RUN 指令格式:

# Shell 格式
RUN <command>
​
# Exec 格式
RUN ["executable", "param1", "param2"]
  • RUN 指令示例:

RUN yum -y install wget
RUN apt-get update && apt-get install -y \
    git \
    curl \
    && rm -rf /var/lib/apt/lists/*
RUN ["/bin/bash", "-c", "echo Hello, Docker!"]
RUN ["yum", "-y", "install", "wget"]

CMD 指令:指定容器启动时的默认命令,一个 Dockerfile 只能有一个有效的 CMD 指令。如果 docker run 指定了命令,CMD 会被覆盖。CMD 有三种格式:Exec 格式(推荐)、Shell 格式和作为 ENTRYPOINT 的参数。Exec 格式直接调用可执行文件,不经过 shell 处理环境变量;Shell 格式会通过 /bin/sh -c 执行。例如运行 Python 应用时可以使用 CMD ["python", "app.py"]。

  • CMD 指令格式:

# Exec 格式(推荐)
CMD ["executable","param1","param2"]
​
# Shell 格式
CMD command param1 param2
​
# 作为 ENTRYPOINT 的参数
CMD ["param1","param2"]
  • CMD 指令示例:

# Shell 格式示例: 运行 Python 脚本
CMD python app.py
​
# Exec 格式示例: 运行 Nginx
CMD ["nginx", "-g", "daemon off;"]
​
# 作为 ENTRYPOINT 参数
CMD ["--port=8080"]

ENTRYPOINT 指令:用于设置容器启动时的主要命令,与 CMD 不同,它不会被 docker run 后面的命令覆盖。

  • ENTRYPOINT 指令格式:

# Shell 格式
ENTRYPOINT command param1 param2
​
# Exec 格式
ENTRYPOINT ["executable", "param1", "param2"] 
  • ENTRYPOINT 指令示例:

# Shell 格式示例: 运行 Python 脚本
ENTRYPOINT python app.py     
​
# Exec 格式示例: 运行 Nginx
ENTRYPOINT ["nginx", "-g", "daemon off;"] 

SHELL 指令:用于覆盖 Docker 默认的 shell 程序。默认情况下 Linux 使用 ["/bin/sh", "-c"],Windows 使用 ["cmd", "/S", "/C"]。这个指令会影响 RUN、CMD 和 ENTRYPOINT 的 shell 格式执行方式。

  • SHELL 指令格式

SHELL ["executable", "parameters"]
  • SHELL 指令示例:

# 切换为 PowerShell
SHELL ["powershell", "-command"]
# 切换回默认 shell
SHELL ["/bin/sh", "-c"]

EXPOSE 指令:声明容器运行时监听的网络端口,只是文档性质的说明,不会实际发布端口。实际端口映射需要在运行容器时通过 -p 参数设置。EXPOSE 可以指定 TCP 或 UDP 协议,默认是 TCP。例如 EXPOSE 80/tcp 表示容器会监听 80 端口。这个指令主要作用是帮助使用者理解容器提供的服务端口,同时被一些编排工具如 Docker Compose 使用。

  • EXPOSE 指令格式:

EXPOSE <port> [<port>/<protocol>...]
  • EXPOSE 指令示例:

# 声明单个端口
EXPOSE 80
# 声明多个端口
EXPOSE 80 443
# 指定协议
EXPOSE 53/udp

ENV 指令:设置环境变量,这些变量会在构建阶段和容器运行时生效。变量可以被后续的 RUN、CMD 等指令使用,也会持久化到容器中。定义的环境变量会出现在 docker inspect 的输出中,也可以在容器运行时通过 docker run --env 参数覆盖。

  • ENV 指令格式:

# 定义单个变量
ENV <key> <value>
# 一次性定义多个变量
ENV <key1>=<value1> <key2>=<value2>...
  • ENV 指令示例:

# 设置单个变量
ENV NODE_VERSION=18.15.0
# 设置多个变量
ENV NODE_VERSION=18.15.0 NODE_ENV=production

COPY 指令:将文件或目录从构建上下文复制到镜像中,源路径必须是相对路径(相对于 Dockerfile 所在目录),不能使用绝对路径或 ../ 父目录引用。目标路径可以是绝对路径或相对于 WORKDIR 的路径。COPY 会保留文件元数据(权限、时间戳),但不支持自动解压压缩包。与 ADD 指令相比,COPY 更推荐用于简单的文件复制操作,因为它的行为更可预测。例如复制项目代码到镜像的 /app 目录。

  • COPY 指令格式:

COPY <src>... <dest>
  • COPY 指令示例:

# 复制单个文件
COPY requirements.txt /app/
# 复制整个目录
COPY src /app/src
# 使用通配符复制多个文件
COPY *.sh /scripts/

2)实际使用

构建 Python Web 应用镜像

假设有一个简单的 Python Flask 应用,需要将其打包成 Docker 镜像。以下是完整的 Dockerfile 示例:

# 使用官方 Python 基础镜像
FROM python:3.9-slim
​
# 设置工作目录
WORKDIR /app
​
# 复制当前目录下的文件到工作目录
COPY . .
​
# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt
​
# 暴露端口
EXPOSE5000
​
# 定义环境变量
ENV FLASK_APP=app.py
ENV FLASK_ENV=production
​
# 启动命令
CMD ["flask", "run", "--host=0.0.0.0"]

这个 Dockerfile 的执行步骤如下:

  1. 使用 python:3.9-slim 作为基础镜像,这是一个轻量级的 Python 环境。

  2. 设置工作目录为 /app。

  3. 将当前目录的所有文件复制到容器的 /app 目录。

  4. 运行 pip install 安装依赖包。

  5. 声明容器运行时监听的端口为 5000。

  6. 设置两个环境变量,指定 Flask 应用入口和运行环境。

  7. 最后定义容器启动时执行的命令。

构建镜像的命令:

docker build -t my-python-app .

运行容器的命令:

docker run -d -p 5000:5000 my-python-app

构建 Node.js 应用镜像

下面是一个 Node.js 应用的 Dockerfile 示例:

# 使用官方 Node.js 基础镜像
FROM node:16-alpine
​
# 设置工作目录
WORKDIR /usr/src/app
​
# 复制 package.json 和 package-lock.json
COPY package*.json ./
​
# 安装依赖
RUN npm install
​
# 复制所有源代码
COPY . .
​
# 构建应用
RUN npm run build
​
# 暴露端口
EXPOSE3000
​
# 启动命令
CMD ["npm", "start"]

这个 Dockerfile 的执行步骤如下:

  1. 使用 node:16-alpine 作为基础镜像,这是一个基于 Alpine Linux 的 Node.js 环境。

  2. 设置工作目录为 /usr/src/app。

  3. 先复制 package.json 和 package-lock.json 文件,这样可以利用 Docker 的缓存层。

  4. 运行 npm install 安装依赖。

  5. 复制所有源代码到容器中。

  6. 运行构建命令。

  7. 声明容器运行时监听的端口为 3000。

  8. 定义容器启动时执行的命令。

构建镜像的命令:

docker build -t my-node-app .

运行容器的命令:

docker run -d -p 3000:3000 my-node-app

构建 Nginx 静态网站镜像

如果需要部署一个静态网站,可以使用 Nginx 作为 Web 服务器。以下是 Dockerfile 示例:

# 使用官方 Nginx 基础镜像
FROM nginx:alpine
​
# 删除默认的 Nginx 配置
RUN rm -rf /etc/nginx/conf.d/default.conf
​
# 复制自定义配置
COPY nginx.conf /etc/nginx/conf.d/
​
# 复制静态网站文件
COPY dist/ /usr/share/nginx/html/
​
# 暴露端口
EXPOSE 80
​
# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]

这个 Dockerfile 的执行步骤如下:

  1. 使用 nginx:alpine 作为基础镜像,这是一个轻量级的 Nginx 环境。

  2. 删除默认的 Nginx 配置文件。

  3. 复制自定义的 Nginx 配置文件到容器中。

  4. 将构建好的静态网站文件复制到 Nginx 的默认网站目录。

  5. 声明容器运行时监听的端口为 80。

  6. 定义容器启动时执行的命令,以前台模式运行 Nginx。

需要准备一个 nginx.conf 配置文件,例如:

server {
    listen 80;
    server_name localhost;
​
    location / {
        root /usr/share/nginx/html;
        index index.html;
        try_files $uri $uri/ /index.html;
    }
}

构建镜像的命令:

docker build -t my-static-site .

运行容器的命令:

docker run -d -p 8080:80 my-static-site

5、用Docker Compose部署多服务

如果需要同时运行多个服务(比如Web服务+数据库),用Docker Compose更方便,只需一个配置文件。

Docker Compose:用于定义和管理多容器应用的工具。它通过一个 YAML 文件来配置所有服务配置,用一条命令就能启动整个应用。Docker Compose 解决了多个容器之间的依赖关系和启动顺序问题,主要用于开发环境、测试环境和 CI/CD 流程中。Docker Compose 文件包含了容器镜像、端口映射、数据卷、环境变量等配置,所有配置集中在一个文件中,便于版本控制和团队协作。

1)Docker Compose 文件结构

Docker Compose 的核心是 docker-compose.yml 文件,它采用 YAML 格式定义服务、网络和卷。一个基本的 Compose 文件包含以下部分:

  • version:指定 Compose 文件格式版本,例如 '3.8'。

  • services:定义各个容器服务,每个服务对应一个容器。

  • networks:配置自定义网络。

  • volumes:声明数据卷。

YAML 文件使用缩进来表示层级关系,冒号表示键值对,连字符表示列表项。

以下是一个典型的 docker-compose.yml 示例,定义了一个 WordPress 的应用配置。

version: '3.8'
​
services:
db:
    image:mysql:5.7
    volumes:
      -db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD:password
      MYSQL_DATABASE:wordpress
    networks:
      -backend
​
wordpress:
    image:wordpress:latest
    ports:
      -"80:80"
    environment:
      WORDPRESS_DB_HOST:db
      WORDPRESS_DB_USER:root
      WORDPRESS_DB_PASSWORD:password
    depends_on:
      -db
    networks:
      -frontend
      -backend
​
networks:
frontend:
backend:
​
volumes:
db_data:

这个 WordPress 的应用配置示例中展示了:

  • 两个服务:MySQL 数据库和 WordPress。

  • 自定义网络:frontend 和 backend。

  • 声明数据卷:数据卷 db_data 持久化数据库。

  • 设置环境变量:设置 MySQL 数据库和 WordPress 相关环境变量。

  • 端口映射:将容器 80 端口映射到主机 80 端口。

  • 服务依赖关系:确保数据库服务先启动。

下面详细说明每个部分的作用和配置方法。

version

version:指定使用的 Compose 文件格式版本。不同版本支持的功能不同。目前常用的是 3.x 版本。版本号需要用引号包裹。

示例:

version: '3.8'

版本号影响可用功能。例如 3.8 版本支持更多配置选项。版本号必须与安装的 Docker Compose 版本兼容。如果不指定版本,默认使用最新支持版本。

services

services:定义需要运行的容器服务,是 Compose 文件的核心部分。每个服务对应一个容器。服务名称自定义,作为容器的标识。

基本服务配置示例:

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

常用服务配置项:

  • image:指定使用的镜像名称和标签。可以从 Docker Hub 获取或使用本地构建的镜像。

  • build:如果使用本地 Dockerfile 构建镜像,需要指定构建路径。

    build: ./dir
  • ports:设置端口映射,格式为 "主机端口:容器端口"。

    ports:
      - "8080:80"
  • volumes:配置数据卷挂载,支持主机路径和命名卷。

    支持主机路径:把容器里的某个目录和容器外面的存储位置关联起来,让数据不会因为容器删除而丢失。

    命名卷:Docker 帮你管理存储位置,你只需要给这个存储空间起一个名字。删除容器后,数据仍然保存在 Docker 管理的那个 Volume 里,之后创建一个新的 MySQL 容器仍可重新挂载。可通过docker命令查看已有的volume。

    挂载:连接 容器目录 ←→ 外部存储

    # linux系统
    volumes:
      - /host/path:/container/path
      - named_volume:/container/path
    # windows系统
    services:
      mysql:
        image: mysql
        volumes:
          - D:/docker/mysql-data:/var/lib/mysql
    # 命名卷
    services:
      mysql:
        image: mysql
        volumes:
          - mysql-data:/var/lib/mysql
    ​
    volumes:
      mysql-data:

    注:

    docker compose down -v:其中的 -v 就是在删除 Compose 容器的同时把相关命名卷也删除,数据库数据因此可能一起丢失

  • environment:设置环境变量,可以用列表或键值对格式。

    environment:
      - VAR1=value1
      - VAR2=value2
  • depends_on:定义服务启动顺序,确保依赖服务先启动。

    depends_on:
      - db
  • restart:设置容器重启策略,比如 always 表示总是自动重启。

    restart: always
  • command:覆盖容器启动命令。

    command: ["python", "app.py"]

完整服务示例:

services:
  web:
    build:.
    ports:
      -"5000:5000"
    volumes:
      -.:/code
    environment:
      FLASK_ENV:development
    depends_on:
      -redis
  redis:
    image:redis:alpine
    volumes:
      -redis_data:/data

-.:/code : 表示把当前目录 . 挂载到容器里的 /code 目录

networks

networks:定义自定义网络。容器通过网络名称互相通信。默认会创建 bridge 网络。

示例:

首先定义两个网络

networks:
# 创建两个独立的虚拟局域网: frontend网络和backend网络
  frontend:
    driver: bridge
  backend:
    driver: bridge

bridge 是 Docker 最常用的网络驱动,可以暂时理解为:在这台电脑上创建一个 Docker 内部使用的虚拟局域网。

注:如果你不写 networks,Docker Compose 本身就会自动给这个 Compose 项目创建一个默认网络,通常使用 bridge 驱动,然后把 涉及的容器都接进去。

服务中使用网络:

services:
# 创建两个独立的虚拟局域网
  web:
    networks:
      - frontend
  db:
    networks:
      - backend

自定义网络提供更好的隔离性。不同网络的容器默认不能互相访问。

解释:

network 决定“哪些容器可以直接互相通信”。

可以把 Docker 网络想象成一个个局域网。

假设有三个容器:

web     前端
api     后端
db      数据库

如果它们都加入同一个网络:

        my-network
┌─────────────────────────┐
│                         │
│   web ←→ api ←→ db      │
│                         │
└─────────────────────────┘

它们就可以通过服务名互相访问,比如 api 访问数据库时可以写:

db:3306

而不需要知道 db 容器具体的 IP 地址。

MySQL 默认监听 3306

区分port:

services:
  web:
    networks:
      - backend
    ports:
      - "8088:80"

8088为主机端口,80为容器端口

如果你的 Windows 主机访问 web:

http://localhost:8088

而另一个 Docker 容器访问 web,通常是:

http://backend:8080

volumes

volumes:声明数据卷。数据卷用于持久化存储和容器间共享数据。

可以理解为是:Docker 专门在容器外准备的一块持久化存储空间。

示例:

声明两个命名卷:

volumes:
  db_data:
    driver: local
  app_data:
    driver: local

服务中使用卷:

services:
  db:
    volumes:
      - db_data:/var/lib/mysql

/var/lib/mysql为容器内目录,相当于把 Docker 管理的 db_data 数据卷,挂载到 db 容器里的 /var/lib/mysql

卷数据独立于容器生命周期。删除容器不会删除卷数据。

2)Docker Compose 常用操作命令

Docker Compose 提供了一系列命令来管理多容器应用:

  • 启动服务:docker-compose up -d 会在后台启动所有服务,-d 表示 detached 模式。

  • 停止服务:docker-compose down 停止并移除所有容器、网络和卷。

  • 查看状态:docker-compose ps 显示各容器的运行状态。

  • 查看日志:docker-compose logs 输出容器日志,加 -f 可以跟踪实时日志。

  • 构建镜像:如果服务使用本地 Dockerfile,docker-compose build 会重新构建镜像。

  • 重启服务:docker-compose restart,重启所有服务或指定服务。。

  • 单服务操作:可以针对单个服务执行命令,例如 docker-compose start wordpress。

这些命令大大简化了多容器应用的管理工作。通过组合使用这些命令,可以轻松控制整个应用的运行状态。

6、docker常用命令

1)Docker 服务命令

  1. 启动 Docker 服务

$ systemctl start docker
  1. 停止 Docker 服务

$ systemctl stop docker
  1. 重启 Docker 服务

$ systemctl restart docker
  1. 设置开机启动 Docker 服务

$ systemctl enable docker
  1. 查看 Docker 服务状态

$ systemctl status docker

2)Docker 镜像命令

  1. 查看本地的镜像信息

$ docker images
  1. 从镜像仓库中拉取或者更新指定镜像(默认的镜像仓库是官方的 Docker Hub)

$ docker pull NAME[:TAG]
  1. 从镜像仓库查找镜像

$ docker search NAME
  1. 根据本地 Dockerfile 文件,构建镜像

# docker build -t 镜像名:版本号 .
$ docker build -t my_image:1.0 .
  1. 删除本地镜像

# docker rmi 镜像名:版本号
$ docker rmi mysql:5.7
  1. 导入镜像

# docker load -i 指定要导入的镜像压缩包文件名
$ docker load -i image.tar
  1. 导出镜像

# docker save -o 导出的镜像压缩包的文件名 要导出的镜像名:版本号
$ docker save -o image.tar target_image:tag
  1. 清除多余镜像缓存

$ docker system prune -a

3)Docker 容器命令

  1. 创建容器

# 常用参数列表
# -d: 后台运行容器,并返回容器 ID
# -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
# -i: 以交互模式运行容器,通常与 -t 同时使用
# -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
# --name=my_container: 为容器指定一个名称
# --dns 8.8.8.8: 指定容器使用的 DNS 服务器,默认和宿主一致
$ docker run -d --name=my_container -p 8080:8080 tomcat:latest
  1. 查看容器列表

# 查看正在运行的容器列表
$ docker ps
​
# 查看最近一次创建的容器
$ docker ps -l
​
# 查看正在运行的容器 ID 列表
$ docker ps -q
​
# 查看全部容器(包括已经停止的容器)
$ docker ps -a
​
# 查看全部容器 ID 列表
$ docker ps -aq
  1. 停止运行的容器

# 使用容器名停止
$ docker stop my_container
​
# 使用容器 ID 停止
$ docker stop container_id
​
# 使用容器 ID 停止多个正在运行的容器
$ docker ps
  1. 启动已停止的容器

# 容器名
$ docker start my_container
​
# 容器 ID
$ docker start container_id
​
# 使用容器 ID 启动多个已停止的容器
$ docker start `docker ps -aq`
  1. 删除容器

# 用容器名删除
$ docker rm my_container
​
# 用容器 ID 删除
$ docker rm container_id
​
# 删除多个未运行的容器, 运行中的无法删除
$ docker rm `docker ps -aq`
  1. 进入容器(正在运行的容器才可以进入)

# 使用容器名
$ docker exec -it my_container /bin/bash
​
# 使用容器 ID
$ docker exec -it container_id /bin/bash
  1. 查看容器信息

# 容器名
$ docker inspect my_container
​
# 容器 ID
$ docker inspect container_id

参考:Docker 万字教程:从入门到掌握

更多推荐