快来试试一键式傻瓜分发,做一个docker领域大神吧!在软件开发的过程中,但凡遇到了CI/CD的概念,就离不开Docker。

Docker基本概念

1. Docker 简介

Docker 是一种开源的容器化技术,可以将应用程序及其所有依赖打包成一个可移植的容器。通过 Docker,可以确保应用在不同环境(开发、测试、生产)中运行一致性,解决“在我电脑上可以运行”的问题。

2. Docker 的基本概念

  1. 镜像(Image)
    • 类似于应用程序的模板,包含了运行应用所需的所有环境(如操作系统、运行时、库、应用程序代码等)。
    • 镜像是不可变的,类似于虚拟机的快照。
  2. 容器(Container)
    • 基于镜像创建的实例化运行环境。每个容器是一个独立的沙盒,包含应用和所有依赖。
    • 容器是轻量级的,启动速度快,占用资源少。
  3. Dockerfile
    • 一种脚本文件,用于定义如何构建镜像(包含操作系统、依赖安装、程序代码等)。
    • 类似于虚拟机的配置文件。
  4. Docker Hub
    • 一个公共的镜像存储库,类似于代码托管平台(如 GitHub)。可以从 Docker Hub 下载或推送镜像。
  5. 网络(Network)
    • Docker 提供了容器间通信的功能,允许容器通过网络互联。
    • 默认的网络模式是 bridge,所有容器连接到一个虚拟网桥。
  6. 卷(Volume)
    • 用于数据持久化,将容器内部的数据保存到宿主机的文件系统中,避免容器删除后数据丢失。

3. Docker 的基本操作

镜像相关

  1. 拉取镜像

    docker pull <镜像名>:<标签>

    示例:

    docker pull python:3.9
  2. 查看本地镜像

    docker images
  3. 删除镜像

    docker rmi <镜像ID>

容器相关

  1. 运行容器

    docker run -d -p 8000:8000 <镜像名>

    参数说明:

    • -d:后台运行容器。

    • -p:将容器的端口映射到主机端口(如 8000:8000)。

    • 示例:

      docker run -d -p 8080:80 nginx
  2. 查看运行中的容器

    docker ps
  3. 查看所有容器(包括已停止的)

    docker ps -a
  4. 停止容器

    docker stop <容器ID>
  5. 删除容器

    docker rm <容器ID>

其他命令

  1. 进入容器

    docker exec -it <容器ID> /bin/bash

    示例:

    docker exec -it my-container /bin/bash
  2. 查看容器日志

    docker logs <容器ID>
  3. 清理未使用的镜像和容器

    docker system prune -a

Docker部署

1. Dockerfile 的作用

Dockerfile 是什么?

Dockerfile 是一份文本文件,用于定义如何构建一个 Docker 镜像。它包含了镜像的基础镜像、依赖安装、文件复制、运行命令等信息。


Dockerfile 的基本结构

以下是一个标准的 Dockerfile 示例:

# 使用官方基础镜像
FROM python:3.11-slim

# 设置工作目录
WORKDIR /app

# 复制项目依赖文件
COPY requirements.txt .

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY app/ ./app

# 暴露应用端口
EXPOSE 8000

# 运行应用程序
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

Dockerfile 中的关键指令

  • FROM:指定基础镜像(如 python:3.11-slim)。
  • WORKDIR:设置容器内的工作目录。
  • COPY:将本地文件复制到镜像中。
  • RUN:在镜像构建时运行命令(如安装依赖)。
  • EXPOSE:声明容器会使用的端口。
  • CMD:指定容器启动时运行的命令。

2. Docker Compose 的作用

Docker Compose 是什么?

Docker Compose 是一个工具,用于定义和管理多容器应用程序。通过 docker-compose.yml 文件,可以用简单的命令启动一组相关的容器。


Docker Compose 文件示例

以下是一个示例 docker-compose.yml 文件,用于部署一个包含单个服务的应用:

version: '3.8'

services:
  simon_says:
    build: .
    container_name: simon_says_app
    ports:
      - "8000:8000"
    environment:
      - PYTHONUNBUFFERED=1

关键部分解释:

  • services: 定义一组容器服务。
  • build: 指定构建上下文(当前目录 .)。
  • container_name: 指定容器的名称。
  • ports: 定义主机和容器端口的映射(如 8000:8000)。
  • environment: 配置环境变量。

3. Docker 发布与部署流程

3.1 本地构建与测试

  1. 编写 Dockerfile:确保 Dockerfile 文件正确,定义好应用的构建和运行步骤。

  2. 构建镜像

    docker build -t simon_says:latest .
  3. 运行容器

    docker run -d -p 8000:8000 simon_says:latest
  4. 测试应用:通过浏览器或命令行访问 http://localhost:8000。


3.2 使用 Docker Compose

  1. **编写 docker-compose.yml**:确保服务和端口配置正确。

  2. 启动服务

    docker-compose up -d
  3. 测试应用:同样访问 http://localhost:8000。


3.3 发布镜像到 Docker Hub

  1. 登录 Docker Hub

    docker login
  2. 给镜像打标签

    docker tag simon_says:latest yourusername/simon_says:latest
  3. 推送到 Docker Hub

    docker push yourusername/simon_says:latest

3.4 远程部署

  1. 在远程服务器上拉取镜像

    docker pull yourusername/simon_says:latest
  2. 运行镜像

    1. 直接运行
    docker run -d -p 8000:8000 yourusername/simon_says:latest
    1. 使用 Docker Compose:

      version: '3.8'
      
      services:
        simon_says:
          image: yourusername/simon_says:latest
          ports:
      
         - "8000:8000"
      docker-compose up -d