容器化技术入门: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.mzph.cn/diannao/59712.shtml

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

相关文章

数据挖掘实战-基于SARIMA时间序列模型预测Netflix股票未来趋势

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

Java:多态的调用

1.什么是多态 允许不同类的对象对同一消息做不同的响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)。多态使用了一种动态绑定(dynamic binding)技术,指在执行期间判断所引用…

HbuildderX运行到手机或模拟器的Android App基座识别不到设备 mac

寻找模拟器 背景: 运行的是h5,模拟器是网易MuMu。 首先检查一下是否配置dab环境,adb version 配置一下hbuilderX的adb: 将命令输出的路径配置到hbuilderx里面去,然后重启下HbuilderX。 开始安装基座…一直安装不…

小程序 CRM 运营系统:提升用户体验的新利器

在当今数字化时代,小程序以其便捷、高效的特点迅速成为企业与用户互动的重要平台。而将客户关系管理(CRM)运营系统融入小程序中,更是为企业带来了全新的机遇与挑战。那么,如何构建一个成功的小程序CRM运营系统呢&#…

【362】基于springboot的在线租房和招聘平台

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统在线租房和招聘平台信息管理难度大,容错率低&…

华为Mate70前瞻,鸿蒙NEXT正式版蓄势待发,国产系统迎来关键一战

Mate 70系列要来了 上个月,vivo、小米、OPPO、荣耀等众多智能手机制造商纷纷发布了他们的年度旗舰产品,手机行业内竞争异常激烈。 同时,华为首席执行官余承东在其个人微博上透露,Mate 70系列将标志着华为Mate系列手机达到前所未有…

【Java Web】JSP实现数据传递和保存(中)中文乱码 转发与重定向

文章目录 中文乱码转发与重定向转发重定向区别 升级示例1 中文乱码 JSP 中默认使用的字符编码方式:iso-8859-1,不支持中文。常见的支持中文的编码方式及其收录的字符: gb2312:常用简体汉字gbk:简体和繁体汉字utf-8&a…

Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized

这里是Themberfue 在上一节的最后,我们讨论两个线程同时对一个变量累加所产生的现象 在这一节中,我们将更加详细地解释这个现象背后发生的原因以及该如何解决这样类似的现象 线程安全问题 public class Demo15 {private static int count 0;public …

React前端框架:现代网页开发的基石(附带构建简单任务管理应用案例代码)

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 React 是由 Facebook 开发并开源的前端框架,用于构建用户界面。它通过虚拟DOM、高效的渲染机制和组件化的开发模式&am…

在Zetero中调用腾讯云API的输入密钥的问题

也是使用了Translate插件了,但是需要调用腾讯云翻译,一直没成功。 第一步就是,按照这上面方法做:百度、阿里、腾讯、有道各平台翻译API申请教程 之后就是:Zotero PDF translat翻译:申请腾讯翻译接口 主要是…

kelp protocol

道阻且长,行而不辍,未来可期 有很长一段时间我都在互联网到处拾金,but,东拼西凑的,总感觉不踏实,最近在老老实实的看官方文档 & 阅读白皮书 &看合约,挑拣一些重要的部分配上官方的证据,和过路公主or王子分享一下,愿我们早日追赶上公司里那些可望不可及大佬们。…

如何以开源加速AI企业落地,红帽带来新解法

CSDN 看到,生成式 AI 的火爆正在引发计算、开发、交互三大范式全面的升级和转换,全行业或将迎来一次全新的科技变革周期,可能比移动与云计算变革更加剧烈。不过 AI 经历了追求千亿模型效果和芯片、集群硬件的军备竞赛后,如何真正落…

vue的组件使用

1.安装element plus组件库 npm install element-plus --save 2. 3.在页面使用

人保财险(外包)面试分享

前言: 这是本月面的第三家公司,太难了兄弟们,外包都不好找了,临近年底,金九银十已经错过了,金三银四虽然存在,但按照这几年的行情,金九银十和金三银四其实已经是不复存在了&#xf…

Linux-c TCP服务模型

1、TCP模型,服务端与客户端的搭建时序图 2、TCP模型,在创建阶段和通信阶段,对套接字的理解 2.1、tcp连接阶段 2.2、tcp通信状态 一个服务端与多个客户端的通信状态 TCP与UDP的对比 (下图是笔者理解所画,可能也许有错…

卡码网KamaCoder 127. 骑士的攻击

题目来源:127. 骑士的攻击 C题解(来源A * 算法精讲 (A star算法) | 代码随想录):Astar Astar 是一种 广搜的改良版。 有的是 Astar是 dijkstra 的改良版。 其实只是场景不同而已 我们在搜索最短路的时候&…

浅谈语言模型推理框架 vLLM 0.6.0性能优化

在此前的大模型技术实践中,我们介绍了加速并行框架Accelerate、DeepSpeed及Megatron-LM。得益于这些框架的助力,大模型的分布式训练得以化繁为简。 然而,企业又该如何将训练完成的模型实际应用部署,持续优化服务吞吐性能&#xf…

闯关leetcode——3222. Find the Winning Player in Coin Game

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/find-the-winning-player-in-coin-game/description/ 内容 You are given two positive integers x and y, denoting the number of coins with values 75 and 10 respectively. Alice and Bob a…

斗破QT编程入门系列之二:GUI应用程序设计基础:UI文件(四星斗师)

斗破Qt目录: 斗破Qt编程入门系列之前言:认识Qt:Qt的获取与安装(四星斗师) 斗破QT编程入门系列之一:认识Qt:初步使用(四星斗师) 斗破QT编程入门系列之二:认识…

高级 HarmonyOS主题课—— 帮助快速构建各种文本识别应用的课后习题

天地不仁&#xff0c;以万物为刍狗&#xff1b; 圣人不仁&#xff0c;以百姓为刍狗。 天地之间&#xff0c;其犹橐龠乎&#xff1f; 虚而不屈&#xff0c;动而俞出。 多闻数穷&#xff0c;不若守于中。 本文内容主要来自 <HarmonyOS主题课>帮助快速构建各种文本识别应用 …