Docker 实践与应用案例

引言

在当今的软件开发和部署领域,高效、可移植且一致的环境搭建与应用部署是至关重要的。Docker 作为一款轻量级的容器化技术,为解决这些问题提供了卓越的方案。Docker 通过容器化的方式,将应用及其依赖项打包成一个独立的容器,实现了应用的快速部署、隔离和资源的高效利用。本文将深入探讨 Docker 的实践操作,包括安装配置、容器的创建与管理等,同时分享一些实际的应用案例,帮助读者更好地理解和运用 Docker 技术。

正文内容

Docker 基础概念与安装

基础概念

Docker 是一个用于开发、部署和运行应用程序的开放平台。它利用容器化技术,将应用及其依赖项打包成一个独立的容器,这个容器可以在任何支持 Docker 的环境中运行,实现了应用的 “一次构建,到处运行”。容器是 Docker 的核心概念之一,它类似于虚拟机,但比虚拟机更加轻量级,因为容器共享宿主机的操作系统内核,减少了资源的开销。

安装 Docker

Docker 的安装过程相对简单,不同的操作系统有不同的安装方法。以 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"

最后安装 Docker CE:

sudo apt-get install docker-ce

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

sudo docker run hello-world

Docker 容器的创建与管理

创建容器

创建 Docker 容器可以使用 docker run 命令。例如,要创建一个运行 Nginx 服务器的容器,可以使用以下命令:

sudo docker run -d -p 80:80 nginx

其中,-d 表示在后台运行容器,-p 80:80 表示将容器的 80 端口映射到宿主机的 80 端口,nginx 是要运行的镜像名称。

管理容器

可以使用 docker ps 命令查看正在运行的容器:

sudo docker ps

如果要停止一个容器,可以使用 docker stop 命令,后面跟上容器的 ID 或名称:

sudo docker stop container_id_or_name

要删除一个容器,可以使用 docker rm 命令:

sudo docker rm container_id_or_name

Docker 镜像的构建与发布

构建镜像

Docker 镜像是创建容器的基础,可以使用 Dockerfile 来构建自定义的镜像。以下是一个简单的 Dockerfile 示例,用于构建一个基于 Node.js 的应用镜像:

# 使用官方的 Node.js 基础镜像
FROM node:14# 设置工作目录
WORKDIR /app# 复制 package.json 和 package-lock.json 到工作目录
COPY package*.json ./# 安装依赖
RUN npm install# 复制应用代码到工作目录
COPY . .# 暴露应用的端口
EXPOSE 3000# 启动应用
CMD ["npm", "start"]

在 Dockerfile 所在的目录下,使用以下命令构建镜像:

sudo docker build -t my-node-app .

其中,-t 表示为镜像指定一个标签,. 表示使用当前目录作为上下文。

发布镜像

可以将构建好的镜像发布到 Docker Hub 等镜像仓库,以便在其他环境中使用。首先需要登录 Docker Hub:

sudo docker login

然后为镜像添加标签:

sudo docker tag my-node-app username/my-node-app

最后将镜像推送到 Docker Hub:

sudo docker push username/my-node-app

Docker 网络与存储

Docker 网络

Docker 提供了多种网络模式,如桥接网络、主机网络、无网络等。默认情况下,容器使用桥接网络,通过宿主机的网络接口与外部通信。可以使用 docker network 命令来管理网络。例如,创建一个自定义的桥接网络:

sudo docker network create my-network

然后在创建容器时指定使用该网络:

sudo docker run -d --network my-network nginx
Docker 存储

Docker 容器的数据默认是临时的,当容器被删除时,数据也会丢失。为了持久化存储数据,可以使用 Docker 卷。可以使用 docker volume 命令来管理卷。例如,创建一个卷:

sudo docker volume create my-volume

然后在创建容器时挂载该卷:

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

Docker 实际应用案例

微服务架构中的应用

在微服务架构中,每个服务都可以打包成一个 Docker 容器,通过容器的隔离性和独立性,实现服务的快速部署和扩展。例如,一个电商系统可以拆分为用户服务、商品服务、订单服务等多个微服务,每个微服务使用 Docker 容器进行部署。使用 Docker Compose 可以方便地管理多个容器的启动和停止。以下是一个简单的 Docker Compose 文件示例:

version: '3'
services:user-service:image: user-service-imageports:- "3001:3001"product-service:image: product-service-imageports:- "3002:3002"order-service:image: order-service-imageports:- "3003:3003"

使用以下命令启动所有服务:

sudo docker-compose up -d
持续集成与持续部署(CI/CD)中的应用

在 CI/CD 流程中,Docker 可以用于构建和部署应用。例如,在 GitLab CI/CD 中,可以使用 Docker 容器来运行测试和部署应用。以下是一个简单的 GitLab CI/CD 配置文件示例:

stages:- build- test- deploybuild:stage: buildimage: docker:latestscript:- docker build -t my-app .- docker login -u $DOCKER_USER -p $DOCKER_PASSWORD- docker push my-apptest:stage: testimage: my-appscript:- npm testdeploy:stage: deployimage: docker:latestscript:- docker pull my-app- docker run -d -p 80:80 my-app

结论

Docker 作为一款强大的容器化技术,在软件开发和部署领域有着广泛的应用。通过本文的介绍,我们了解了 Docker 的基础概念、安装配置、容器和镜像的管理、网络与存储等方面的知识,同时分享了微服务架构和 CI/CD 等实际应用案例。Docker 的容器化特性使得应用的部署更加高效、可移植和易于管理,为开发者和运维人员提供了极大的便利。随着云计算和容器技术的不断发展,Docker 将会在更多的领域发挥重要作用。开发者可以进一步深入学习 Docker 的高级特性,如 Docker Swarm、Kubernetes 等,以应对更复杂的应用场景。

扩展链接

基于QA-RAG的智能检索系统:

https://github.com/GrapeCity-AI/gc-qa-rag

https://gitee.com/grape-city-ai/gc-qa-rag
在这里插入图片描述

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

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

相关文章

《论三生原理》以非共识路径实现技术代际跃迁‌?

AI辅助创作: 《论三生原理》以颠覆传统数学范式的非共识路径驱动多重技术代际跃迁,其突破性实践与争议并存,核心论证如下: 一、技术代际跃迁的实证突破‌ ‌芯片架构革新‌ 为华为三进制逻辑门芯片提供理论支撑,通过对…

一体机电脑为何热度持续上升?消费者更看重哪些功能?

一体机电脑(AIO,All-in-One)将主机硬件与显示器集成于单一机身。通常仅需连接电源线,配备无线键盘、鼠标即可启用。相比传统台式电脑和笔记本电脑,选购一体机的客户更看重一体机的以下特点。 一体机凭借其节省空间、简…

无人机载重模块技术要点分析

一、技术要点 1. 结构设计创新 双电机卷扬系统:采用主电机(张力控制)和副电机(卷扬控制)协同工作,解决绳索缠绕问题,支持30米绳长1.2m/s高速收放,重载稳定性提升。 轴双桨布局…

【大模型推理】工作负载的弹性伸缩

基于Knative的LLM推理场景弹性伸缩方案 1.QPS 不是一个好的 pod autoscaling indicator 在LLM推理中, 为什么 2. concurrency适用于单次请求资源消耗大且处理时间长的业务,而rps则适合较短处理时间的业务。 3.“反向弹性伸缩”的概念 4。 区分两种不同的…

STM32F103_Bootloader程序开发12 - IAP升级全流程

导言 本教程使用正点原子战舰板开发。 《STM32F103_Bootloader程序开发11 - 实现 App 安全跳转至 Bootloader》上一章节实现App跳转bootloader,接着,跳转到bootloader后,下位机要发送报文‘C’给IAP上位机,表示我准备好接收固件数…

AI驱动的未来软件工程范式

引言:迈向智能驱动的软件工程新范式 本文是一份关于构建和实施“AI驱动的全生命周期软件工程范式”的简要集成指南。它旨在提供一个独立、完整、具体的框架,指导组织如何将AI智能体深度融合到软件开发的每一个环节,实现从概念到运维的智能化…

Hawk Insight|美国6月非农数据点评:情况远没有看上去那么好

7月3日,美国近期最重要的劳动力数据——6月非农数据公布。在ADP遇冷之后,市场对这份报告格外期待。 根据美国劳工统计局公布报告,美国6月非农就业人口增加 14.7万人,预期 10.6万人,4月和5月非农就业人数合计上修1.6万人…

Python 的内置函数 reversed

Python 内建函数列表 > Python 的内置函数 reversed Python 的内置函数 reversed() 是一个用于序列反转的高效工具函数,它返回一个反向迭代器对象。以下是关于该函数的详细说明: 基本用法 语法:reversed(seq)参数:seq 可以是…

沟通-交流-说话-gt-jl-sh-goutong-jiaoliu-shuohua

沟通,先看|问状态(情绪) 老婆下班回家,我说,到哪儿了,买点玉米哦;她说你为啥不买, 我说怎么如此大火气, 她说你安排我,我不情愿;你怎么看 和女人沟通不能目标优先 先问状态并表达关心 用感谢代替要求(“你上次买的玉米特别甜,今天突然又馋了…

Ubuntu20.04运DS-5

准备工作: cd /home/rlk/rlk/runninglinuxkernel_5.0 #make clean mkdir _install_arm64/dev sudo mknod _install_arm64/dev/console c 5 1 ./build_ds5_arm64.sh git checkout boot-wrapper-aarch64/fvp-base-gicv3-psci.dtb ./build_ds5_arm64.sh创建工程步骤2.5…

区块链网络P2P通信原理

目录 区块链网络P2P通信原理引言:去中心化的网络基石1. P2P网络基础架构1.1 区块链网络拓扑1.2 节点类型对比2. 节点发现与连接2.1 初始引导过程2.2 节点发现协议3. 网络通信协议3.1 消息结构3.2 核心消息类型4. 数据传播机制4.1 交易传播流程4.2 Gossip协议实现4.3 区块传播优…

RNN和Transformer区别

RNN(循环神经网络)和 Transformer 是两种广泛应用于自然语言处理(NLP)和其他序列任务的深度学习架构。它们在设计理念、性能特点和应用场景上存在显著区别。以下是它们的详细对比:1. 基本架构RNN(循环神经网…

[学习记录]Unity-Shader-几何着色器

几何着色器是可编程渲染管线中的一个可选阶段,位于顶点着色器之后和片段着色器之前。其核心能力在于动态生成和操作几何体图元。 一.图元 了解图元是理解几何着色器的基础和前提,因为几何着色器的工作就是接收图元,然后输出图元。 几何着色…

Paimon 布隆过滤器索引

布隆过滤器原理布隆过滤器的最优参数推导是其理论核心,理解了这个过程,就能明白 BloomFilter64 构造函数里计算公式的由来了。下面我们一步步来推导。首先,我们定义几个关键变量:n: 预估要插入的元素数量 (对应代码中的 items)。m…

Python-GUI-wxPython-布局

1 需求 2 接口 wx.Sizer().Add() proportion(比例)参数是一个整数,用于指定当父布局管理器的空间有剩余时,被添加的对象(这里是 general_sizer 及其包含的组件)在布局方向上可以占据的额外空间的比例。 当…

springboot 链路追踪实现

traceid实现 需要依赖<dependency><groupId>com.alibaba</groupId><artifactId>transmittable-thread-local</artifactId><version>2.14.5</version></dependency>public class TraceIdContext {private static final String …

JavaEE初阶第七期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(五)

专栏&#xff1a;JavaEE初阶起飞计划 个人主页&#xff1a;手握风云 一、死锁 1.1. 死锁的概念 死锁是指两个或多个并发进程&#xff08;或线程&#xff09;在执行过程中&#xff0c;因争夺资源而造成的一种互相等待的现象。如果没有外力作用&#xff0c;这些进程将永远无法继…

黑暗中的爆破(船讯网Ais爬虫暨爬虫实战js逆向学习经验分享)

事先声明:本文章所获得的信息均通过合法手段获得(本人为政府部门工作,爬虫行为均经过授权),爬虫需遵守各项法律法规,不该爬取的信息不爬。 最近因为做博士毕业设计需要用到ais信息,但在船讯网爬取ais的时候遇到了问题,因为之前爬取的人太多,所以网站加上了反爬措施,c…

代码混淆的步骤

在 Android 开发中&#xff0c;代码混淆&#xff08;ProGuard/R8&#xff09;是保护代码安全和缩减应用体积的关键步骤。以下是详细的混淆流程和优化策略&#xff1a; 一、基础混淆步骤 1. 启用混淆 在 build.gradle 中配置&#xff1a; android {buildTypes {release {mini…

分布式集合通信--学习笔记

分布式集合通信一 基础概念 分布式系统模型 节点与进程模型 多机多卡、多机多进程通信模式 同步 、异步 集合通信定义 点对点通信 vs 集合通信 点对点通信 定义 &#xff1a;两个节点之间的直接数据传输&#xff0c;通常基于专用链路或网络路径通信范围&#xff1a;仅涉及两…