Docker基础知识

Docker基础知识

文章目录

什么是Doker

Docker 是一个开源的容器化平台,它能够将应用及其依赖包打包到一个标准化的容器中,然后在任何地方快速且一致地运行。容器与虚拟机的不同在于,它不需要一个完整的操作系统,而是直接在宿主机上运行,从而减少了资源消耗并提高了效率。

正面示例:

bash 复制代码
# 查看docker版本
docker --version
# 输出示例:
# Docker version 20.10.7, build f0df350

错误示例:

bash 复制代码
# 错误的命令,使用了不支持的参数
docker --wrongflag

调试技巧:使用docker --help查看所有支持的命令与选项。

背后原理:

Docker 容器是基于 Linux 内核的 cgroups 和 namespaces 技术构建的。它通过这些技术实现了对资源的隔离和限制,从而让应用能够在不同的环境中无差异地运行。

Docker安装与配置

Docker 的安装过程简单,支持 Linux、Windows 和 Mac 操作系统。在本节中,我们将以 Linux 为例进行演示。

安装步骤:

  1. 更新系统:

    bash 复制代码
    sudo apt-get update
  2. 安装依赖包:

    bash 复制代码
    sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
  3. 安装 Docker 官方 GPG 密钥:

    bash 复制代码
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  4. 添加 Docker 官方仓库:

    bash 复制代码
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  5. 安装 Docker:

    bash 复制代码
    sudo apt-get update
    sudo apt-get install docker-ce

错误示例:

安装过程中可能遇到以下错误:

bash 复制代码
E: Unable to locate package docker-ce

调试技巧:确认操作系统是否支持 Docker,或者是否添加了正确的 Docker 仓库。

Docker容器基本操作

Docker 的核心概念之一就是容器,它允许用户将应用及其所有依赖打包到一个独立的环境中。

创建并启动容器:

bash 复制代码
# 创建并启动一个 Ubuntu 容器
docker run -it ubuntu bash

查看运行中的容器:

bash 复制代码
docker ps

停止容器:

bash 复制代码
docker stop <容器ID>

错误示例:

bash 复制代码
docker run -it non_existent_image bash

调试技巧:如果遇到镜像不存在错误,使用docker pull <镜像名>下载镜像。

Docker镜像管理

Docker 镜像是一个只读的模板,用于创建容器。镜像可以是从 Docker Hub 上下载的官方镜像,也可以是自己构建的自定义镜像。

查看本地镜像:

bash 复制代码
docker images

拉取镜像:

bash 复制代码
docker pull ubuntu

构建自定义镜像:

  1. 创建一个 Dockerfile 文件,内容如下:

    dockerfile 复制代码
    FROM ubuntu
    RUN apt-get update && apt-get install -y python3
    CMD ["python3", "--version"]
  2. 使用以下命令构建镜像:

    bash 复制代码
    docker build -t my_python_image .

错误示例:

bash 复制代码
docker build -t my_python_image .

如果Dockerfile 文件路径错误,或缺少必要的文件,会遇到构建失败的错误。

Docker网络与存储

Docker 提供了丰富的网络和存储选项,帮助用户灵活管理容器之间的通信以及持久化数据存储。

创建自定义网络:

bash 复制代码
docker network create my_network

将容器连接到自定义网络:

bash 复制代码
docker run --network my_network -it ubuntu bash

使用数据卷存储数据:

bash 复制代码
# 创建并挂载一个数据卷
docker volume create my_volume
docker run -it -v my_volume:/data ubuntu

错误示例:

bash 复制代码
docker network create

没有提供网络名称时,命令会报错。调试技巧:检查命令参数是否正确。

Docker Compose使用

Docker Compose 是一个用于定义和管理多个 Docker 容器应用的工具,适用于多容器应用的开发、测试和生产环境。

创建docker-compose.yml文件:

yaml 复制代码
version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example

启动服务:

bash 复制代码
docker-compose up

错误示例:

bash 复制代码
docker-compose up

如果docker-compose.yml文件格式错误,可能导致启动失败。

高级技巧与调试

  1. 优化镜像构建 :通过docker build --no-cache命令避免缓存,提高构建镜像的效率。
  2. Dockerfile多阶段构建:通过多阶段构建优化镜像体积和构建时间。
  3. 容器日志调试 :使用docker logs <容器ID>查看容器的标准输出和错误信息。

实际项目案例

示例项目:搭建一个 Flask + Redis 服务

  1. 创建项目目录结构

    plaintext 复制代码
    my_flask_app/
    ├── app.py
    └── Dockerfile
  2. 编写 app.py 文件

    python 复制代码
    from flask import Flask
    import redis
    
    app = Flask(__name__)
    r = redis.Redis(host='redis', port=6379)
    
    @app.route('/')
    def hello_world():
        r.incr('counter')
        return f'Hello, World! Count: {r.get("counter").decode("utf-8")}'
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0')
  3. 编写 Dockerfile

    dockerfile 复制代码
    FROM python:3.8-slim
    
    WORKDIR /app
    
    COPY requirements.txt /app/
    RUN pip install -r requirements.txt
    
    COPY . /app
    
    CMD ["python", "app.py"]
  4. 创建 docker-compose.yml 文件

    yaml 复制代码
    version: '3'
    services:
      web:
        build: .
        ports:
          - "5000:5000"
      redis:
        image: redis
  5. 构建并启动项目

    bash 复制代码
    docker-compose up --build
  6. 访问 Flask 应用 :在浏览器中访问 http://localhost:5000

AI创作声明

本文部分内容由 AI 辅助生成,并经人工整理与验证,仅供参考学习,欢迎指出错误与不足之处。

相关推荐
脑子进水养啥鱼?20 小时前
Linux find 命令
linux·运维
曹天骄20 小时前
Cloudflare Worker 关联域名访问后出现301 / 308
运维·云计算
EverydayJoy^v^21 小时前
RH124简单知识点——第8章——配置和保护SSH
linux·运维·ssh
@zulnger21 小时前
数据提取_1
运维·服务器
淮北49421 小时前
GDB在ubuntu上的安装与使用
linux·运维·ubuntu
shhpeng21 小时前
在 Ubuntu 24.04 上安装 Go1.24.2
linux·运维·ubuntu
AC赳赳老秦1 天前
Kubernetes 与 DeepSeek:高效 Pod 部署配置与资源调度优化指南
人工智能·云原生·容器·kubernetes·自动化·notepad++·deepseek
源远流长jerry1 天前
DPDK 实现的轻量级 UDP 回显服务程序
linux·运维·服务器·网络·网络协议·ip
十六年开源服务商1 天前
WordPress建站公司技术支持服务全解析
运维·数据分析
A-刘晨阳1 天前
【Linux】Prometheus + Grafana的使用
linux·运维·grafana·prometheus·监控