Bootstrap

Docker新手使用教程

一、Docker 的基本概念

  1. 镜像 (Image):
    • 镜像是一个只读的模板,用于创建 Docker 容器。
    • 镜像包含了运行应用程序所需的所有内容:代码、运行时环境、库、配置文件等。
    • 可以将镜像看作是应用程序的 “代码”。
    • 你可以从 Docker Hub 或其他镜像仓库下载现成的镜像,也可以自己构建镜像。
  2. 容器 (Container):
    • 容器是基于镜像创建的可运行实例。
    • 容器是相互隔离的,它有自己的文件系统、进程空间和网络接口。
    • 你可以启动、停止、删除容器,并且可以在容器内运行应用程序。
    • 可以将容器看作是应用程序的 “运行环境”。
  3. 仓库 (Registry):
    • 仓库是用于存储 Docker 镜像的地方。
    • Docker Hub 是最大的公共镜像仓库,你可以在这里找到各种各样的镜像。
    • 你也可以创建私有的镜像仓库。
  4. Dockerfile:
    • Dockerfile 是一个文本文件,包含了构建 Docker 镜像的指令。
    • 你可以使用 Dockerfile 来定义如何从基础镜像开始,构建自己的应用程序镜像。
  5. Docker Client:
    • docker 命令是 Docker 的客户端,用于与 Docker daemon 交互。
    • 你使用 docker run, docker ps 等命令,实际是发送命令到 Docker daemon 执行。
  6. Docker daemon:
    • Docker daemon 是一个运行在后台的服务,负责实际的镜像拉取、容器创建、容器运行等操作。

二、Docker 安装

  1. 下载 Docker:
  2. 安装 Docker:
    • 按照下载的安装程序中的说明进行安装。
  3. 验证安装:
    • 打开你的终端或命令提示符,输入 docker --version,如果输出 Docker 版本信息,则表示安装成功。

三、常用 Docker 命令

  1. 镜像操作:

    • docker pull <image_name>: 从镜像仓库拉取镜像到本地。
      • 例如:docker pull ubuntu 拉取 ubuntu 镜像。
    • docker images: 列出本地已下载的镜像。
    • docker rmi <image_id>: 删除本地的镜像。
      • 例如:docker rmi 234ab5c67de 删除 id 为 234ab5c67de 的镜像。
  2. 容器操作:

    • docker run <image_name>: 基于镜像创建一个新的容器并运行。
      • 例如:docker run -it ubuntu /bin/bash 运行 ubuntu 镜像,并进入 bash shell。
    • docker ps: 列出当前正在运行的容器。
    • docker ps -a: 列出所有容器,包括正在运行和已停止的。
    • docker stop <container_id>: 停止一个正在运行的容器。
    • docker start <container_id>: 启动一个已停止的容器。
    • docker restart <container_id>: 重启一个容器。
    • docker rm <container_id>: 删除一个已停止的容器。
      • 例如:docker rm 1a2b3c4d5e 删除 id 为 1a2b3c4d5e 的容器。
    • docker exec -it <container_id> <command>: 在正在运行的容器中执行命令。
      • 例如:docker exec -it 1a2b3c4d5e /bin/bash 进入正在运行的 id 为 1a2b3c4d5e 的容器的 bash shell。
  3. 端口映射:

    • -p <host_port>:<container_port>: 将宿主机的端口映射到容器的端口。
      • 例如:docker run -p 8080:80 -it nginx 将宿主机的 8080 端口映射到容器的 80 端口。
  4. 目录挂载:

    • -v <host_dir>:<container_dir>: 将宿主机的目录挂载到容器的目录。
      • 例如:docker run -v /home/user/mydata:/app/data -it ubuntu /bin/bash 将宿主机的 /home/user/mydata 目录挂载到容器的 /app/data 目录。
  5. GPU支持:

    • --gpus all: 允许容器使用所有可用的 GPU。
    • --gpus "device=<gpu_id>": 允许容器使用指定的 GPU 设备。

四、Docker 镜像的使用

  1. 拉取镜像:
    docker pull ubuntu
    
    这将从 Docker Hub 拉取最新的 ubuntu 镜像到你的本地。
  2. 运行容器:
    docker run -it ubuntu /bin/bash
    
    这将基于 ubuntu 镜像创建一个新的容器,并启动 bash shell。你可以开始在容器内运行 Linux 命令。
  3. 退出容器:
    • 在容器中输入 exit 并按回车即可退出容器。
  4. 运行 web 服务
    docker run -d -p 8080:80 nginx
    
    • -d 后台运行容器。
    • -p 8080:80 将主机的8080端口映射到容器的80端口。
    • nginx 镜像名称。

五、Dockerfile 的使用

  1. 创建 Dockerfile:

    • 在你项目的根目录创建一个名为 Dockerfile (注意没有文件后缀) 的文件。

    • 在 Dockerfile 中写入构建镜像的指令。例如:

      FROM python:3.9-slim-buster  # 基于 Python 镜像
      WORKDIR /app   # 设置工作目录
      COPY requirements.txt . # 拷贝依赖文件
      RUN pip install -r requirements.txt # 安装依赖
      COPY . .   # 拷贝项目代码
      CMD ["python", "app.py"]   # 运行应用程序
      
  2. 构建镜像:

    • 在你项目根目录下,使用 docker build 命令构建镜像。

      docker build -t my_app .
      
      • -t my_app 指定镜像名称为 my_app,你可以改为你想要的名称。
      • . 表示 Dockerfile 所在的当前目录。
  3. 运行容器:

      docker run -p 5000:5000 -it my_app
    
    • 这将运行 my_app 镜像, 并将宿主机的 5000端口映射到容器的5000端口。

六、基本操作流程

  1. 选择或创建镜像: 从 Docker Hub 拉取现成的镜像,或者创建自己的 Dockerfile 来构建镜像。
  2. 运行容器: 使用 docker run 命令创建并运行容器。
  3. 在容器内部运行应用程序: 使用 docker exec 进入容器内部,或者直接在 docker run 命令中执行应用程序。
  4. 管理容器: 使用 docker ps, docker stop, docker start, docker rm 等命令来管理容器。
  5. 删除镜像和容器: 使用 docker rmi 删除镜像,使用 docker rm 删除容器。

七、进阶使用

  1. Docker Compose 可以用于管理多个容器,并设置容器的网络,端口, 卷等等,可以使用 docker-compose up 命令运行应用。
  2. Docker Network 可以用于设置容器之间的网络,可以使得多个容器之间进行通信。
  3. Docker Volume 可以用于持久化数据,使得容器之间可以共享数据,或使得容器即使删除,数据也可以保留。

八、 学习资源:

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;