Linux 教程:Docker 容器技术快速入门指南

Linux 教程:Docker 容器技术快速入门指南

linux-tutorial :penguin: Linux教程,主要内容:Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本 linux-tutorial 项目地址: https://gitcode.com/gh_mirrors/lin/linux-tutorial

前言

在现代软件开发与部署中,容器技术已经成为不可或缺的一部分。Docker 作为最流行的容器解决方案,彻底改变了应用程序的开发、交付和运行方式。本文将带你全面了解 Docker 的核心概念、优势以及实际应用方法。

一、Docker 技术概览

1.1 什么是 Docker

Docker 是一种轻量级的虚拟化技术,它通过容器(Container)的方式将应用程序及其所有依赖项打包在一起。与传统虚拟机不同,Docker 容器直接运行在宿主机的操作系统内核上,无需额外的操作系统层,这使得它更加高效和轻量。

1.2 Docker 的核心优势

  1. 资源利用率高:容器共享主机内核,无需为每个应用运行完整的操作系统,显著减少资源消耗
  2. 启动速度快:容器可以在毫秒级启动,远快于传统虚拟机的分钟级启动时间
  3. 环境一致性:开发、测试、生产环境完全一致,彻底解决"在我机器上能运行"的问题
  4. 便捷的持续交付:通过 Dockerfile 实现构建自动化,简化持续集成和部署流程
  5. 易于扩展:基于镜像的分层存储机制,使得应用扩展和维护变得简单

1.3 Docker 的典型应用场景

  • 快速搭建测试环境:为不同项目创建隔离的测试环境
  • 微服务架构:每个服务运行在独立容器中,实现服务解耦
  • 持续集成/持续部署(CI/CD):自动化构建和部署流程
  • 云原生应用:与 Kubernetes 等编排工具配合,构建弹性云服务

二、Docker 核心概念解析

2.1 镜像(Image)

镜像是 Docker 的核心概念之一,可以理解为容器的"模板"。它包含运行应用所需的所有内容:代码、运行时环境、库、环境变量和配置文件。

镜像特点

  • 采用分层存储结构,每一层都是只读的
  • 基于联合文件系统(Union FS)实现高效存储
  • 构建后内容不可变,确保环境一致性

2.2 容器(Container)

容器是镜像的运行实例,类比面向对象编程中的类和对象关系。容器具有以下特性:

  • 轻量级:共享主机内核,资源占用少
  • 可移植性:一次构建,随处运行
  • 隔离性:拥有独立的文件系统、网络和进程空间

2.3 仓库(Registry)

仓库用于集中存储和分发 Docker 镜像,主要分为:

  1. 公共仓库:如官方镜像仓库,提供大量官方和社区维护的镜像
  2. 私有仓库:企业内部搭建,用于存储专有镜像

仓库采用"仓库名:标签"的命名方式管理不同版本镜像,例如 ubuntu:18.04

三、Docker 环境搭建

3.1 安装 Docker

不同操作系统安装方式略有差异:

Linux 系统安装步骤

  1. 卸载旧版本(如有)
  2. 安装依赖包
  3. 添加 Docker 官方 GPG 密钥
  4. 设置稳定版仓库
  5. 安装 Docker Engine

安装完成后,执行以下命令验证安装:

docker version
docker info

3.2 配置用户权限

为避免每次使用 sudo,可将当前用户加入 docker 组:

sudo usermod -aG docker $USER

3.3 服务管理

Docker 是 C/S 架构,服务管理命令:

# 使用 systemd 的系统
sudo systemctl start docker   # 启动
sudo systemctl enable docker  # 设置开机自启
sudo systemctl status docker # 查看状态

四、Docker 快速体验

4.1 运行第一个容器

执行以下命令运行 hello-world 示例:

docker run hello-world

这个命令会自动完成以下操作:

  1. 检查本地是否有 hello-world 镜像
  2. 若无则从官方镜像仓库拉取
  3. 创建并运行容器
  4. 输出欢迎信息后容器自动退出

4.2 常用容器操作命令

docker ps           # 查看运行中的容器
docker ps -a        # 查看所有容器(包括已停止的)
docker stop <ID>    # 停止容器
docker rm <ID>      # 删除容器
docker logs <ID>    # 查看容器日志

五、构建自定义镜像

5.1 编写 Dockerfile

以 Node.js 应用为例,创建 Dockerfile:

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

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

# 复制package文件
COPY package*.json ./

# 安装依赖
RUN npm install

# 复制应用代码
COPY . .

# 暴露端口
EXPOSE 8080

# 定义启动命令
CMD ["node", "server.js"]

5.2 构建镜像

在 Dockerfile 所在目录执行:

docker build -t my-node-app .

5.3 运行自定义镜像

docker run -p 4000:8080 -d my-node-app

参数说明:

  • -p 4000:8080:将容器8080端口映射到主机4000端口
  • -d:后台运行模式

六、Docker 实用技巧

6.1 数据持久化

容器默认使用临时存储,重要数据应使用卷(Volume):

# 创建命名卷
docker volume create my-vol

# 使用卷运行容器
docker run -v my-vol:/data my-image

6.2 容器网络

Docker 提供多种网络模式:

  • bridge:默认网络模式,容器通过虚拟网桥连接
  • host:容器直接使用主机网络
  • none:禁用网络

创建自定义网络:

docker network create my-net
docker run --network=my-net my-image

6.3 多阶段构建

优化镜像大小的技巧:

# 构建阶段
FROM node:14 AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run build

# 运行阶段
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html

七、最佳实践建议

  1. 保持镜像精简:移除不必要的依赖和文件
  2. 使用.dockerignore:排除不需要的文件,类似.gitignore
  3. 一个容器一个进程:遵循单一职责原则
  4. 合理使用标签:为镜像打上有意义的版本标签
  5. 安全性考虑:避免使用root用户运行容器进程

结语

通过本文的学习,你应该已经掌握了 Docker 的基本概念和使用方法。Docker 技术正在快速发展,建议持续关注新特性和最佳实践。在实际工作中,可以结合 Kubernetes 等编排工具,构建更强大的容器化应用平台。

linux-tutorial :penguin: Linux教程,主要内容:Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本 linux-tutorial 项目地址: https://gitcode.com/gh_mirrors/lin/linux-tutorial

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

资源下载链接为: https://pan.quark.cn/s/502b0f9d0e26 在进行STM32F103C8T6与HC - 06蓝牙模块、PC端以及ROS(机器人操作系统)的串口通信测试时,我们编写了以下程序。 硬件连接 将STM32F103C8T6的USART1的TX(PA9)引脚与HC - 06的RX引脚相连,同时将USART1的RX(PA10)引脚与HC - 06的TX引脚相连,以实现两者之间的串口通信。 另外,通过串口转USB模块(如CH340等)将STM32F103C8T6与PC端连接起来,方便在PC端进行通信数据的发送和接收。 程序功能 初始化USART1,设置波特率为9600,用于与HC - 06通信。同时,初始化USART2(连接串口转USB模块),波特率同样设置为9600,用于与PC端通信。 在主循环中,STM32F103C8T6不断检测USART1和USART2是否有数据接收。当从USART1(HC - 06)接收到数据时,将数据暂存到一个缓冲区中,然后通过USART2发送给PC端。反之,当从USART2(PC端)接收到数据时,也暂存到缓冲区,再通过USART1发送给HC - 06。这样就实现了STM32F103C8T6作为中间节点,将HC - 06与PC端的数据进行转发。 硬件连接 HC - 06蓝牙模块通过串口与STM32F103C8T6连接,如上所述。 程序功能(蓝牙通信部分) HC - 06在默认状态下会自动进入配对模式,等待与手机或其他蓝牙设备配对。当配对成功后,它会将从蓝牙设备接收到的数据通过串口发送给STM32F103C8T6。同时,它也会将STM32F103C8T6发送过来的数据转发给已配对的蓝牙设备。在本测试程序中,主要关注其与STM32F103C8T6之间的串口通信功能,确保数据能够正确地在两者之间传输。 硬件连接 通过串口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

葛依励Kenway

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值