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

相关推荐
fengyehongWorld2 小时前
Linux logger命令
linux·运维·服务器
一只鹿鹿鹿2 小时前
网络信息与数据安全建设方案
大数据·运维·开发语言·网络·mysql
好好学习啊天天向上2 小时前
最新:ubuntu上源码安装llvm,还没有成功
linux·运维·ubuntu
小宇的天下2 小时前
Calibre nmDRC 运行机制与规则文件(13-2)
运维·开发语言
Guistar~~2 小时前
【Linux驱动开发IMX6ULL】使用NXP MfgTool 烧写系统到eMMC
linux·运维·驱动开发
合利士智能装备3 小时前
电机自动化生产线如何破解扁线电机定子滴漆低效与不一致?
运维·自动化·汽车·视觉检测·能源·制造
航Hang*3 小时前
第五章:网络系统建设与运维(中级)——生成树协议
运维·服务器·网络·笔记·华为·ensp
catoop3 小时前
生产环境 nginx 推荐配置
运维·nginx
啵啵啵啵哲3 小时前
【输入法】Ubuntu 22.04 终极输入法方案:Fcitx5 + 雾凇拼音 (Flatpak版)
linux·运维·ubuntu
渝妳学C3 小时前
深度解析Linux中编译器gcc/g++
linux·运维