容器化技术:Docker入门与实战

目录

      • 一、什么是Docker?
        • 1.1 Docker的核心概念
      • 二、Docker的安装与环境配置
        • 2.1 安装Docker
          • 在Linux(如Ubuntu)上安装Docker
          • 在Windows/macOS上安装Docker
        • 2.2 验证Docker安装
      • 三、Docker的基本使用
        • 3.1 拉取并运行镜像
        • 3.2 常用Docker命令
        • 3.3 Docker的工作流程
      • 四、Dockerfile的构建与解释
        • 4.1 构建Docker镜像
        • 4.2 运行Docker容器
      • 五、Docker Compose:管理多容器应用
        • 5.1 Docker Compose文件示例
        • 5.2 启动多容器应用
      • 六、Docker实战项目:构建一个简单的Web应用
        • 6.1 创建Flask应用
        • 6.2 编写requirements.txt
        • 6.3 构建镜像并运行容器
      • 七、总结

一、什么是Docker?

Docker是一个开源的容器化平台,它允许开发者将应用程序及其依赖打包到一个轻量级、可移植的容器中。Docker解决了传统应用在不同环境中运行的不一致性问题,确保了从开发环境到生产环境的无缝迁移。

1.1 Docker的核心概念
  1. 容器(Container):容器是一个轻量级的、独立的执行环境,它打包了应用程序的代码、运行时环境、库、配置文件等所有依赖,确保应用可以在任何环境中运行。
  2. 镜像(Image):镜像是容器的只读模板,包含了运行容器所需的一切环境和文件。容器是基于镜像启动的实例。
  3. Dockerfile:这是一个文本文件,定义了如何构建镜像。它包含一系列指令,用于指定镜像中的基础环境、依赖、配置等。
  4. Docker Hub:这是一个公共的镜像仓库,用户可以从中拉取镜像,或者将自己创建的镜像推送到该平台上。
  5. Docker引擎(Docker Engine):这是Docker的核心部分,负责管理容器的创建、运行和销毁等操作。

二、Docker的安装与环境配置

2.1 安装Docker

Docker支持多种操作系统,如Linux、Windows和macOS。以下是各操作系统的安装步骤简述。

在Linux(如Ubuntu)上安装Docker
sudo apt-get update
sudo apt-get install docker.io
sudo systemctl start docker
sudo systemctl enable docker
在Windows/macOS上安装Docker
  • 访问 Docker官网 下载并安装Docker Desktop。
  • 安装完成后,启动Docker Desktop即可。
2.2 验证Docker安装

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

docker --version

输出类似 Docker version 20.xx 表示安装成功。

三、Docker的基本使用

3.1 拉取并运行镜像

Docker提供了许多预构建的镜像,可以直接拉取并运行。以运行一个简单的hello-world镜像为例:

docker run hello-world

这条命令会执行以下操作:

  1. 从Docker Hub拉取hello-world镜像。
  2. 启动容器,并在终端输出"Hello from Docker!"的信息。
3.2 常用Docker命令
  1. 查看正在运行的容器
    docker ps
    
  2. 查看所有容器(包括已停止的)
    docker ps -a
    
  3. 停止容器
    docker stop <container_id>
    
  4. 删除容器
    docker rm <container_id>
    
  5. 删除镜像
    docker rmi <image_id>
    
3.3 Docker的工作流程

Docker的工作流程通常分为以下几个步骤:

  1. 构建镜像:基于Dockerfile创建自定义的应用镜像。
  2. 拉取镜像:从Docker Hub等镜像仓库拉取镜像。
  3. 运行容器:基于镜像启动一个或多个容器实例。
  4. 管理容器:对运行中的容器进行监控、日志查看和故障排查等。

四、Dockerfile的构建与解释

Dockerfile是定义镜像构建过程的核心文件。通过Dockerfile,开发者可以定义从基础镜像开始,到添加应用依赖和配置的整个过程。

以下是一个简单的Dockerfile示例,用于构建一个基于Python的Flask应用:

# 使用官方的Python基础镜像
FROM python:3.9-slim# 设置工作目录
WORKDIR /app# 复制当前目录下的所有文件到容器中的/app目录
COPY . /app# 安装Flask依赖
RUN pip install --no-cache-dir -r requirements.txt# 暴露容器的5000端口
EXPOSE 5000# 运行Flask应用
CMD ["python", "app.py"]
4.1 构建Docker镜像

在有了Dockerfile之后,可以通过以下命令构建镜像:

docker build -t my-flask-app .
4.2 运行Docker容器

构建完成后,可以通过以下命令运行容器:

docker run -d -p 5000:5000 my-flask-app

这将启动一个容器实例,并将主机的5000端口映射到容器的5000端口。

五、Docker Compose:管理多容器应用

如果一个应用需要多个服务(如数据库、缓存、后台服务等),可以使用Docker Compose来定义和管理多容器环境。docker-compose.yml文件可以定义多个容器的配置和依赖关系。

5.1 Docker Compose文件示例

以下是一个docker-compose.yml文件示例,用于定义一个Flask应用和一个PostgreSQL数据库服务:

version: '3'services:web:build: .ports:- "5000:5000"volumes:- .:/appdepends_on:- dbdb:image: postgres:13environment:POSTGRES_USER: userPOSTGRES_PASSWORD: passwordPOSTGRES_DB: flaskdb
5.2 启动多容器应用

使用以下命令来启动所有定义在docker-compose.yml中的服务:

docker-compose up

六、Docker实战项目:构建一个简单的Web应用

我们将构建一个简单的Flask应用,并将其容器化。项目结构如下:

/flask-app├── app.py├── requirements.txt└── Dockerfile
6.1 创建Flask应用

app.py中编写一个简单的Flask应用:

from flask import Flask
app = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, Docker!'if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
6.2 编写requirements.txt
Flask==2.0.1
6.3 构建镜像并运行容器
  1. 创建Dockerfile(参考前面示例)。
  2. 构建镜像:
    docker build -t flask-app .
    
  3. 运行容器:
    docker run -d -p 5000:5000 flask-app
    

浏览器访问 http://localhost:5000,你将看到"Hello, Docker!"。

七、总结

Docker通过容器化技术,简化了应用的开发、部署和运行过程。在本篇文章中,我们介绍了Docker的基础概念、安装与使用,以及如何使用Dockerfile构建自定义镜像。通过实际的Flask项目,你可以掌握Docker在实际项目中的应用,进一步理解容器化技术的强大之处。

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

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

相关文章

【K8S系列】Kubernetes pod节点NotReady问题及解决方案详解【已解决】

Kubernetes 集群中的每个节点都是运行容器化应用的基础。当节点状态显示为 NotReady 时&#xff0c;意味着该节点无法正常工作&#xff0c;这可能会导致 Pod 无法调度&#xff0c;从而影响整个应用的可用性。本文将深入分析节点不健康的各种原因、详细的排查步骤以及有效的解决…

查看SQL执行计划 explain

查看SQL执行计划 explain explain使用方式 alter session set current_schematest; explain plan for sql语句; --并不会实际执行&#xff0c;因此生成的执行计划也是预估的 select * from table(dbms_xplan.display); explain使用场景 1.内存中没有谓词信息了&#xff0…

MySQL从入门到跑路

SQL语言 SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是用于管理和操作关系数据库的一种标准编程语言。 SQL分类&#xff1a; DDL(Data Definition Language)&#xff1a;数据定义语言&#xff0c;用于操作数据库、表、字段&#xff0c…

前端文件流导出

1、前端代码 ​ /** 导出 */ const handleExport async () > {let config {responseType: blob,headers: {Content-Type: application/json,},};const res await getTargetExport(config);const blob new Blob([res]);const fileName PK目标跟进导出列表.xls;const li…

SpringBoot整合Freemarker(一)

Freemarker和jsp一样是一个视图的引擎模板&#xff0c;其实所有的模板引擎的工作原理都是类似的&#xff0c;如下图&#xff1a; 接下来就具体讲解一下Freemarker的用法&#xff0c;参考手册&#xff1a;模板 数据模型 输出 - FreeMarker 中文官方参考手册 SpringBoot默认就…

【浏览器】如何正确使用Microsoft Edge

1、清理主页广告 如今的Microsoft Edge 浏览器 主页太乱了&#xff0c;各种广告推送&#xff0c;点右上角⚙️设置&#xff0c;把快速链接、网站导航、信息提要、背景等全部关闭。这样你就能得到一个超级清爽的主页。 网站导航       关闭 …

HarmonyOS NEXT和认证(在校生的大福利)

今天重点关注了一下HarmonyOS NEXT&#xff0c;也就是我们所说的纯血鸿蒙&#xff01; 根据官方的说法&#xff1a; 欢迎开发者进入HarmonyOS NEXT。暌违一年&#xff0c;HarmonyOS NEXT终于在万千开发者的期待下从幕后走向台前。 HarmonyOS NEXT采用全新升级的系统架构&#…

【Python】NumPy(一):数据类型、创建数组及基本操作

目录 ​NumPy初识 1.什么是NumPy&#xff1f; NumPy的应用 NumPy数据类型 Python基本数据类型 NumPy数据类型 NumPy数组 创建数组 1.使用numpy.array() 2.使用arange()方法创建 3.使用linspace()创建等差数列 4使用zeros()创建数组 5.使用ones()创建数组 6.利用…

Linux基本使用和程序部署

文章目录 一. Linux背景Linux发行版 二. Linux环境搭建Linux常见命令lspwdcdtouchcatmkdirrmcpmvtailvimgreppsnetstat管道 三. 搭建java部署环境安装jdk安装mysql部署Web项目到Linux 一. Linux背景 1969−1970年,⻉尔实验室的DennisRitchie和KenTompson开发了Unix操作系统. 他…

在Linux操作系统上安装NVM教程——CentOS 7/VMware 17版

目录 一、测试网络是否能上网 二、下载阿里云镜像 三、解决执行yum命令出现报错&#xff08;没有就跳过&#xff09; 四、下载NVM安装包 五、解压NVM安装包 六、安装Node 七、连接新的动态库 八、升级GLIBC版本 九、安装GCC 十、查看当前服务器CentOS版本 一、测试网…

[AWS云]kafka调用和创建

背景:因为因为公司的项目需要使用AWS的kafka&#xff0c;但是在创建和使用过程中都遇到了一些报错和麻烦&#xff0c;毕竟老外的东西&#xff0c;和阿里云、华为使用起来还是不一样。 一、创建&#xff08;创建的配置过程就略了&#xff0c;就是配置一下可用区、型号&#xff0…

闯关leetcode——110. Balanced Binary Tree

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/balanced-binary-tree/description/ 内容 Given a binary tree, determine if it is height-balanced. A height-balanced binary tree is a binary tree in which the depth of the two subtrees…

深入理解售后派单管理系统,功能优势一览

售后派单管理系统优化售后服务流程&#xff0c;提升响应速度、运营效率和服务质量。ZohoDesk等系统通过自动化派单、实时调度监控等功能&#xff0c;助力企业赢得竞争优势。适用于电子产品、汽车、IT及房地产等行业。 一、什么是售后派单管理系统 售后派单管理系统是一种专门用…

第七届机械、控制与计算机工程国际学术会议(ICMCCE2024)

重要信息 大会官网&#xff1a;www.icmcce.com 大会地点&#xff1a;中国杭州 大会时间&#xff1a;2024年10月25-27日 大会简介 第七届机械、控制与计算机工程国际学术会议定于2024年10月25日至27日在中国杭州召开。本届会议由巢湖学院主办&#xff0c;主要围绕“机械”、…

AGI|浅尝多Agent协作框架CrewAI,打造一个智能旅行助手

目录 一、介绍 二、特性 三、使用案例 四、 结语 一、介绍 Crew AI是一个多智能体协作智能框架&#xff0c;可以编排角色扮演的AI智能体。旨在协调角色扮演的自主AI代理&#xff0c;通过促进协作智能体&#xff0c;Crew AI使代理能够无缝协作&#xff0c;共同应对复杂任务。…

【JavaScript】LeetCode:61-65

文章目录 61 课程表62 实现Trie&#xff08;前缀树&#xff09;63 全排列64 子集65 电话号码的字母组合 61 课程表 Map BFS拓扑排序&#xff1a;将有向无环图转为线性顺序。遍历prerequisites&#xff1a;1. 数组记录每个节点的入度&#xff0c;2. 哈希表记录依赖关系。n 6&a…

(十九)、使用 minikube 运行k8s 集群

文章目录 1、机器信息2、官方文档3、启动本机 docker4、安装 minikube5、启动 minikube5.1、报错重试应该做什么&#xff1f; 6、启动后7、安装 Vs Code & k8s extensions8、在 VS Code 查看运行起来的 k8s 集群9、基本命令10、虚拟化不支持 Mac Os 14.3.1 1、机器信息 Ma…

c++算法第3天

本篇文章包含三道算法题&#xff0c;难度由浅入深&#xff0c;适合新手练习哟 目录 第一题 题目链接 题目解析 代码原理 代码编写 本题总结 第二题 题目链接 题目解析 代码原理 代码编写 第三题 题目链接 题目解析 代码原理 代码编写 第一题 题目链接 [NOIP2…

Iceberg 基本操作和快速入门二-Spark DDL操作

Iceberg 基本操作和快速入门一-CSDN博客 启动spark会话 docker exec -it spark-iceberg spark-sql 创建表 CREATE TABLE prod.db.sample ( id bigint NOT NULL COMMENT unique id, data string) USING iceberg; 创建分区表 CREATE TABLE prod.db.sample_par ( id bigint, …

No.17 笔记 | XXE漏洞:XML外部实体注入攻击

1. XXE漏洞概览 XXE&#xff08;XML External Entity&#xff09;是一种允许攻击者干扰应用程序对XML输入处理的漏洞。 1.1 XXE漏洞比喻 想象XML解析器是一个听话的机器人&#xff0c;而XXE就是利用这个机器人的"过分听话"来获取不应该获取的信息。 1.2 XXE漏洞危…