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

容器化技术入门: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网络模式图

http://www.kler.cn/a/385489.html

相关文章:

  • Kubernetes的基本构建块和最小可调度单元pod-0
  • 【缓存策略】你知道 Cache Aside(缓存旁路)这个缓存策略吗
  • 揭开 gRPC、RPC 、TCP和UDP 的通信奥秘
  • 图像融合self
  • 【面试分享】xshell连接Linux服务器22端口执行命令top期间的技术细节和底层逻辑
  • 随机链表 (Randomized Linked List)、随机树 (Randomized Tree)详细解读
  • 微服务相关问题
  • Redis - Zset 有序集合
  • 停止的 Docker 容器占用的内存和其他资源
  • python3的基本数据类型: 元组的其他操作
  • 华宇TAS应用中间件入围鲲鹏应用创新大赛2024全国总决赛
  • 案例精选 | 河北省某检察院安全运营中异构日志数据融合的实践探索
  • FreeSWITCH 验证
  • 【主机游戏】艾尔登法环游戏攻略
  • 关于Dell r730xd 老服务器的阵列卡 配置系统盘RAID 1
  • 【物联网技术】ESP8266 WIFI模块在STA模式下作为TCP客户端上电自动进入透传数据模式
  • Redis中的数据结构
  • oracle字符集的使用(修改字符集可能导致索引失效)
  • QT创建mainWindow窗口组件
  • 高校宿舍信息管理系统小程序
  • ubuntu22.04 密钥存储在过时的 trusted.gpg 密钥环中
  • 验证码-滑动验证码和点选验证码
  • uniapp发布到微信小程序,提示接口未配置在app.json文件中
  • YAML 语法随笔
  • 微软日志丢失事件敲响安全警钟
  • SQLI LABS | Less-35 GET-Bypass Add Slashes (we dont need them) Integer Based