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:
          - redis
      redis:
        image: redis:alpine
        volumes:
          - redis_data:/data
    volumes:
      redis_data:
    
  2. 启动服务:
    docker-compose up -d
    

4. 持续集成(CI/CD)

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

test:
  image: node:16
  script:
    - 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 实现自动扩缩容

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Go | 从0实现简单分布式缓存】-3:分布式节点通信

本文目录 一、通信流程二、peers.go三、http.go四、geecache.go五、测试代码 本文为极客兔兔动手写分布式缓存GeeCache学习笔记。 一、通信流程 在前面一节中,已经为 HTTPPool 实现了服务端功能,通信不仅需要服务端还需要客户端,因此本节来…

Win32/ C++ 简易对话框封装框架(多语言, 通知栏菜单, 拖拽文件处理)

Win32 简易对话框封装简易框架示例 1. 菜单操作: 多语言 2. 通知栏图标菜单 3. 其他操作: 接受拖拽文件等等 CDialogFrame.h #pragma once #include "CWindow/CDialogBase.h" #include "CNSFHeader.h" #include "Win32Utils/CBytesUtils.h" …

如何在 Linux 上安装和配置 Zsh

文章目录 如何在 Linux 上安装和配置 Zsh1. 安装 Zsh1.1 在 Ubuntu/Debian 上安装1.2 在 CentOS/RHEL/Fedora 上安装1.3 在 Arch Linux 上安装1.4 验证 Zsh 安装 2. 设置 Zsh 为默认 Shell2.1 验证默认 shell 3. 配置 Zsh3.1 使用 Oh My Zsh3.1.1 安装 Oh My Zsh3.1.2 启用插件…

Ubuntu搭建esp32环境 配置打开AT指令集 websocket功能

1,搭建前提 环境搭建参考乐鑫官网给的本地编译 ESP-AT 工程方法 因为公司电脑和网络的特殊性,不能正确解析域名(仅在浏览器上可以访问) ,所以这边访问的时候改成了ssh 未了避免使用外网困难的问题,这里用…

网络安全第三次练习

一、实验拓扑 二、实验要求 配置真实DNS服务信息,创建虚拟服务,配置DNS透明代理功能 三、需求分析 1.创建用户并配置认证策略 2.安全策略划分接口 3.ip与策略配置 四、实验步骤 1.划分安全策略接口 2.创建用户并进行策略认证 3.配置安全策略 4.NAT配…

Web自动化之Selenium下Chrome与Edge的Webdriver常用Options参数

目录 引言 说明 Add_argument() 添加方式 常用参数 Add_experimental_option() 添加方式 常用方法 任务结束后仍然保持浏览器打开 禁用“Chrome 正受到自动测试软件的控制”提示 设置下载路径 禁用弹窗拦截 禁用图片加载 禁用 JavaScript 注意 引言 …

【无标题】网络安全公钥密码体制

第一节 网络安全 概述 一、基本概念 网络安全通信所需要的基本属性“ 机密性;消息完整性;可访问性与可用性;身份认证。 二、网络安全威胁 窃听;插入;假冒;劫持;拒绝服务Dos和分布式拒绝服务…

2024年国赛高教杯数学建模D题反潜航空深弹命中概率问题解题全过程文档及程序

2024年国赛高教杯数学建模 D题 反潜航空深弹命中概率问题 原题再现 应用深水炸弹(简称深弹)反潜,曾是二战时期反潜的重要手段,而随着现代军事技术的发展,鱼雷已成为现代反潜作战的主要武器。但是,在海峡或…

在vscode中编译运行c语言文件,配置并运行OpenMP多线程并行程序设计

1.下载安装vscode Visual Studio Code - Code Editing. Redefined 2.安装vscode扩展 打开vscode,按ctrl+shift+x,打开扩展,搜索c/c++,下载相应的扩展 3.下载MinGW-w64 MinGW-w64 提供了 GNU 编译器集合,可以编译c/c++文件 这里下载见我的资源,可直接下载 把压缩包解压…

PyCharm Professional 2025 安装配置全流程指南(Windows平台)

一、软件定位与核心功能 PyCharm 2025 是 JetBrains 推出的智能 Python IDE,新增深度学习框架自动补全、实时性能热力图等功能1。相较于社区版,专业版支持: Web开发(Django/Flask)数据库工具(PostgreSQL/…

从两地三中心到多地多中心,OceanBase如何实现金融级高可用

“两地三中心”已成为金融领域基准的容灾部署模式。本文将简要阐述金融行业容灾架构中“两地三中心”的具体要求和部署,并进一步探讨OceanBase在实现“两地三中心”标准后,再至“多地多中心”部署中所展现的独特优势与特点。 商业银行的容灾要求 《商业…

九、数据治理架构流程

一、总体结构 《数据治理架构流程图》(Data Governance Architecture Flowchart) 水平结构:流程图采用水平组织,显示从数据源到数据应用的进程。 垂直结构:每个水平部分进一步划分为垂直列,代表数据治理的…

6.将cr打包成网络服务|使用postman进行测试|编写oj_server的服务路由功能(C++)

将cr打包成网络服务 compile_server.cc #include "compile_run.hpp" #include "../comm/httplib.h"using namespace ns_compile_and_run; using namespace httplib;//编译服务随时可能被多个人请求,必须保证传递上来的code,形成源…

js前端数据加密 CryptoJS库加密 黑盒情况下寻找web的加密算法 代码混淆

前言 前端的数据加密是对用户的输入的一个常见的加密方法 还有的就是防止我们的sql注入 如 idMQ 这个其实解密出来就是 id 1 所以注入的思路就是 把 1和payload 一起加密然后 再进行注入 客户端的加密 > 数据加密传输 > 服务端解密 > 服务端的处理 传输的…

window平台上qtcreator上使用opencv报错

平台:win11 随便在网上下载一个别人编译好的opencv,发现运行报错 发现此次下载的opencv,别人在编译时选用的mingw版本应该和我电脑目前安装的mingw的版本不太一致 右键桌面的qtcreator图标,进入Tools目录,可以看到mingw的版本是…

Android之APP更新(通过接口更新)

文章目录 前言一、效果图二、实现步骤1.AndroidManifest权限申请2.activity实现3.有版本更新弹框UpdateappUtilDialog4.下载弹框DownloadAppUtils5.弹框背景图 总结 前言 对于做Android的朋友来说,APP更新功能再常见不过了,因为平台更新审核时间较长&am…

数字信任的底层逻辑:密码学核心技术与现实应用

安全和密码学 --The Missing Semester of Your CS Education 目录 熵与密码强度密码散列函数密钥体系 3.1 对称加密 3.2 非对称加密信任模型对比典型应用案例安全实践建议扩展练习杂项 密码学是构建数字信任的基石。 本文浅析密码学在现实工具中的应用,涵盖 1&…

达梦有没有类似oerr的功能

在oracle 23ai的sqlplus中&#xff0c;直接看异常信息说明&#xff1a; 达梦没有此功能&#xff0c;但是可以造一个 cd /home/dmdba cat >err.sql<<eof set echo off set ver off set timing off set lineshow off set feedback off select * from V\$ERR_INFO wher…

linux--多进程开发(5)--进程

进程间通讯概念 每两个进程之间都是独立的资源分配单元&#xff0c;不同进程之间不能直接访问另一个进程的资源。 但不同的进程需要进行信息的交互和状态的传递等&#xff0c;因此需要进程间通信&#xff08;IPC,inter processes cimmunication) 进程通信的目的&#xff1a; …

(二)趣学设计模式 之 工厂方法模式!

目录 一、 啥是工厂方法模式&#xff1f;二、 为什么要用工厂方法模式&#xff1f;三、 工厂方法模式怎么实现&#xff1f;四、 工厂方法模式的应用场景五、 工厂方法模式的优点和缺点六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博…