容器化技术入门:Docker详解

💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》

容器化技术入门:Docker详解

容器化技术入门:Docker详解

  • 容器化技术入门:Docker详解
    • 引言
    • Docker 概述
      • 什么是 Docker
      • Docker 的优势
    • 安装和配置 Docker
      • 安装 Docker
      • 验证安装
    • Docker 基础
      • Docker 镜像
        • 拉取镜像
        • 查看镜像
      • Docker 容器
        • 启动容器
        • 查看容器
      • Dockerfile
        • 示例 Dockerfile
        • 构建镜像
      • Docker Compose
        • 示例 docker-compose.yml
        • 启动服务
    • Docker 高级功能
      • 网络
        • 创建桥接网络
        • 连接容器到网络
        • 创建卷
        • 使用卷
      • 安全性
        • 用户命名空间
        • AppArmor
    • 实战案例分析
      • 微服务架构
        • 项目结构
        • 前端 Dockerfile
        • 后端 Dockerfile
        • 数据库 Dockerfile
        • docker-compose.yml
        • 启动服务
    • 总结
    • 参考资料

引言

随着云计算和微服务架构的兴起,容器化技术逐渐成为现代软件开发和部署的主流选择。Docker 是最流行的容器化平台之一,它提供了一种轻量级、可移植的方式,用于打包、分发和运行应用程序。本文将详细介绍 Docker 的基本概念、安装配置、核心功能以及实际应用,帮助读者快速上手 Docker 容器化技术。

Docker 概述

什么是 Docker

Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包到一个可移植的容器中,然后在任何支持 Docker 的环境中运行。Docker 容器是轻量级的,启动速度快,资源利用率高。

Docker 的优势

  • 轻量级:容器共享主机系统的内核,比虚拟机更轻量。
  • 一致性:容器提供了一致的运行环境,减少了“在我的机器上可以运行”的问题。
  • 隔离性:每个容器都有自己的文件系统、网络接口和进程空间,互不影响。
  • 可移植性:容器可以在不同的环境中无缝迁移和运行。

安装和配置 Docker

安装 Docker

Docker 支持多种操作系统,包括 Windows、macOS 和 Linux。以下是 Linux 上的安装步骤。

# 更新包列表
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 APT 仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 更新包列表
sudo apt-get update

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

验证安装

安装完成后,可以通过以下命令验证 Docker 是否安装成功。

sudo docker run hello-world

Docker 基础

Docker 镜像

Docker 镜像是一个轻量级的、独立的、可执行的软件包,包含了运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

拉取镜像

可以从 Docker Hub 拉取现有的镜像。

sudo docker pull ubuntu:latest
查看镜像

可以查看本地已有的镜像。

sudo docker images

Docker 容器

Docker 容器是从镜像创建的运行实例。容器是隔离的、轻量级的,并且可以独立运行。

启动容器

可以从镜像启动一个新的容器。

sudo docker run -it ubuntu:latest /bin/bash
查看容器

可以查看正在运行的容器。

sudo docker ps

Dockerfile

Dockerfile 是一个文本文件,包含了一系列命令,用于自动构建 Docker 镜像。

示例 Dockerfile
# 使用官方的 Ubuntu 镜像作为基础镜像
FROM ubuntu:latest

# 设置作者信息
LABEL maintainer="yourname@example.com"

# 更新包列表并安装所需的软件包
RUN apt-get update && apt-get install -y \n    curl \n    vim

# 设置工作目录
WORKDIR /app

# 复制当前目录下的文件到容器的 /app 目录
COPY . /app

# 暴露 80 端口
EXPOSE 80

# 设置容器启动时运行的命令
CMD ["/bin/bash"]
构建镜像

可以使用 docker build 命令从 Dockerfile 构建镜像。

sudo docker build -t myapp:latest .

Docker Compose

Docker Compose 是一个工具,用于定义和运行多容器 Docker 应用程序。通过一个 YAML 文件,可以配置应用程序的服务。

示例 docker-compose.yml
version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"
启动服务

可以使用 docker-compose up 命令启动定义的服务。

sudo docker-compose up

Docker 高级功能

网络

Docker 提供了多种网络模式,包括桥接网络、主机网络和覆盖网络。

创建桥接网络
sudo docker network create mynetwork
连接容器到网络
sudo docker run -d --name myweb --network mynetwork nginx

Docker 卷用于持久化数据,即使容器停止或删除,卷中的数据仍然保留。

创建卷
sudo docker volume create myvolume
使用卷
sudo docker run -d --name mydb --mount source=myvolume,target=/var/lib/mysql mysql

安全性

Docker 提供了多种安全措施,包括用户命名空间、AppArmor 和 SELinux。

用户命名空间

用户命名空间允许在容器中使用不同的用户 ID,增加安全性。

sudo dockerd --userns-remap=default
AppArmor

AppArmor 是一个 Linux 安全模块,可以限制程序的能力。

sudo apt-get install apparmor

实战案例分析

微服务架构

假设我们要构建一个微服务架构的应用程序,包含前端、后端和数据库服务。

项目结构
myapp/
├── frontend/
│   └── Dockerfile
├── backend/
│   └── Dockerfile
└── db/
    └── Dockerfile
前端 Dockerfile
# 使用官方的 Node.js 镜像作为基础镜像
FROM node:14

# 设置工作目录
WORKDIR /app

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 安装依赖
RUN npm install

# 复制源代码
COPY . .

# 构建应用
RUN npm run build

# 暴露 3000 端口
EXPOSE 3000

# 设置容器启动时运行的命令
CMD ["npm", "start"]
后端 Dockerfile
# 使用官方的 Python 镜像作为基础镜像
FROM python:3.8-slim

# 设置工作目录
WORKDIR /app

# 复制 requirements.txt
COPY requirements.txt .

# 安装依赖
RUN pip install -r requirements.txt

# 复制源代码
COPY . .

# 暴露 5000 端口
EXPOSE 5000

# 设置容器启动时运行的命令
CMD ["python", "app.py"]
数据库 Dockerfile
# 使用官方的 MySQL 镜像作为基础镜像
FROM mysql:5.7

# 设置环境变量
ENV MYSQL_ROOT_PASSWORD=root
ENV MYSQL_DATABASE=mydb

# 复制初始化脚本
COPY init.sql /docker-entrypoint-initdb.d/
docker-compose.yml
version: '3'
services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
  backend:
    build: ./backend
    ports:
      - "5000:5000"
    depends_on:
      - db
  db:
    build: ./db
    volumes:
      - dbdata:/var/lib/mysql
volumes:
  dbdata:
启动服务
sudo docker-compose up

总结

通过本文,我们深入了解了 Docker 的基本概念、安装配置、核心功能以及实际应用。Docker 是一个强大的容器化平台,提供了轻量级、一致性和可移植性的优势。希望本文能帮助读者更好地理解和应用 Docker,提升容器化技术的开发能力。
Docker架构图

参考资料

  • Docker 官方文档
  • Docker Compose 文档
  • Dockerfile 最佳实践
  • Docker 安全性指南
    Docker网络模式图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++20 概念与约束(2)—— 初识概念与约束

1、概念 C20 中引入新的编译期关键字 concept 用于创建概念。个人认为将其翻译为“构思”更为贴切。直接使用时,它更像一个只能用于模板的布尔类型关键字。 而如果用于模板中,他会将模板类型先带入自身,当自身条件为 true 才会实例化模板&…

FPGA实现以太网(一)、以太网基础知识

系列文章目录 FPGA实现以太网(二)、初始化和配置PHY芯片 文章目录 系列文章目录一、以太网简介二、OSI七层模型三、TCP/IP五层模型四、MAC-PHY接口五、MAC帧格式六、IP帧格式6.1 IP首部校验和计算6.2 IP首部校验和校验 七、UDP帧格式7.1 UDP头部校验和…

【启程Golang之旅】Go-Micro框架的高效开发技巧

欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了…

课下作业:IPSec协议验证

课下作业:IPSec协议验证 文章目录 1. 参考云班课课程资源中“ch03 密码技术-协议验证”的“VPN协议验证.pdf”和“ch03 密码技术-10-密码协议验证IPSec.mp4”,对 IPSec 协议进行验证,提交验证过程。(79分)第一阶段发起…

私域流量时代下的新型商业模式:以开源链动 2 + 1 模式、AI 智能名片、S2B2C 商城小程序源码为例

摘要:本文探讨了私域流量时代的特点及其对商业盈利模式的影响。通过分析从大众消费时代到私域流量时代的转型,阐述了商品到“人”的变化过程。同时,深入研究了开源链动 2 1 模式、AI 智能名片和 S2B2C 商城小程序源码在私域流量发展中的作用…

QJson-趟过的各种坑(先坑后用法)

QJson-趟过的各种坑【先坑后用法】 Chapter1 QJson-趟过的各种坑【先坑后用法】一、不能处理大数据量,如果你的数据量有百兆左右(特别是有的小伙伴还喜欢json格式化输出的),不要用Qjson,否则会报错 DocumentTooLarge二、json格式化输出1.构建…

MySQL记录锁、间隙锁、临键锁(Next-Key Locks)详解

行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。 应用在InnoDB存储引擎中。InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。 对于行…

DBeaver工具连接Hive

DBeaver工具连接Hive 首先解压安装包dbeaver-ce-latest-x86_64-setup.zip,并安装dbeaver-ce-latest-x86_64-setup.exe; 安装Kerberos客户端4.1-amd64.msi; 查看集群节点/etc/hosts文件内容,并追加到C:\Windows\System32\drivers\etc\hosts; 下载集群用户keytab文件,并解压…

动态规划-两个数组的dp问题——718.最长重复子数组

1.题目解析 题目来源 718.最长重复子数组——力扣 测试用例 2.算法原理 1.状态表示 子数组问题不能像子序列问题使用两个区间来表示状态,因为子数组一定是连续的,因此在填第i个位置就需要用到第i-1个位置的值,那么不妨以某个位置为结尾来设…

软件工程 软考

开发大型软件系统适用螺旋模型或者RUP模型 螺旋模型强调了风险分析,特别适用于庞大而复杂的、高风险的管理信息系统的开发。喷泉模型是一种以用户需求为动力,以对象为为驱动的模型,主要用于描述面向对象的软件开发过程。该模型的各个阶段没有…

【日志】392.判断子序列

2024.11.8 【力扣刷题】 392. 判断子序列 - 力扣(LeetCode)https://leetcode.cn/problems/is-subsequence/?envTypestudy-plan-v2&envIdtop-interview-150 整个题从一开始就是打算从双指针的思想往下走的。但是,我设置了四个变量sLeft…

高校宿舍信息管理系统小程序

作者主页:编程千纸鹤 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参…

【含开题报告+文档+源码】基于SpringBoot的智慧养老医护管理系统

开题报告 随着社会老龄化趋势的不断加深,我国老年人口逐年增长,对养老服务的需求愈发迫切。然而,传统的养老服务模式存在许多不足,如信息孤岛、护理不精准等问题,迫切需要一种创新性的解决方案以提升养老服务的质量和…

【双十一特惠】腾讯云省钱攻略:如何智取云计算资源

前言 双十一不仅是购物的狂欢节,对于云计算用户来说,更是一个节省成本的绝佳时机。腾讯云,作为国内领先的云计算服务商,每年双十一都会推出一系列优惠活动。本文将为您揭开如何在这个购物节中,最大化利用腾讯云的优惠…

IEEE 1588:电信网络的精确时间协议 (PTP)

IEEE 1588:电信网络的精确时间协议 IEEE 1588 PTP 概述PTP 协议特征同步类型IEEE 1588 PTP 角色IEEE 1588 PTP 的工作原理PTP 设备类型PTP 消息类型事件消息一般信息 PTP 时钟类规范PTP 配置文件 https://www.techplayon.com/ieee-1588-precision-time-protocol-ptp…

昇思大模型平台打卡体验活动:基于MindSpore实现GPT1影评分类

如果你对MindSpore感兴趣,可以关注昇思MindSpore社区 大模型平台 平台说明 昇思大模型平台旨在为AI学习者和开发者提供在线学习的项目、模型、大模型体验和数据集的平台。我们也添加了各领域的经典数据集来帮助学习者解决AI学习过程中的一系列难题, 如…

在IDEA中使用Git

一、准备工作 这里我们使用 Gitee 做例子,使用 SSH 协议。看这个文章前最好看一下《》这个文章,了解一下 SSH。 1、生成秘钥对 首先要到 ~/.ssh 目录下进行操作,因为生成的公钥和私钥一般放在这个目录下,Windows 就是在用户目…

Linux下通过sqlplus连Oracle提示字符是乱码▒▒▒[

先参考https://www.cnblogs.com/wrencai/articles/4374451.html 理解下Oracle编码字符集的概念 如下图,刚开始连上是软吗▒▒▒[ 执行export NLS_LANGJAPANESE_JAPAN.AL32UTF8 (这个仅在当前会话起作用)如果好了,说明字符集是这个,不行在尝试别的字符集 如果要永久设置 vim …

Flyweight(享元)

1)意图 运用共享技术有效地支持大量细粒度的对象。 2)结构 享元模式的结构如图 7-36 所示。 其中: Flyweight 描述一个接口,通过这个接口 Flyweight 可以接受并作用于外部状态 ConcreteFlyweight 实现 Flyweight 接口,并为内部状态(如果有)增加存储空…

微信小程序中使用离线版阿里云矢量图标

前言 阿里矢量图库提供的在线链接服务仅供平台体验和调试使用,平台不承诺服务的稳定性,企业客户需下载字体包自行发布使用并做好备份。 1.下载图标 将阿里矢量图库的图标先下载下来 解压如下 2.转换格式 贴一个地址用于转换格式:Onlin…