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 辅助生成,并经人工整理与验证,仅供参考学习,欢迎指出错误与不足之处。

相关推荐
水天需0102 小时前
Linux 命令行换行完全指南
linux·运维·服务器
秋刀鱼 ..2 小时前
第五届机电一体化、自动化与智能控制国际学术会议(MAIC 2025)
运维·人工智能·python·机器人·自动化·制造·新人首发
回忆是昨天里的海2 小时前
docker存储-卷映射
运维·服务器·docker
凯子坚持 c2 小时前
Docker常见问题(多种类似命令之间的区别)
运维·docker·容器
喵了meme2 小时前
Linux学习日记18:线程的分离
linux·运维·c语言·学习
The star"'3 小时前
zabbix
运维·云计算·zabbix
FreeSoar13 小时前
linux 安装 docker报错处理
linux·运维·docker
计算衎3 小时前
PostgreSQL数据库docker版本安装以及简单使用和docker-compose.yml启动服务详细介绍
docker·postgresql
llilian_163 小时前
精准时序赋能千行百业——IEEE1588PTP授时主时钟应用解析 PTP授时服务器 IEEE1588主时钟
运维·服务器·网络·嵌入式硬件·其他