容器化技术入门:Docker详解

💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》

容器化技术入门:Docker详解

容器化技术入门:Docker详解

  • 容器化技术入门:Docker详解
    • 引言
    • Docker 概述
      • 什么是 Docker
      • Docker 的优势
    • 安装和配置 Docker
      • 安装 Docker
      • 验证安装
    • Docker 基础
      • Docker 镜像
        • 拉取镜像
        • 查看镜像
      • Docker 容器
        • 启动容器
        • 查看容器
      • Dockerfile
        • 示例 Dockerfile
        • 构建镜像
      • Docker Compose
        • 示例 docker-compose.yml
        • 启动服务
    • Docker 高级功能
      • 网络
        • 创建桥接网络
        • 连接容器到网络
        • 创建卷
        • 使用卷
      • 安全性
        • 用户命名空间
        • AppArmor
    • 实战案例分析
      • 微服务架构
        • 项目结构
        • 前端 Dockerfile
        • 后端 Dockerfile
        • 数据库 Dockerfile
        • docker-compose.yml
        • 启动服务
    • 总结
    • 参考资料

引言

随着云计算和微服务架构的兴起,容器化技术逐渐成为现代软件开发和部署的主流选择。Docker 是最流行的容器化平台之一,它提供了一种轻量级、可移植的方式,用于打包、分发和运行应用程序。本文将详细介绍 Docker 的基本概念、安装配置、核心功能以及实际应用,帮助读者快速上手 Docker 容器化技术。

Docker 概述

什么是 Docker

Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包到一个可移植的容器中,然后在任何支持 Docker 的环境中运行。Docker 容器是轻量级的,启动速度快,资源利用率高。

Docker 的优势

  • 轻量级:容器共享主机系统的内核,比虚拟机更轻量。
  • 一致性:容器提供了一致的运行环境,减少了“在我的机器上可以运行”的问题。
  • 隔离性:每个容器都有自己的文件系统、网络接口和进程空间,互不影响。
  • 可移植性:容器可以在不同的环境中无缝迁移和运行。

安装和配置 Docker

安装 Docker

Docker 支持多种操作系统,包括 Windows、macOS 和 Linux。以下是 Linux 上的安装步骤。

# 更新包列表
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 APT 仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"# 更新包列表
sudo apt-get update# 安装 Docker
sudo apt-get install docker-ce

验证安装

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

sudo docker run hello-world

Docker 基础

Docker 镜像

Docker 镜像是一个轻量级的、独立的、可执行的软件包,包含了运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

拉取镜像

可以从 Docker Hub 拉取现有的镜像。

sudo docker pull ubuntu:latest
查看镜像

可以查看本地已有的镜像。

sudo docker images

Docker 容器

Docker 容器是从镜像创建的运行实例。容器是隔离的、轻量级的,并且可以独立运行。

启动容器

可以从镜像启动一个新的容器。

sudo docker run -it ubuntu:latest /bin/bash
查看容器

可以查看正在运行的容器。

sudo docker ps

Dockerfile

Dockerfile 是一个文本文件,包含了一系列命令,用于自动构建 Docker 镜像。

示例 Dockerfile
# 使用官方的 Ubuntu 镜像作为基础镜像
FROM ubuntu:latest# 设置作者信息
LABEL maintainer="yourname@example.com"# 更新包列表并安装所需的软件包
RUN apt-get update && apt-get install -y \n    curl \n    vim# 设置工作目录
WORKDIR /app# 复制当前目录下的文件到容器的 /app 目录
COPY . /app# 暴露 80 端口
EXPOSE 80# 设置容器启动时运行的命令
CMD ["/bin/bash"]
构建镜像

可以使用 docker build 命令从 Dockerfile 构建镜像。

sudo docker build -t myapp:latest .

Docker Compose

Docker Compose 是一个工具,用于定义和运行多容器 Docker 应用程序。通过一个 YAML 文件,可以配置应用程序的服务。

示例 docker-compose.yml
version: '3'
services:web:build: .ports:- "5000:5000"redis:image: "redis:alpine"
启动服务

可以使用 docker-compose up 命令启动定义的服务。

sudo docker-compose up

Docker 高级功能

网络

Docker 提供了多种网络模式,包括桥接网络、主机网络和覆盖网络。

创建桥接网络
sudo docker network create mynetwork
连接容器到网络
sudo docker run -d --name myweb --network mynetwork nginx

Docker 卷用于持久化数据,即使容器停止或删除,卷中的数据仍然保留。

创建卷
sudo docker volume create myvolume
使用卷
sudo docker run -d --name mydb --mount source=myvolume,target=/var/lib/mysql mysql

安全性

Docker 提供了多种安全措施,包括用户命名空间、AppArmor 和 SELinux。

用户命名空间

用户命名空间允许在容器中使用不同的用户 ID,增加安全性。

sudo dockerd --userns-remap=default
AppArmor

AppArmor 是一个 Linux 安全模块,可以限制程序的能力。

sudo apt-get install apparmor

实战案例分析

微服务架构

假设我们要构建一个微服务架构的应用程序,包含前端、后端和数据库服务。

项目结构
myapp/
├── frontend/
│   └── Dockerfile
├── backend/
│   └── Dockerfile
└── db/└── Dockerfile
前端 Dockerfile
# 使用官方的 Node.js 镜像作为基础镜像
FROM node:14# 设置工作目录
WORKDIR /app# 复制 package.json 和 package-lock.json
COPY package*.json ./# 安装依赖
RUN npm install# 复制源代码
COPY . .# 构建应用
RUN npm run build# 暴露 3000 端口
EXPOSE 3000# 设置容器启动时运行的命令
CMD ["npm", "start"]
后端 Dockerfile
# 使用官方的 Python 镜像作为基础镜像
FROM python:3.8-slim# 设置工作目录
WORKDIR /app# 复制 requirements.txt
COPY requirements.txt .# 安装依赖
RUN pip install -r requirements.txt# 复制源代码
COPY . .# 暴露 5000 端口
EXPOSE 5000# 设置容器启动时运行的命令
CMD ["python", "app.py"]
数据库 Dockerfile
# 使用官方的 MySQL 镜像作为基础镜像
FROM mysql:5.7# 设置环境变量
ENV MYSQL_ROOT_PASSWORD=root
ENV MYSQL_DATABASE=mydb# 复制初始化脚本
COPY init.sql /docker-entrypoint-initdb.d/
docker-compose.yml
version: '3'
services:frontend:build: ./frontendports:- "3000:3000"backend:build: ./backendports:- "5000:5000"depends_on:- dbdb:build: ./dbvolumes:- dbdata:/var/lib/mysql
volumes:dbdata:
启动服务
sudo docker-compose up

总结

通过本文,我们深入了解了 Docker 的基本概念、安装配置、核心功能以及实际应用。Docker 是一个强大的容器化平台,提供了轻量级、一致性和可移植性的优势。希望本文能帮助读者更好地理解和应用 Docker,提升容器化技术的开发能力。
Docker架构图

参考资料

  • Docker 官方文档
  • Docker Compose 文档
  • Dockerfile 最佳实践
  • Docker 安全性指南
    Docker网络模式图

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

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

相关文章

AssertionError: weight model.layers.0.self_attn.q_proj.weight does not exist

通义千问2.5-7B-Instruct-AWQ量化,但在npu上运行报上面错误,奇怪?: Exception:weight model.layers.0.self_attn.q_proj.weight does not exist AssertionError: weight model.layers.0.self_attn.q_proj.weight does not exist https://…

【SSL-RL】自监督强化学习:随机潜在演员评论家 (SLAC)算法

📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…

怎么启动python脚本文件

创建一个简单的python入门代码,以便示范。 存储文件并复制该python文件的存储路径。 使用cd 命令切换工作目录到python文件所在的目录。 输入变量环境中的python路径和python文件的名字。 回车执行后,可完成命令行的python文件运行。

DDei在线设计器V1.2.42版发布

V1.2.42版 新特性: 1.快捷编辑框可以映射到主控件的多个属性上,从而实现快速编辑。 2.跟随图形的支持范围增加,从仅支持线控件到支持所有控件 2.新增控件双击回调函数EVENT_CONTROL_DBL_CLICK,可以用于覆盖默认的快速编辑逻辑…

信息安全工程师(78)网络安全应急响应技术与常见工具

前言 网络安全应急响应是指为应对网络安全事件,相关人员或组织机构对网络安全事件进行监测、预警、分析、响应和恢复等工作。 一、网络安全应急响应技术 网络安全应急响应组织 构成:网络安全应急响应组织主要由应急领导组和应急技术支撑组构成。领导组负…

网络安全之SQL初步注入

一.字符型 平台使用pikachu $name$_GET[name]; ​ $query"select id,email from member where username$name"; 用户输入的数据会被替换到SQL语句中的$name位置 查询1的时候,会展示username1的用户数据,可以测试是否有注入点(闭…

Gradle命令编译Android Studio工程项目并签名

文章目录 gradlew命令gradlew编译debug apkgradlew编译release apkapksigner签名apkgradlew注意事项 gradlew命令 gradlew 是一个脚本文件,它允许你在没有全局安装 Gradle 的情况下运行 Gradle 构建。这个脚本在多平台上可用,对于 Windows 系统来说是 g…

B2B订货系统功能设计与代码开发(PHP + MySQL)

在B2B(Business to Business)电子商务中,企业之间的商品订购、交易和供应链管理是核心功能。一个高效的B2B订货系统可以帮助企业管理库存、订单、采购等业务流程。本文将介绍一个基于PHP与MySQL技术栈的B2B订货系统的功能设计与开发流程。 一…

增删改查基础项目总结

上篇中主要负责后端部分完成了一个简单的学习辅助系统部分界面,主要针对增删改查进行了练习,过程中遇到了一些细节上的问题以及当时做的时候去查阅的一些之前没有太注意到的额外知识,所以还需要进行进一步梳理,像登录校验的方法以…

【Zookeeper集群搭建】安装zookeeper、zookeeper集群配置、zookeeper启动与关闭、zookeeper的shell命令操作

目录 一、安装Zookeeper 二、配置Zookeeper集群 三、Zookeeper服务的启动与关闭 四、Zookeeper的shell操作 前情提要:延续上篇【Hadoop和Hbase集群配置】继续配置Zookeeper,开启三台虚拟机Hadoop1、Hadoop2、Hadoop3,进入终端&#xff0c…

智能社区服务小程序+ssm

智能社区服务小程序 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了智能社区服务小程序的开发全过程。通过分析智能社区服务小程序管理的不足,创建了一个计算机管理智能社区服务小程序的方案。文…

【C++】vector模拟实现、迭代器失效问题(超详解)

vector会使用之后我们来模拟实现一下,通过对vector的模拟实现,我们来说一下迭代器失效问题。 1.准备工作 在头文件vector.h里声明和实现函数,然后在test.cpp里测试代码的正确性。 在vector.h中用命名空间分隔一下,因为c库里面也有…

前端学习八股资料CSS(一)

🤔🤔宝子们,好久不见啊!今日继续分享前端八股笔记,好多友友们觉得笔记对于自己学习复习或面试复习或平时加强知识非常有用,收到了大家的好评,谢谢大家的喜欢,我会坚持继续更新的&…

【进阶】Stable Diffusion 插件 Controlnet 安装使用教程(图像精准控制)

Stable Diffusion WebUI 的绘画插件 Controlnet 最近更新了 V1.1 版本,发布了 14 个优化模型,并新增了多个预处理器,让它的功能比之前更加好用了,最近几天又连续更新了 3 个新 Reference 预处理器,可以直接根据图像生产…

小程序源码-模版 100多套小程序(附源码)

一、搭建开发环境 搭建环境可以从这里开始: 微信小程序从零开始开发步骤(一)搭建开发环境 - 简书 二、程序示例 1、AppleMusic https://download.csdn.net/download/m0_54925305/89977187 2、仿B站首页 https://download.csdn.net/downlo…

【Python-AI篇】K近邻算法(KNN)

0. 前置----机器学习流程 获取数据集数据基本处理特征工程机器学习模型评估在线服务 1. KNN算法概念 如果一个样本在特征空间中的K个最相似(即特征空间中最邻近)的样本中大多数属于某一个类别,则该样本也属于这一个类别 1.1 KNN算法流程总…

Deepin 系统中安装Rider和Uno Platform

1、在系统的中断命令行中输入如下命令,安装.NET 8环境。 wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.debsudo dpkg -i packages-microsoft-prod.debsudo apt-get updatesudo apt-get insta…

[OpenGL]使用OpenGL实现硬阴影效果

一、简介 本文介绍了如何使用OpenGL实现硬阴影效果,并在最后给出了全部的代码。本文基于[OpenGL]渲染Shadow Map,实现硬阴影的流程如下: 首先,以光源为视角,渲染场景的深度图,将light space中的深度图存储…

反序列化漏洞浅析

Apache InLong 是开源的高性能数据集成框架&#xff0c;支持数据接入、数据同步和数据订阅&#xff0c;同时支持批处理和流处理&#xff0c;方便业务构建基于流式的数据分析、建模和应用。浅析Apache InLong < 1.12.0 JDBC反序列化漏洞&#xff08;CVE-2024-26579&#xff0…

基于微信小程序的移动学习平台的设计与实现+ssm(lw+演示+源码+运行)

摘 要 由于APP软件在开发以及运营上面所需成本较高&#xff0c;而用户手机需要安装各种APP软件&#xff0c;因此占用用户过多的手机存储空间&#xff0c;导致用户手机运行缓慢&#xff0c;体验度比较差&#xff0c;进而导致用户会卸载非必要的APP&#xff0c;倒逼管理者必须改…