【Docker】Docker 实践与应用举例

news2024/10/8 17:12:23

目录

  • 1. Docker 基本概念
  • 2. Docker 安装
    • 2.1 安装步骤
    • 2.2 验证安装
  • 3. Docker 实践
    • 3.1 创建第一个 Docker 容器
    • 3.2 管理容器
    • 3.3 创建 Dockerfile
    • 3.4 数据卷
  • 4. 应用举例
    • 4.1 Web 应用部署
    • 4.2 数据库容器化
    • 4.3 多容器应用
  • 总结
  • 参考文献

Docker 是一个开源平台,用于自动化部署、扩展和管理应用程序的容器。它允许开发者将应用及其依赖打包成一个标准化的单位,称为容器,这样可以确保在任何环境中都能一致地运行。本文将详细介绍 Docker 的基本概念、实践步骤及具体应用示例,并提供相关表格和图示以帮助理解。

1. Docker 基本概念

概念描述
容器轻量级、可移植的封装了应用的运行环境
镜像容器的可执行包,包含应用及其所有依赖
Dockerfile用于构建镜像的文本文件,定义了镜像的内容
Docker Hub官方的镜像仓库,用于存储和共享镜像

工作原理

Docker 利用操作系统级别的虚拟化技术,通过 Linux 内核的命名空间和控制组实现容器的隔离和资源管理。

使用 Docker CLI
管理容器
使用镜像
从 Docker Hub
用户
Docker Daemon
容器
镜像
镜像仓库

2. Docker 安装

2.1 安装步骤

以Ubuntu 系统为例:

# 更新软件包索引
sudo apt-get update

# 安装必要的软件包
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

# 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 添加 Docker 仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 更新软件包索引
sudo apt-get update

# 安装 Docker CE
sudo apt-get install docker-ce

# 启动 Docker 服务
sudo systemctl start docker

2.2 验证安装

运行以下命令检查 Docker 是否安装成功:

docker --version

3. Docker 实践

3.1 创建第一个 Docker 容器

  1. 拉取镜像

    使用 docker pull 命令拉取一个基本的 Ubuntu 镜像:

    docker pull ubuntu
    
  2. 创建并运行容器

    使用 docker run 命令创建并启动一个新容器:

    docker run -it ubuntu /bin/bash
    

    这将进入容器的交互式终端。

  3. 退出容器

    输入 exit 退出容器。

3.2 管理容器

命令描述
docker ps列出正在运行的容器
docker ps -a列出所有容器(包括已停止的)
docker stop <container_id>停止指定容器
docker rm <container_id>删除指定容器

3.3 创建 Dockerfile

Dockerfile 是构建自定义镜像的基础,下面是一个简单的示例 Dockerfile:

# 使用官方 Nginx 镜像作为基础镜像
FROM nginx:latest

# 将本地的 HTML 文件复制到容器内
COPY ./html /usr/share/nginx/html

# 暴露容器的80端口
EXPOSE 80
  1. 构建镜像

使用以下命令构建镜像:

docker build -t my-nginx .
  1. 运行镜像

运行新镜像并映射端口:

docker run -d -p 8080:80 my-nginx

3.4 数据卷

数据卷用于持久化存储。创建数据卷的命令如下:

docker volume create my-volume

使用数据卷运行容器:

docker run -d -v my-volume:/data my-nginx

4. 应用举例

4.1 Web 应用部署

示例:使用 Docker 部署一个简单的 Node.js 应用

  1. 创建项目结构

    mkdir my-node-app
    cd my-node-app
    mkdir src
    
  2. 编写 Node.js 应用

    src 目录下创建 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('Hello Docker!\n');
    });
    
    server.listen(port, hostname, () => {
        console.log(`Server running at http://${hostname}:${port}/`);
    });
    
  3. 创建 Dockerfile

    在项目根目录下创建 Dockerfile,内容如下:

    FROM node:14
    WORKDIR /usr/src/app
    COPY ./src ./
    RUN npm install
    CMD ["node", "app.js"]
    EXPOSE 3000
    
  4. 构建和运行镜像

    docker build -t my-node-app .
    docker run -d -p 3000:3000 my-node-app
    
  5. 访问应用

    在浏览器中访问 http://localhost:3000,你将看到 “Hello Docker!” 的信息。

4.2 数据库容器化

使用 Docker 部署 MySQL 数据库:

docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest

4.3 多容器应用

使用 Docker Compose 管理多容器应用。docker-compose.yml 示例:

version: '3'
services:
  web:
    build: .
    ports:
      - "8080:80"
  db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw

运行命令:

docker-compose up

总结

Docker 通过容器化技术大大简化了应用的部署和管理,使得应用可以在不同环境中一致地运行。通过本篇文章的实践示例,您可以初步掌握 Docker 的基本用法和实际应用场景。随着对 Docker 的深入学习,您将能够更好地利用这一强大的工具来提升开发和运维效率。

参考文献

  • Docker Official Documentation
  • Docker Hub

希望本文能帮助您深入理解 Docker 的实践与应用!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2196814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

精选四款免费电脑录屏软件,轻松搞定屏幕录制

大家好&#xff0c;我是一个喜欢找各种办公软件的人&#xff0c;今天我要来聊聊咱们日常工作中一个超实用的小工具——电脑录屏软件。作为一个天天和电脑打交道的办公室文员&#xff0c;我算是尝遍了市面上几款热门的录屏神器&#xff0c;它们各有各的绝活&#xff0c;让我在工…

unix系统中的system函数

一、前言 本文将介绍unix系统中的system函数&#xff0c;包括system函数的作用以及使用方法。 二、system函数 简单来说&#xff0c;system函数用于创建一个子进程并让子进程运行新的程序。其原理是依次执行如下操作&#xff1a; fork() --> execl() --> waitpid() 函…

在QT中将Widget提升为自定义的Widget后,无法设置Widget的背景颜色问题解决方法

一、问题 在Qt中将QWidget组件提升为自定义的QWidget后&#xff0c;Widget设置的样式失效&#xff0c;例如设置背景颜色为白色失效。 二、解决方法 将已经提升的QWidget实例对象&#xff0c;脱离父窗体的样式&#xff0c;然后再重新设置自己的样式。

AP8505固定5V输出5V0.2A,SOP7/DIP7非隔离开关电源IC

AP8505基于高压同步整流架构&#xff0c;集成PFM控制器以及500V高可靠性MOSFET&#xff0c;用于外部元器件极精简的小功率非隔离开关电源。AP8505无线门铃芯片内置500V高压启动&#xff0c;实现系统快速启动、超低待机功能。5V非隔离无线门铃芯片AP8505提供了完整的智能化保护功…

基于Python的爬虫设计与数据分析—计算机毕业设计源码37836

目 录 摘要 1 绪论 1.1课题背景 1.2研究目的及意义 1.3爬虫技术 1.4django框架介绍 2 1.5论文结构与章节安排 3 2 基于Python的爬虫设计与数据分析分析 4 2.1 可行性分析 4 2.2 系统流程分析 4 2.2.1数据流程 5 2.2.2业务流程 5 2.3 系统功能分析 5 2.3.1 功能性分析 6 2…

线性代数入门:打开数学的另一扇门

线性代数入门&#xff1a;打开数学的另一扇门 线性代数&#xff0c;作为数学的一个重要分支&#xff0c;它不仅是许多科学和工程领域的核心工具&#xff0c;也是理解现代科技的关键。这篇文章将带你走进线性代数的世界&#xff0c;为你揭开这门学科的神秘面纱。 什么是线性代…

【RAG论文精读1】RAG原始论文-针对知识密集型NLP任务的检索增强生成

目录 一、简介一句话简介作者、引用数、时间论文地址开源代码地址 二、摘要三、引言四、整体架构&#xff08;用一个例子来阐明&#xff09;场景例子&#xff1a;核心点&#xff1a; 五、方法 &#xff08;架构各部分详解&#xff09;5.1 模型1. RAG-Sequence Model2. RAG-Toke…

【面试官】谈谈你对顺序栈和链式栈的认识

思维导图 栈&#xff08;Stack&#xff09;是一种数据结构&#xff0c;遵循后进先出&#xff08;LIFO&#xff09;原则。在java中Stack在java.util.Stack中。 一.常用方法的使用 1. push(E item)&#xff1a;把元素压入栈顶。 代码示例&#xff1a; import java.util.Stack;…

信息学奥赛复赛复习14-CSP-J2021-03网络连接-字符串处理、数据类型溢出、数据结构Map、find函数、substr函数

PDF文档回复:20241007 1 P7911 [CSP-J 2021] 网络连接 [题目描述] TCP/IP 协议是网络通信领域的一项重要协议。今天你的任务&#xff0c;就是尝试利用这个协议&#xff0c;还原一个简化后的网络连接场景。 在本问题中&#xff0c;计算机分为两大类&#xff1a;服务机&#x…

【AI知识点】反向传播(Backpropagation)

反向传播&#xff08;Backpropagation&#xff09; 是训练神经网络的核心算法&#xff0c;它通过反向逐层计算损失函数对每个权重的梯度&#xff0c;来反向逐层更新网络的权重&#xff0c;从而最小化损失函数。 一、反向传播的基本概念 1. 前向传播&#xff08;Forward Propag…

安装DNS

在 CentOS 7 上安装并配置 BIND 以实现 DNS 的正向和反向解析可以按照以下步骤进行&#xff1a; 安装 BIND 打开终端并运行以下命令来安装 BIND 及其工具&#xff1a; yum install bind bind-utils -y配置 BIND 编辑主配置文件&#xff1a; 使用文本编辑器打开 BIND 的主配…

双十一购物清单:这五款爆款科技好物绝不能错过!买到就是赚到!

随着一年一度的双十一购物狂欢节即将拉开帷幕&#xff0c;各大电商平台纷纷推出了一系列优惠活动&#xff0c;吸引着无数消费者的目光。对于科技爱好者而言&#xff0c;这无疑是一个绝佳的机会&#xff0c;能够以优惠的价格购得心仪的电子产品和智能设备。然而&#xff0c;在琳…

HTTPS介绍 --- 超详细保姆级知识讲解

目录 一. 认识HTTPS 二. 使用HTTPS加密的重要性 三. HTTPS的工作流程 四. 常见的加密方式 4.1 对称加密 4.2 非对称加密 五. 数据摘要 && 数据指纹 5.1 数据摘要 5.2 数据签名 六. HTTPS加密过程探究 6.1 方案一&#xff1a;只使用对…

晶体规格书及匹配测试

一、晶体参数介绍 晶体的电气规格相对比较简单,如下: 我们逐一看看每个参数, FL就是晶体的振动频率,这个晶体是24.576MHz的。 CL就是负载电容,决定了晶体频率是否准确,包括外接的实际电容、芯片的等效电容以及PCB走线的寄生电容等,核心参数。 Frequency Tolerance是…

骨传导耳机哪个牌子好?五大精选抢手骨传导耳机分享!

在数字化时代背景下&#xff0c;音乐和音频内容已经成为人们日常生活不可或缺的一部分。随着技术的发展&#xff0c;骨传导耳机凭借其独特的传输方式和健康优势&#xff0c;迅速赢得了市场和消费者的青睐。不同于传统耳机通过空气传导声音&#xff0c;骨传导耳机通过骨骼直接传…

《独自骑行与群骑之旅:探索不同的自由与氛围》

在快节奏的现代生活中&#xff0c;骑行作为一种既环保又健康的出行方式&#xff0c;越来越受到人们的青睐。然而&#xff0c;选择一个人骑车还是加入一群人的行列&#xff0c;这不仅仅是一种出行方式的选择&#xff0c;更是一种生活态度和价值观的体现。本文将探讨这两种骑行方…

【读书笔记·VLSI电路设计方法解密】问题1:什么是芯片

芯片&#xff08;集成电路或IC&#xff09;是在半导体材料的薄基底表面上制造的微型电子电路。在功能上&#xff0c;芯片是一种硬件组件&#xff0c;能够执行某些特定的功能。例如&#xff0c;一个简单的芯片可能被设计用来执行逻辑NOR&#xff08;或非&#xff09;的简单功能&…

如何在VSCode上运行C/C++代码

诸神缄默不语-个人CSDN博文目录 我是Win10&#xff0c;其他系统仅供参考。 文章目录 1. 下载所需插件2. 安装编译器3. 不借助编辑器的cpp代码执行3. 建立VSCode cpp项目3.1 c_cpp_properties.json3.2 settings.json3.3 tasks.json 4. 运行C代码参考资料 1. 下载所需插件 2. 安…

记一次N5105 NAS功耗测量

记一次N5105 NAS功耗测量 一、设备说明 HA500机器&#xff0c;N5105CPU&#xff0c;32GB内存。unraid最新6.12.13系统硬盘有一根500G M2硬盘和一个512G sata接口ssd硬盘&#xff0c;用于组成zfs raid 1&#xff0c;作为cache盘位。另外有三个4T机械硬盘&#xff0c;组成21的形…

鸿蒙应用示例:DevEco Testing 工具的常用功能及使用场景

DevEco Studio 是鸿蒙生态中的集成开发环境(IDE)&#xff0c;而 DevEco Testing 工具则是专门用于测试鸿蒙应用的强大工具。本文将详细介绍 DevEco Testing 中几个常用的测试功能及其使用场景&#xff0c;并给出相应的代码示例。 【1】安装应用 使用场景&#xff1a;在鸿蒙系统…