首页 > 其他分享 >Docker实践与应用举例

Docker实践与应用举例

时间:2024-10-16 15:49:31浏览次数:6  
标签:容器 image 实践 举例 Docker root docker 运行

Docker实践与应用举例

1. Docker简介

1.1 什么是Docker?

Docker是一种开源的容器化平台,用于简化应用程序的开发、部署和运行。容器化是将应用程序及其依赖打包在一起,在任何支持Docker的环境中运行,确保应用程序在开发、测试、生产环境的一致性。

1.2 Docker vs 虚拟机

虽然Docker与虚拟机都能提供隔离的运行环境,但两者有明显区别:

  • 虚拟机(VM): 需要运行整个操作系统,资源开销较大,启动较慢。
  • Docker容器: 只打包应用及其依赖,不包含操作系统内核,因此更轻量、启动更快。
1.3 Docker的优势
  • 跨平台一致性: 开发环境与生产环境一致,减少“本地可以运行,服务器不能运行”的问题。
  • 资源利用率高: Docker容器共享主机操作系统内核,节省了大量资源。
  • 轻量、快速: Docker容器启动速度极快,资源消耗少。

2. Docker基础操作

2.1 安装与环境搭建

Docker的安装步骤相对简单,支持主流操作系统。以Ubuntu为例:

sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker

Windows和Mac用户可以通过Docker Desktop安装。安装完成后,运行以下命令验证安装是否成功:

docker --version
2.2 基础命令介绍
  • 拉取镜像: 从Docker Hub上拉取指定的镜像。
    docker pull nginx
    
  • 运行容器: 启动一个容器并映射端口。
    docker run -d -p 8080:80 nginx
    
  • 查看容器: 列出所有正在运行的容器。
    docker ps
    
  • 停止容器: 停止运行的容器。
    docker stop <container_id>
    

3. 实际应用场景

实例1:快速搭建本地开发环境

通过docker-compose可以快速搭建LAMP或LEMP栈(Linux, Nginx, MySQL, PHP)。以下是使用docker-compose搭建LEMP环境的例子。

docker-compose.yml

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./code:/var/www/html
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root

此配置文件将启动Nginx与MySQL容器,Nginx监听8080端口,MySQL设置默认root密码为root。通过命令:

docker-compose up -d

可以一键启动整个开发环境,便捷且高效。

实例2:多语言项目部署

Docker允许在同一台服务器上运行多个语言的项目,比如Python、Node.js和Java项目。通过Docker容器的隔离性,我们可以避免依赖冲突,并利用容器的网络功能确保各个服务的独立性。

举例:使用docker run分别启动Node.js和Python容器:

docker run -d -p 3000:3000 node:14
docker run -d -p 5000:5000 python:3.8

通过这种方式,你可以轻松在一台机器上运行多个不同语言的服务,且相互独立。

4. 进阶应用场景

实例3:CI/CD中的Docker

在持续集成和持续交付(CI/CD)流程中,Docker可以被用作构建和测试的环境。结合Jenkins,我们可以在每次代码提交时自动构建并部署应用。

Jenkins Pipeline示例:

pipeline {
  agent {
    docker {
      image 'maven:3-alpine'
      args '-v /root/.m2:/root/.m2'
    }
  }
  stages {
    stage('Build') {
      steps {
        sh 'mvn clean package'
      }
    }
  }
}

该Pipeline会启动一个带有Maven的Docker容器,并在其中构建Java项目,确保每次构建在相同的环境中进行,消除环境不一致导致的构建失败问题。

实例4:微服务架构中的Docker

Docker在微服务架构中可以发挥巨大作用,每个微服务都可以被独立打包成容器,并通过Docker网络相互通信。

使用docker-compose可以轻松管理多个微服务:

version: '3'
services:
  service1:
    image: node:14
    networks:
      - mynetwork
  service2:
    image: python:3.8
    networks:
      - mynetwork
networks:
  mynetwork:

通过这种方式,服务之间通过Docker网络通信,保证了服务的独立性和可靠性。

5. 性能优化与安全

实例5:减少镜像体积的优化技巧

为了优化Docker镜像大小,可以使用multi-stage builds,将构建步骤与运行步骤分离。

Dockerfile多阶段构建示例:

# Stage 1: build the app
FROM node:14 AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run build

# Stage 2: serve the app
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html

通过这种方式,我们只保留必要的运行时文件,将构建工具和依赖排除在最终镜像之外,极大减少了镜像体积。

实例6:Docker安全实践

为了保证Docker容器的安全,以下是一些最佳实践:

  • 不以root用户运行容器: 默认情况下,Docker容器以root身份运行,这是不安全的。可以通过user字段指定非root用户运行容器。
  • 限制资源: 可以通过Docker的deploy字段限制容器的CPU与内存使用。
services:
  app:
    image: myapp:latest
    user: '1001:1001'  # 非root用户
    deploy:
      resources:
        limits:
          cpus: "0.5"
          memory: "512M"

这些措施能有效提升容器的安全性和资源管理能力。

6. 容器编排与扩展

实例7:使用Kubernetes进行大规模容器编排

当需要管理大量的容器时,Kubernetes(K8s)是最佳选择。它能够自动伸缩、进行服务发现和负载均衡。

Kubernetes Deployment示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  template:
    spec:
      containers:
        - name: myapp
          image: myapp:latest

该示例定义了一个myapp应用的部署,它会自动启动三个副本,并且可以根据流量自动扩展或缩减实例数量。

7. 总结与扩展阅读

Docker通过提供轻量、隔离且一致的运行环境,极大简化了应用开发和部署流程。本文通过多个实际案例,展示了Docker在本地开发、CI/CD、微服务架构以及大规模容器编排中的应用与优化。

推荐资源:

标签:容器,image,实践,举例,Docker,root,docker,运行
From: https://blog.csdn.net/Hellc007/article/details/142958543

相关文章

  • 敏捷转型中的敏捷实践:Leangoo领歌scrum工具私有部署解决方案
    近年来,敏捷开发逐渐成为企业项目管理中的热门话题。无论是互联网公司还是传统制造业,越来越多的企业通过敏捷方法,提升了项目的交付效率和团队的协作能力。在这个背景下,如何选择合适的敏捷管理工具,并确保其安全性和灵活性,成为了不少企业关注的焦点。 很多团队在讨论敏捷实践时,会......
  • shell脚本自动选择空间最大的目录安装docker
    #!/bin/bash#二进制包安装docker-xy.xy.x-ce#变量unamer=`uname-r|cut-d'.'-f1-2`Max_Space=$(df|grep"^/dev"|sort-rn-k2|head-1|awk'{print$6}')Registry="mirror.eastraycloud.com:8665"#判断当前系统类型Unamer=$(uname-v|......
  • 基于cloudreve(Docker应用)搭建网盘服务,用于目录的分享和在线预览。
    文章目录I基于cloudreve(Docker应用)搭建网盘服务安装主要功能设置角色最大容量II知识扩展:网盘类的文件预览需求背景:iOS可以直接预览PDF等常见格式文件,但是Android浏览器需要先下载文件,才能查看文件内容,因此需要搭建支持目录的分享和在线预览的Min......
  • Jenkins+Ant+JaCoCo的代码覆盖率集成实践
    Jenkins+Ant+JaCoCo的代码覆盖率集成实践一、工具介绍Jenkins:Jenkins是一个开源的、基于Java开发的持续集成工具,它可以帮助开发人员自动化构建、测试和部署软件项目。Ant:ApacheAnt是一个基于Java的自动化构建工具,类似于Maven,但更为灵活,适用于各种复杂的构建任务。JaCoCo:J......
  • centos离线安装docker,docker-compose
    安装环境操作系统:Centos7.99内核版本:3.10.0-1160.el7.x86_64安装用户:rootdocker离线安装1下载压缩包官网下载地址:https://download.docker.com/linux/static/stable/x86_64/这里默认选择最新版本(26.0.2)。2上传压缩包并解压tarzxvfdocker-26.0.2.tgz3......
  • Docker Compose部署GitLab
    今天我将向你展示如何在一小时内安装GitLab服务器,并在其中运行第一个CI/CD进程。本文是“如何开始使用流行的CI/CD工具”系列文章的一部分。在本文中,我将向你展示如何安装CI/CD工具,以及如何准备基于Maven构建和测试一个简单项目的流程。什么是GitLab?Gitlab是一款......
  • docker如何建立本地私有仓库,并将docker镜像推到私有仓库
    在Docker中,您可以通过DockerRegistry创建本地私有仓库,并将Docker镜像推送到这个私有仓库。以下是具体步骤:步骤1:启动一个本地Docker私有仓库拉取registry镜像:Docker官方提供了一个registry镜像,可以用来运行私有仓库。首先,您需要从DockerHub拉取这个镜......
  • 基于大模型 + 知识库的 Code Review 实践
    背景......
  • DolphinScheduler快速上手:基于Docker Compose的安装与配置全攻略
    DolphinScheduler是一款强大的开源分布式任务调度系统,广泛应用于大数据领域,用于管理复杂的工作流。本文将详细介绍如何通过DockerCompose安装和配置DolphinScheduler,以便快速搭建并使用这一系统。1.环境准备首先,确保你的系统已经安装了Docker和DockerCompose。Docker......
  • 第一次实践
    作业1:定向爬取大学排名信息代码和结果截图定向爬取大学信息importrequestsfrombs4importBeautifulSoup#目标URLurl='http://www.shanghairanking.cn/rankings/bcur/2020'response=requests.get(url)response.encoding='utf-8'#使用BeautifulSoup解析网......