当前位置: 首页 > article >正文

Docker实践与应用举例

Docker是一种开源的容器化平台,它使得开发者和系统管理员能够方便地打包、分发和运行应用程序。利用Docker,您可以将应用程序和其所有依赖项封装成一个独立的容器,确保应用能够在任何环境中一致运行。随着微服务架构的发展,Docker已成为软件开发和运维中不可或缺的工具之一。

在本指南中,我们将详细讨论Docker的安装、基本命令、工作原理以及通过实际操作案例展示如何在Docker中运行一个Web应用,并进一步管理和扩展容器。

2. Docker简介

2.1 什么是Docker

Docker是一种轻量级的虚拟化技术,使用操作系统级别的虚拟化来运行多个容器。在每个容器内,您可以运行一个独立的应用程序,而容器之间则是相互隔离的。这种方式不仅能够节省资源,还能够加快应用的启动速度。

2.2 Docker的主要组成部分

  • Docker Engine:运行Docker容器的核心组件。
  • Docker Hub:Docker的公共镜像仓库,用户可以在这里获取常用的镜像,也可以自己上传镜像。
  • Dockerfile:用于定义镜像的构建过程,通过简单的指令来描述如何创建镜像。

3. Docker安装

3.1 安装Docker

在本地机器上安装Docker,请按以下步骤:

  • Windows或macOS用户

    1. 从Docker官网(Docker Downloads)下载Docker Desktop,并按照安装引导进行安装。
    2. 安装完成后启动Docker Desktop。
  • Linux用户(Ubuntu为例)

    sudo apt-get update
    sudo apt-get install -y \
        apt-transport-https \
        ca-certificates \
        curl \
        software-properties-common
    
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    
    sudo apt-get update
    sudo apt-get install -y docker-ce
    

3.2 验证安装

完成安装后,通过以下命令检查Docker是否成功安装:

docker --version

您应该能看到Docker的版本信息。

3.3 启动与停止Docker服务(Linux用户)

如果您是在Linux上安装的Docker,需要手动启动Docker服务:

sudo systemctl start docker
sudo systemctl enable docker  # 设置开机自启

4. Docker基本命令

4.1 运行第一个容器

用下面的命令从Docker Hub拉取一个Ubuntu镜像并运行容器:

docker run -it ubuntu /bin/bash
  • -i:表示运行容器时保持标准输入打开。
  • -t:为容器分配一个伪终端。

如果您成功进入了容器,您会看到一个类似root@container_id:/#的提示符。

4.2 列出所有容器

使用以下命令列出正在运行的Docker容器:

docker ps

如果您想查看所有容器(包括已停止的),可以使用:

docker ps -a

4.3 停止与删除容器

  • 停止容器:
docker stop <container_id>
  • 删除容器:
docker rm <container_id>

4.4 拉取镜像

从Docker Hub拉取一个Nginx镜像:

docker pull nginx

4.5 查看镜像

查看本地已有的Docker镜像:

docker images

5. Docker实践案例:运行一个Web应用

5.1 案例背景

在本部分,我们将构建一个简单的Node.js应用,并使用Docker进行容器化。该应用将提供一个简单的Web服务,返回一段欢迎信息。

5.2 创建项目目录

在您的工作目录下创建一个新的项目文件夹,命名为my-node-app

mkdir my-node-app
cd my-node-app

5.3 创建应用代码

在该目录下创建一个名为app.js的文件,内容如下:

const http = require('http');

const hostname = '0.0.0.0'; // 允许外部访问
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Welcome to my Node.js application running in Docker!\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

5.4 创建Dockerfile

my-node-app目录下创建一个名为Dockerfile的文件,内容如下:

# 使用官方Node.js镜像
FROM node:14

# 设置工作目录
WORKDIR /usr/src/app

# 复制包管理文件
COPY package*.json ./

# 安装应用依赖
RUN npm install

# 复制应用代码
COPY . .

# 暴露应用运行时所需端口
EXPOSE 3000

# 启动应用
CMD ["node", "app.js"]

5.5 创建package.json文件

在同一目录下,创建一个名为package.json的文件,内容如下:

{
  "name": "my-node-app",
  "version": "1.0.0",
  "description": "A simple Node.js app running in Docker",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "http": "^0.0.1-security"
  }
}

5.6 构建Docker镜像

my-node-app目录下,使用以下命令构建Docker镜像:

docker build -t my-node-app .

5.7 运行Docker容器

构建完成后,运行Docker容器:

docker run -d -p 3000:3000 my-node-app
  • -d:表示在后台运行容器。
  • -p 3000:3000:将主机的3000端口映射到容器的3000端口。

通过打开浏览器访问http://localhost:3000,您应该能看到“Welcome to my Node.js application running in Docker!”的欢迎信息。

5.8 管理Docker容器

您可以使用以下命令查看容器的运行状态:

docker ps

如果您需要停止或删除运行的容器,请使用以下命令:

  • 停止容器:
docker stop <container_id>
  • 删除容器:
docker rm <container_id>

6. Docker网络与数据管理

6.1 创建自定义网络

通过以下命令创建一个自定义网络:

docker network create my-network

6.2 运行容器并连接到自定义网络

当您运行容器时,可以通过--network选项将容器连接到指定网络:

docker run -d --network my-network -p 3000:3000 my-node-app

6.3 数据持久化

在Docker中,使用数据卷来实现数据持久化。您可以在运行容器时挂载本地目录到容器中:

docker run -d -p 3000:3000 -v $(pwd)/data:/usr/src/app/data my-node-app

上述命令会将本地项目目录中的data文件夹挂载到容器中的/usr/src/app/data

7. 多容器应用的管理:Docker Compose

7.1 什么是Docker Compose

Docker Compose是Docker提供的一种工具,用于定义和管理多个容器的应用。您可以通过一个YAML文件来配置应用的服务、网络和卷。

7.2 安装Docker Compose

如果您已经安装Docker Desktop,Docker Compose会随附安装。如果您在Linux上安装Docker,则需要单独安装Docker Compose:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

7.3 创建docker-compose.yml文件

my-node-app目录下创建一个名为docker-compose.yml的文件,内容如下:

version: '3'

services:
  web:
    build: .
    ports:
      - '3000:3000'
    networks:
      - my-network

networks:
  my-network:
    driver: bridge

7.4 启动多容器应用

my-node-app目录中运行以下命令以启动服务:

docker-compose up -d

7.5 查看应用日志

您可以运行以下命令查看容器的日志输出:

docker-compose logs

7.6 停止和删除服务

停止并删除应用服务,可以使用:

docker-compose down

Docker不仅能够加速开发和交付周期,而且通过容器化技术使得开箱即用的应用部署变得更为简单与安全。在本文中,我们从Docker的基础知识开始,逐步演示了如何在Docker中创建、管理和扩展Web应用。希望通过这篇操作指南,您能掌握Docker的基本使用,并在今后的项目中灵活应用。

利用Docker,您可以创建更为灵活、可移植且易于扩展的应用架构。在未来的开发中,Docker的优势将显得愈发重要,掌握此项技术无疑会是提高您开发效率的重要一步。


http://www.kler.cn/news/324928.html

相关文章:

  • MPI程序实例:自适应数值积分
  • k8s中,pod生命周期,初始化容器,容器探针,事件处理函数,理解其设计思路及作用
  • 字段映射和数据转换为什么是数据集成的关键?
  • 数据结构:栈 及其应用
  • 汽车总线之---- LIN总线
  • 一文上手SpringSecurity【二】
  • Flink 结合kafka 实现端到端的一致性原理
  • 一文说完c++全部基础知识,IO流(二)
  • 2、Java 基础 - 面向对象基础
  • Qt 信号重载问题--使用lambda表达式--解决方法
  • 国庆节快乐|中国何以成为中国
  • 在Spring项目中使用MD5对数据库加密
  • QT中基于QMatrix4x4与QVector3D的三维坐标变换类实现
  • 理想汽车使用无仪表盘设计的原因和弊端
  • 传统行业选择企业大文件传输系统需要注意哪些?
  • 【C语言刷力扣】2079.给植物浇水
  • 关于MATLAB计算3维图的向量夹角总是不正确的问题记录
  • 金融加密机的定义与功能
  • 【RabbitMQ——SpringBoot整合】
  • 少帅进行曲
  • 模拟实现(优先级队列)priority_queue:优先级队列、仿函数、 反向迭代器等的介绍
  • 再见 ESNI,你好 ECH!—— ECH的前世今生
  • 负载均衡(Load Balancing)是一种计算机技术,用于在网络应用中分配工作负载,以优化资源使用、最大化吞吐量、减少响应时间以及避免过载。
  • Elasticsearch实战应用:构建高效搜索引擎
  • vue 同一个页面第二次跳转路由内容不更新
  • SQL常用数据过滤 - EXISTS运算符
  • 基于SpringBoot校园失物招领系统设计与实现
  • 职业技能大赛-单元测试笔记分享
  • Git GUI操作流程
  • 使用Spring Cloud Config和JCE加密配置文件的实战教程