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

Docker基础实践与应用举例

Docker 是一个轻量级容器化平台,通过将应用及其依赖打包到容器中,实现快速部署和环境一致性。以下是 Docker 的实践与应用场景举例,结合具体操作步骤:


一、基础实践

1. 快速启动一个容器
# 运行一个Nginx容器,映射宿主机80端口到容器80端口
docker run -d -p 80:80 --name my-nginx nginx
  • -d: 后台运行
  • -p: 端口映射
  • --name: 容器名称
2. 查看容器状态
docker ps -a  # 查看所有容器
docker logs my-nginx  # 查看容器日志
3. 进入容器内部
docker exec -it my-nginx /bin/bash

二、应用场景举例

1. Web 服务部署

场景:部署一个 Python Flask 应用
步骤

  1. 编写 Dockerfile
    FROM python:3.9-slim
    WORKDIR /app
    COPY requirements.txt .
    RUN pip install -r requirements.txt
    COPY . .
    CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
    
  2. 构建镜像:
    docker build -t my-flask-app .
    
  3. 运行容器:
    docker run -d -p 5000:5000 my-flask-app
    

2. 数据库容器化

场景:运行 MySQL 数据库并持久化数据

# 创建数据卷
docker volume create mysql_data# 启动MySQL容器
docker run -d \--name mysql-db \-e MYSQL_ROOT_PASSWORD=my-secret-pw \-v mysql_data:/var/lib/mysql \-p 3306:3306 \mysql:8.0
  • -v: 将容器内的 /var/lib/mysql 挂载到宿主机卷 mysql_data,实现数据持久化。

3. 多容器协作(Docker Compose)

场景:部署一个包含 Web 应用、Redis 缓存的完整服务

  1. 编写 docker-compose.yml
    version: '3'
    services:web:build: .ports:- "5000:5000"depends_on:- redisredis:image: redis:alpinevolumes:- redis_data:/data
    volumes:redis_data:
    
  2. 启动服务:
    docker-compose up -d
    

4. 持续集成(CI/CD)

场景:在 GitLab CI 中运行测试
示例 .gitlab-ci.yml

test:image: node:16script:- npm install- npm test

三、进阶实践

1. 自定义网络
# 创建自定义网络
docker network create my-network# 将容器连接到网络
docker run -d --network my-network --name app1 my-app
docker run -d --network my-network --name app2 my-app
  • 同一网络内的容器可通过容器名直接通信(如 app1 可直接访问 app2:8080)。
2. 镜像优化
  • 使用多阶段构建减少镜像体积:
    # 构建阶段
    FROM golang:1.18 AS builder
    WORKDIR /app
    COPY . .
    RUN go build -o myapp# 运行阶段
    FROM alpine:latest
    COPY --from=builder /app/myapp /
    CMD ["/myapp"]
    

四、常见问题解决

  1. 容器时区问题
    Dockerfile 中设置时区:
    RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
  2. 容器内存限制
    docker run -m 512m --memory-swap 1g my-app
    

五、应用场景总结

场景工具/技术核心优势
微服务部署Docker Compose环境隔离,一键启动
开发环境统一Docker镜像消除“在我机器上能运行”问题
快速原型验证预构建镜像(如Jupyter)秒级启动,无需安装依赖
蓝绿部署Docker Swarm/K8s无缝切换,零停机更新

通过 Docker 可以实现:

  • 环境一致性:开发、测试、生产环境完全一致
  • 快速部署:镜像秒级启动,无需配置依赖
  • 资源隔离:每个容器独立运行,避免依赖冲突
  • 弹性伸缩:结合 Kubernetes 实现自动扩缩容

相关文章:

Docker基础实践与应用举例

Docker 是一个轻量级容器化平台,通过将应用及其依赖打包到容器中,实现快速部署和环境一致性。以下是 Docker 的实践与应用场景举例,结合具体操作步骤: 一、基础实践 1. 快速启动一个容器 # 运行一个Nginx容器,映射宿…...

计算机毕业设计SpringBoot+Vue.js新闻推荐系统(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

Android 布局系列(一):LinearLayout 使用指南

引言 在 Android 开发中,布局是每个应用的基础,而 LinearLayout 无疑是最常见、最简单的布局之一。它允许我们将多个视图按顺序排列,可以选择水平方向(horizontal)或垂直方向(vertical)。 Line…...

蓝桥杯备赛-精卫填海-DP

精卫终于快把东海填平了!只剩下了最后的一小片区域了。同时,西山上的木石也已经不多了。精卫能把东海填平吗? 事实上,东海未填平的区域还需要至少体积为 v 的木石才可以填平,而西山上的木石还剩下 n 块,每块…...

git中,如何查看具体单个文件的log

在 Git 中,可以使用多种方式查看单个文件的提交日志(Log),以下详细介绍不同场景下的查看方法: 目录 一、基本命令查看文件的完整提交日志 二、查看文件提交日志并显示差异内容 三、限制显示的提交日志数量 四、按…...

Winform工具箱、属性、事件

工具箱 Button------按钮:用户可以点击的按钮控件。 CheckBox------复选框:允许用户选择或取消选择选项的复选框。 CheckedListBox:结合了ListBox和CheckBox的功能,允许多项选择。 ColorDialog------颜色选择对话框:用…...

科普:HTTP端口80和HTTPS端口443

你会发现,有的网址不带端口号,怎么回事? HTTP协议默认端口:HTTP协议的默认端口是80。当用户在浏览器中输入一个没有指定端口的以http://开头的网址时,浏览器会自动使用80端口与服务器建立连接,进行超文本数…...

数据分析和数据挖掘的工作内容

基本的数据分析工作通常包含以下几个方面的内容: 确定目标(输入):理解业务,确定指标口径。获取数据:数据仓库(SQL提数)、电子表格、三方接口、网络爬虫、开放数据集等。清洗数据&am…...

Android级联选择器,下拉菜单

近期android开发,遇到的需求,分享二个android可能用到的小组件 下拉选择器:它的实现,主要是需要监听它依附的组件当前距离屏幕顶端的位置。 在显示下拉菜单中,如果需要点击上面有响应。可通过activity拿到decorview(ac…...

【每日八股】MySQL篇(一):概述

关系的三个范式是什么? 第一范式(1NF):用来确保每列的原子性,要求每列都是不可再分的最小数据单元。 概括:表中的每一列都是不可分割的最小原子值,且每一行都是唯一的。 第二范式&#xff08…...

大白话Vue2和Vue3双向数据绑定的原理

大白话Vue2和Vue3双向数据绑定的原理 下面用大白话来给你详细介绍一下Vue2和Vue3双向数据绑定的原理: Vue2双向数据绑定原理 Vue2的双向数据绑定主要是通过Object.defineProperty()这个方法来实现的,就好像有一个小管家在帮你看着数据和页面。 数据劫…...

Remainder Problem CF1207F

题目:题目链接 题目大意 题目描述 给你一个长度为 500000 的序列,初值为 0 ,你要完成 q 次操作,操作有如下两种: 1 x y : 将下标为 x 的位置的值加上 y2 x y : 询问所有下标模 x 的结果为 y 的位置的值之和 输入格…...

SpringBoot之自定义简单的注解和AOP

1.引入依赖 <!-- AOP依赖--> <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.8</version> </dependency>2.自定义一个注解 package com.example.springbootdemo3.an…...

2.2 添加注释

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 注释是为了方便理解代码含义而添加的简短的解释性说明。在编译时&#xff0c;编辑器不会将注释加入最终生成的文件中&#xff0c;不…...

自由学习记录(38)

python语法 def def print_receipt (store_name, items, total_price, cashier"Self-Checkout", payment_method"Credit Card"): Python 的 函数定义 语法 def print_receipt(...) → 定义了一个名为 print_receipt 的函数。store_name, items, total_…...

【SQL实验】触发器

下载素材文件”tsgl”、“成绩管理”,将tsgl.bak和成绩管理.bak数据库还原到库中【导入操作在之前的文章中详细讲过】 触发器 1、为图书表设置更新触发器&#xff0c;根据总编号来更新书名、作者、出版社、分类号和单价(根据总编号找到相应记录&#xff0c;然后更新书名、作者…...

C语言:二维数组在内存中是怎么存储的

目录 1. 二维数组的定义&#xff1a; 2. 行主序存储&#xff1a; 具体内存排列&#xff1a; 3. 如何通过指针访问数据&#xff1a; 4. 总结&#xff1a; 在 C 语言中&#xff0c;二维数组是按 行主序&#xff08;row-major order&#xff09; 存储的。也就是说&#xff0c…...

CPU多级缓存机制

目录 一、前置知识 ---- CPU的核心 1.1. 单核与多核CPU 二、CPU多级缓存机制 三. 缓存的基本结构/缓存的存储结构 四、CPU缓存的运作流程/工作原理 五、CPU多级缓存机制的工作原理【简化版】 5.1. 缓存访问的过程 (5.1.1) L1缓存&#xff08;一级缓存&#xff09;访问 …...

Ansible剧本-playbook

Ansible剧本-playbook 1 playbook基础1.1 简介1.2 playbook的组成结构Task 任务列表任务报错&#xff0c;如何继续执行响应事件Handler 1.3 常用选项执行playbookplaybook查询帮助信息校验playbook语法测试playbook能否正常运行 2 变量 的定义方式2.1 定义规则2.2 vars 变量2.3…...

神经网络八股(3)

1.什么是梯度消失和梯度爆炸 梯度消失是指梯度在反向传播的过程中逐渐变小&#xff0c;最终趋近于零&#xff0c;这会导致靠前层的神经网络层权重参数更新缓慢&#xff0c;甚至不更新&#xff0c;学习不到有用的特征。 梯度爆炸是指梯度在方向传播过程中逐渐变大&#xff0c;…...

SmartMediakit之音视频直播技术的极致体验与广泛应用

引言 在数字化时代&#xff0c;音视频直播技术已经深入到各个行业和领域&#xff0c;成为信息传递和交流的重要手段。视沃科技自2015年成立以来&#xff0c;一直致力于为传统行业提供极致体验的音视频直播技术解决方案&#xff0c;其旗下的大牛直播SDK凭借强大的功能和卓越的性…...

【R包】tidyplots----取代ggplot2的科研绘图利器

文章目录 介绍安装Usage文档参考 介绍 tidyplots----取代ggplot2的科研绘图利器。tidyplots的目标是简化为科学论文准备出版的情节的创建。它允许使用一致和直观的语法逐渐添加&#xff0c;删除和调整情节组件。 安装 You can install the released version of tidyplots fro…...

DeepSeek 15天指导手册——从入门到精通 PDF(附下载)

DeepSeek使用教程系列--DeepSeek 15天指导手册——从入门到精通pdf下载&#xff1a; https://pan.baidu.com/s/1PrIo0Xo0h5s6Plcc_smS8w?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/2e8de75027d3 《DeepSeek 15天指导手册——从入门到精通》以系统化学习路径为核心&…...

C++知识点总结与复习

c中常见的关键字(面试题中经常出现) const 总结常见用法&#xff1a; const int a; //定义了常量整形的变量 a; 常量表示不可修改&#xff0c;定义的时候必须初始化。除此之外&#xff0c;和 int a&#xff1b;使用一样。 const int * p;//定义了指向常量整形变量的指针。…...

微信小程序实现拉卡拉支付

功能需求&#xff1a;拉卡拉支付&#xff08;通过跳转拉卡拉平台进行支付&#xff09;&#xff0c;他人支付&#xff08;通过链接进行平台跳转支付&#xff09; 1.支付操作 //支付 const onCanStartPay async (obj) > {uni.showLoading({mask: true})// 支付接口获取需要传…...

全面汇总windows进程通信(二)

在Windows操作系统下,实现进程间通信(IPC, Inter-Process Communication)有几种常见的方法,包括使用管道(Pipe)、共享内存(Shared Memory)、消息队列(Message Queue)、命名管道(Named Pipe)、套接字(Socket)等。本文介绍如下几种: 信号量(Semaphore)和互斥量(…...

Unity 第三人称人物切动画时人物莫名旋转

前提: 使用Starter Asset包中的第三人称插件包. 在给3D角色的动画器增加新动画时, 发现进入新动画会让角色莫名转动. 观察后发现是动画强行将朝向掰"正", 人物动画在进行时朝向会一直变化, 这使得动作非常的怪异. 对系动画进行以下处理后, 将可以解决这种不自然: 选…...

启动Redis报错记录

突然启动Redis就报了个错&#xff1a;‘Could not create server TCP listening socket 127.0.0.1:6379: bind: 操作成功完成。‘ 查了下解决方案&#xff0c;应该是6379端口已绑定&#xff0c;服务没有关闭。 需要输入命令redis-cli 再输入shutdown 但又出现了新的问题&…...

vue2响应式数据原理

1. 核心原理 Vue 2 的响应式系统基于 Object.defineProperty&#xff0c;通过 依赖收集 和 派发更新 来实现数据的响应式 依赖收集&#xff1a;在读取数据时&#xff0c;记录哪些函数&#xff08;或组件&#xff09;依赖了该数据。派发更新&#xff1a;在修改数据时&#xff…...

OpenBMC:BmcWeb实例化App

BmcWeb是OpenBMC的一个核心模块,对外负责响应Redfish请求,并且由于OpenBMC的Web使用的Redfish api,所以BmcWeb也是Web的后台。 1.main函数 //src\webserver_main.cpp #include "webserver_run.hpp"int main(int /*argc*/, char** /*argv*/) noexcept(false) {re…...