菜单

Docker 入门手册

ondotnet
ondotnet
发布于 2024-12-02 / 6 阅读
0
0

Docker 入门手册

1. Docker 简介

Docker 是一个开源的容器化平台,它使应用程序的创建、部署和运行更加轻松。Docker 通过将应用及其依赖项打包到一个容器中,保证在任何环境下都能一致地运行。

1.1 Docker 的演变史

  • 2013年发布:Docker 由 Solomon Hykes 创建,最初作为一个内部项目,用于简化应用的部署。

  • 2014年 Docker Hub 发布:Docker Hub 是一个在线存储和分享 Docker 镜像的仓库,使得共享应用变得更加简单。

  • 2017年 Docker 企业版:支持大规模的容器管理,为企业提供更强的安全性和管理功能。

  • 现在:Docker 已经成为 DevOps 和微服务架构中不可或缺的工具,并与 Kubernetes 等容器编排工具紧密结合。

1.2 Docker 和虚拟机的区别

特性

Docker(容器)

虚拟机(VM)

启动速度

几秒钟启动一个容器

通常需要几分钟

资源占用

占用较少,只使用必需资源

需要完整的操作系统,资源开销大

隔离性

基于操作系统级别的隔离,轻量

基于硬件虚拟化,隔离更强

使用场景

适合微服务、持续集成、快速部署

适合需要完整系统环境的应用

总结:Docker 通过共享操作系统内核,实现了更轻量和快速的应用隔离,更适合现代的微服务架构。


2. Docker 基本操作详解

2.1 Docker 镜像(Image)操作

  • 拉取镜像

    docker pull nginx:latest
    

    从 Docker Hub 上下载指定版本的镜像。

  • 构建镜像

    docker build -t myapp:1.0 .
    

    从当前目录中的 Dockerfile 构建镜像,并命名为 myapp:1.0

  • 查看本地镜像

    docker images
    

    列出本地所有的镜像。

  • 删除镜像

    docker rmi myapp:1.0
    

    删除指定的镜像。

2.2 Docker 容器(Container)操作

  • 启动容器

    docker run -d --name mynginx -p 8080:80 nginx
    

    启动一个名为 mynginx 的容器,并将宿主机的 8080 端口映射到容器的 80 端口。

  • 查看运行中的容器

    docker ps
    

    列出所有运行中的容器。

  • 停止容器

    docker stop mynginx
    

    停止名为 mynginx 的容器。

  • 删除容器

    docker rm mynginx
    

    删除一个停止的容器。


3. Dockerfile 详解及示例

Dockerfile 是用来定义如何构建镜像的文件。以下是一些常用指令和示例:

  • FROM:指定基础镜像

    FROM node:18
    

    使用官方的 Node.js 18 版本作为基础。

  • COPY:复制文件到镜像

    COPY . /app
    

    将当前目录的所有文件复制到镜像的 /app 目录。

  • RUN:运行命令

    RUN npm install
    

    在构建镜像时安装依赖。

  • EXPOSE:声明容器运行时监听的端口

    EXPOSE 3000
    
  • CMD:指定容器启动时执行的命令

    CMD ["node", "app.js"]
    

Dockerfile 编写策略

  • 尽量使用官方基础镜像,减少安全风险。

  • 将频繁变动的内容(如代码)放到 COPY 的后面,以减少构建缓存失效的次数。

  • 使用 .dockerignore 文件,排除不需要的文件(如 node_modules)。


4. 常用场景和操作技巧

4.1 查看 Docker 磁盘占用

  • 查看容器、镜像、卷等的磁盘占用

    docker system df
    

    列出镜像、容器、数据卷的磁盘占用情况。

  • 清理无用数据

    docker system prune
    

    删除所有未使用的容器、镜像和网络。

4.2 应用限制与资源管理

  • 限制容器的 CPU 使用

    docker run -d --name myapp --cpus="1.5" myapp:latest
    

    myapp 容器的 CPU 使用限制为最多 1.5 个核心。

  • 限制容器的内存使用

    docker run -d --name myapp --memory="512m" myapp:latest
    

    限制容器的内存使用为 512MB。

4.3 日志查看与过滤

  • 查看容器日志

    docker logs myapp
    
  • 实时查看容器日志

    docker logs -f myapp
    
  • 按时间过滤日志

    docker logs --since 1h myapp
    

    查看最近 1 小时内的日志。

4.4 挂载数据卷(Volume)

数据卷用于在容器和宿主机之间共享数据,并保证数据持久化。

  • 创建数据卷

    docker volume create mydata
    
  • 挂载数据卷到容器

    docker run -d -v mydata:/app/data myapp
    

    mydata 挂载到容器内的 /app/data 目录。

  • 查看所有数据卷

    docker volume ls
    
  • 删除未使用的数据卷

    docker volume prune
    

5. 实战场景及优化建议

5.1 本地开发环境使用 Docker

  • 使用 docker-compose 管理多个容器(如数据库、应用服务):

    version: '3'
    services:
      web:
        image: myapp
        ports:
          - "8080:80"
        volumes:
          - ./app:/app
      db:
        image: mysql:5.7
        environment:
          MYSQL_ROOT_PASSWORD: example
    
  • 优点:使用 docker-compose 可以轻松地定义和管理多容器应用,适合本地开发和测试。

5.2 部署到生产环境

  • 使用 docker swarmKubernetes 进行容器编排,管理大规模容器集群。

  • 将应用日志输出到集中式日志系统(如 ELK),方便日志的集中管理与分析。

  • 设置健康检查(HEALTHCHECK),确保容器在运行时自动恢复异常。

5.3 常见问题及解决方法

  • 容器磁盘空间不足:定期使用 docker system prune 清理未使用的容器、镜像和数据卷。

  • 容器网络问题:使用 docker network 创建自定义网络,隔离不同应用的网络环境。

  • 镜像体积过大:通过精简 Dockerfile 指令、合并 RUN 命令、使用多阶段构建来减少镜像大小。


总结

Docker 通过简单易用的命令和强大的容器化技术,让应用的开发和部署变得更加高效。
无论是构建镜像、管理容器,还是优化资源,Docker 都能帮助开发者提升生产力。

docker-beginners-guide.png


评论