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

容器化技术入门: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: ./frontendports:- "3000:3000"backend:build: ./backendports:- "5000:5000"depends_on:- dbdb:build: ./dbvolumes:- dbdata:/var/lib/mysql
volumes:dbdata:
启动服务
sudo docker-compose up

总结

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

参考资料

  • Docker 官方文档
  • Docker Compose 文档
  • Dockerfile 最佳实践
  • Docker 安全性指南
    Docker网络模式图
http://www.lryc.cn/news/480029.html

相关文章:

  • 基于SSM(Spring + Spring MVC + MyBatis)框架的药房管理系统
  • 在服务器里安装2个conda
  • web安全漏洞之ssrf入门
  • 《NoSQL 基础知识总结》
  • 高校宿舍信息管理系统小程序
  • 2.索引:MySQL 索引分类
  • sklearn红酒数据集分类器的构建和评估
  • 【IC验证面试常问-4】
  • 【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
  • 书生浦语第四期基础岛L1G4000-InternLM + LlamaIndex RAG 实践
  • 基于ViT的无监督工业异常检测模型汇总
  • 数据库管理-第258期 23ai:Oracle Data Redaction(20241104)
  • 运放进阶篇-多种波形可调信号发生器-产生方波-三角波-正弦波
  • CSS中的变量应用——:root,Sass变量,JavaScript中使用Sass变量
  • WPF+MVVM案例实战与特效(二十八)- 自定义WPF ComboBox样式:打造个性化下拉菜单
  • 速盾:怎么使用cdn加速?
  • C++ 优先算法 —— 三数之和(双指针)
  • YOLOv7-0.1部分代码阅读笔记-yolo.py
  • 【缓存与加速技术实践】Web缓存代理与CDN内容分发网络
  • MySQL的约束和三大范式
  • Unity网络通信(part7.分包和黏包)
  • 练习题 - DRF 3.x Overviewses 框架概述
  • Linux 经典面试八股文
  • Filter和Listener
  • Go 项目中实现类似 Java Shiro 的权限控制中间件?
  • 【Javascript】-一些原生的网页设计案例
  • SpringBoot开发——Spring Boot 3种定时任务方式
  • Flutter鸿蒙next 实现长按录音按钮及动画特效
  • 【计网】实现reactor反应堆模型 --- 框架搭建
  • 力扣中等难度热题——长度为K的子数组的能量值