【Docker 从入门到实战全攻略(一):核心概念 + 命令详解 + 部署案例】

1. 是什么

Docker 是一个用于开发、部署和运行应用程序的开源平台,它使用 容器化技术 将应用及其依赖打包成独立的容器,确保应用在不同环境中一致运行。

2. Docker与虚拟机

2.1 Docker(容器化)

容器化是一种轻量级的虚拟化技术,它将应用程序及其依赖项打包成独立的容器,确保应用在不同环境中一致运行。与传统虚拟机相比,容器共享宿主操作系统的内核,因此更轻量、更高效。

  • 核心技术:Linux 的 namespaces(隔离进程、网络等)和 cgroups(限制资源使用)。
  • 工作方式:容器直接运行在宿主机的内核上,共享操作系统,仅封装应用的用户空间。
  • 优点:资源效率高、启动快、部署简单。
  • 缺点:隔离性较弱(共享内核),不适用于需要完全隔离内核的场景。

2.2 虚拟机(VM)

  • 核心技术:Hypervisor(如 VMware、VirtualBox、KVM)模拟硬件资源。
  • 工作方式:每个 VM 包含独立的操作系统、驱动程序和应用,通过 Hypervisor 访问物理硬件。
  • 优点:完全隔离,安全性高,适用于不同操作系统或需要隔离内核的场景。
  • 缺点:资源消耗大,启动慢,管理复杂。
    暂时无法在飞书文档外展示此内容

2.3 对比

对比项Docker(容器化)虚拟机(VM)
底层依赖共享宿主机的操作系统内核,仅封装应用和依赖库每个 VM 包含完整的操作系统(内核 + 应用)
隔离级别进程级隔离(轻量级)硬件级隔离(重量级)
资源利用率高(无需额外操作系统开销)低(每个 VM 需要独立的操作系统资源)
启动速度秒级(直接启动应用进程)分钟级(需要启动完整的操作系统)

3. 核心概念

[图片]

3.1 镜像(Image)

  • 只读的模板,包含应用代码、依赖库、环境变量等,类似 “应用的快照”。类似于“菜谱”
  • 例如:cr2.fit2cloud.com/1panel/maxkb 就是一个镜像

3.2 容器(Container)

  • 镜像的运行实例,可被启动、停止、删除。类似于按菜谱做出的菜
  • 容器间相互隔离,共享宿主机的操作系统内核

3.3 仓库(Repository)镜像源

  • 存储镜像的地方,分为公有仓库(如 Docker Hub)和私有仓库(如 cr2.fit2cloud.com)。类似于菜谱分享平台
    [图片]

4 Docker常用命令

4.1 帮助命令

  • docker verision # 显示版本信息
  • docker info # 显示系统信息
  • docker 命令 --help # 帮助命令
    官方帮助文档:https://docs.docker.com/reference/cli/docker/

4.2 镜像命令

4.2.1 docker images 查看所有镜像

docker images [选项] [镜像名[:版本标签TAG]]
在这里插入图片描述

  • 常用选项
    -a, --all #列出所有镜像
    -q,--quiet #只显示镜像的id

4.2.2 docker search 搜索镜像

docker search [选项] TERM

4.2.3 docker pull 拉取镜像

docker pull [选项] 镜像名[:版本标签|@DIGEST]

4.2.4 docker rmi 删除镜像

docker rmi [选项] IMAGE [IMAGE...]

  • docker rmi -f 镜像id 镜像id #删除指定的镜像
  • docker rmi -f $(docker images -aq) #删除全部的镜像

4.2.5 docker commit 保存镜像

docker commit [选项] 容器ID或名称 [新镜像名[:标签]]

  • 容器转镜像工具:将单个容器的当前状态保存为新镜像,
  • 常用选项
    -a, --author 指定镜像作者信息 --author="John Doe <john@example.com>"
    -m, --message 添加提交信息 --message="Installed Apache"
    -p, --pause 提交时暂停容器(默认开启) --pause=false(不暂停容器)
  • docker commit abc123 my-ubuntu-python:v1

4.3 容器命令

  • 有了镜像才可以创建容器
    docker pull centos:7 #需指定下载版本,若直接pull centos ,CentOS 官方已 移除 latest 标签,或镜像源中未同步 latest 版本,会导致拉取失败

4.3.1 docker run 新建容器并启动

docker run [参数] image

  • 常用选项
    --name="Name" #为容器命名,用来区分容器
    -d #以后台方式运行
    -it #使用交互方式运行,进入容器查看内容
    -p 主机端口:容器端口 #指定容器的端口
  • 示例:启动并进入
    在这里插入图片描述

4.3.2 exit 从容器退回到主机

exit # 停止容器并退回到主机
Ctrl +P + Q # 容器不停止退回到主机

4.3.3 docker ps 或 docker top查看服务器进程

docker ps [选项]

  • 常用选项
    (默认) # 列出当前正在运行的容器
    -a #列出当前正在运行以及历史运行过的容器
    -n=1 #显示最近1次创建的容器
    -q #只显示容器编号

docker top 容器id

4.3.4 docker rm 删除容器

docker rm [选项,] 容器id [容器id...]

  • docker rm 容器id #删除指定容器,但无法删除正在运行的容器
  • docker rm -f $(docker ps -aq) #删除所有容器
  • docker ps -a -q | xargs docker rm #删除所有容器
  • docker rm $(docker ps -a -q) #删除所有停止的容器

4.3.5 启动和停止容器

docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #停止当前正在运行的容器

4.4 常用其它命令

4.4.1 docker run -d 后台启动容器

docker run -d 镜像名
在这里插入图片描述

  • docker 容器使用后台运行,必须要有一个前台进程,若 docker 发现没有应用,就会自动停止

4.4.2 docker logs 查看日志

docker logs [选项] 容器

  • 常用选项
    -tf #显示带时间戳的日志
    --tail 1 #显示1条日志

#没有日志可以自己编写一段 shell 脚本
docker run -d centos /bin/sh -c "while true;do echo ronghaha;sleep 1;done" #每隔一秒输出一次 ronghaha
#再进行日志的查看
在这里插入图片描述

4.4.3 docker inspect查看源数据

docker inspect 容器id

[{"Id": "4d9c107c8975344c1188cd5d27351bbcca812f5ecf6600e9cc975dcfab805415","Created": "2025-05-23T10:03:37.047169586Z","Path": "/bin/sh","Args": ["-c","while true;do echo ronghaha;sleep 1;done"],-----------------------后续内容省略----------------------

4.4.4 docker exec 或 docker attach进入当前正在运行的容器

我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置

  • 方式一:docker exec 进入容器后开启一个新终端,可进行操作(常用)
    docker exec -it 容器id bash
  • 方式二:docker attach 进入容器正在执行的终端,不会启动新的进程
    docker attach 容器id

4.4.5 docker cp从容器拷贝文件至主机

docker cp [选项] 容器id:文件路径 拷贝文件路径
在这里插入图片描述

4.5 练习

4.5.1 部署nginx

  • Step1: docker search nginx或者直接去 dockerhub 上查找对应版本和使用手册
  • Step2: 下拉镜像:pull
    docker pull nginx:1.27
  • Step3: 运行测试
    docker run -d -p 3344:80 nginx:1.27 #-d后台运行 -p宿主机端口:容器内部端口,将容器的 80 端口映射到主机的 3344 端口
    [图片]
    curl localhost:3344 #测试本地网络连接和服务可用性
 curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>

看到Welcome to nginx!证明测试成功

  • Step4: 进入容器
→~ docker exec -it df8d23b39485 /bin/bash`                    
root@df8d23b39485:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx

4.5.2 部署tomcat

  • 官方的下载:--rm 一般用来测试,用完删除
    docker run -it --rm tomcat:9.0

  • 下载再启动
    docker pull tomcat:11.0 #拉取镜像
    docker run -d -p 3355:8080 --name tomcat:11.0 tomcat:11.0

  • 测试访问无问题
    在这里插入图片描述

  • 进入容器
    docker exec -it tomcat /bin/bash

创作不易,点个赞支持一下ヾ(✿゚▽゚)ノ

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

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

相关文章

Vue:axios(POST请求)

发送 POST 请求 基本用法 axios.post(/api/login, {username: lcyyyy,password: 123456 }) .then(response > {console.log(请求成功:, response.data); }) .catch(error > {console.error(请求失败:, error); });在 Vue 组件中使用 export default {methods: {async …

一周学会Pandas2之Python数据处理与分析-数据重塑与透视-unstack() - 解堆 (行 -> 列)

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili unstack() 是 pandas 中用于数据重塑的重要方法&#xff0c;它与 stack() 互为逆操作。unstack() 的主要功能是将行索…

基于大模型预测的FicatIII-IV期股骨头坏死综合治疗研究报告

目录 一、引言 1.1 研究背景与目的 1.2 国内外研究现状 1.3 研究意义和创新点 二、FicatIII-IV 期股骨头坏死概述 2.1 疾病定义与分期 2.2 病因与病理机制 2.3 临床症状与诊断方法 三、大模型预测原理与方法 3.1 大模型简介 3.2 数据收集与预处理 3.3 模型训练与优…

C++?多态!!!

一、引言 众所周知&#xff0c;C有三大特性&#xff0c;它们分别是封装、继承和多态&#xff0c;在之前的文章中已经详细介绍过封装和继承了&#xff0c;今天我们将一起学习多态相关的知识&#xff0c;如果还想了解封装、继承相关的知识&#xff0c;可以跳转到以下链接&#xf…

electron安装报错处理

electron安装报错 解决方法&#xff1a; 修改 C:\Users\用户名.npmrc下配置文件 添加代码 electron_mirrorhttps://cdn.npmmirror.com/binaries/electron/ electron_builder_binaries_mirrorhttps://npmmirror.com/mirrors/electron-builder-binaries/最后代码 registryhtt…

Windows10下使用QEMU安装Ubuntu20.04虚拟机,并启用硬件加速

Windows10下使用QEMU安装Ubuntu20.04虚拟机&#xff0c;并启用硬件加速 作者将狼才鲸创建日期2025-05-30 CSDN阅读地址&#xff1a;Windows10下使用QEMU安装Ubuntu20.04虚拟机&#xff0c;并启用硬件加速 本文档源码地址&#xff1a;Windows10下使用QEMU安装Ubuntu20.04虚拟机…

顶刊SCS | 基于视觉语言大模型推理分割的建筑足迹尺度功能分类, 样本数据和代码已开源!

论文介绍 题目&#xff1a;Visual-language reasoning segmentation (LARSE) of function-level building footprint across Yangtze River Economic Belt of China 期刊&#xff1a;Sustainable cities and society&#xff08;中科院一区TOP&#xff0c;IF10.5&#xff09;…

【软件】navicat 官方免费版

Navicat Premium Lite https://www.navicat.com.cn/download/navicat-premium-lite

每个路由器接口,都必须分配所属网络内的 IP 地址,用于转发数据包

在IP网络中&#xff0c;主机&#xff08;Host&#xff09;和路由器接口&#xff08;Router Interface&#xff09;都需要分配网络地址&#xff08;IP地址&#xff09;。 1. 主机&#xff08;Host&#xff09;的IP地址分配 (1) 作用 主机的IP地址用于唯一标识该设备&#xff0…

鸿蒙OSUniApp页面切换动效实战:打造流畅精致的转场体验#三方框架 #Uniapp

UniApp页面切换动效实战&#xff1a;打造流畅精致的转场体验 引言 在移动应用开发中&#xff0c;页面切换动效不仅能提升用户体验&#xff0c;还能传达应用的品质感。随着HarmonyOS的普及&#xff0c;用户对应用的动效体验要求越来越高。本文将深入探讨如何在UniApp中实现流畅…

Tesseract OCR 安装与中文+英文识别实现

一、下载 https://digi.bib.uni-mannheim.de/tesseract/ 下载&#xff0c;尽量选择时间靠前的&#xff08;识别更好些&#xff09;。符合你的运行机&#xff08;我的是windows64&#xff09; 持续点击下一步安装&#xff0c;安装你认可的路径即可&#xff0c;没必要配置环境变…

Visual Studio 2022 发布独立的 exe 文件

我们在用 Visual Studio 2022 写好一个 exe 程序之后&#xff0c;如果想把这个拿到其他地方运行&#xff0c;需要把 exe 所在的文件夹一起拿过去。 编译出来的 exe 文件需要其他几个文件一同放在同一目录才能运行&#xff0c;原因在于默认情况下&#xff0c;Visual Studio 是把…

Kotlin-特殊类型

文章目录 数据类型枚举类型匿名类和伴生对象单例类伴生对象 数据类型 声明一个数据类非常简单: //在class前面添加data关键字表示为一个数据类 data class Student(var name: String, var age: Int)数据类声明后,编译器会根据主构造函数中声明的所有属性自动为其生成以下函数…

在线博客系统【测试报告】

&#x1f552; 一. 项目背景 由于纸质笔记容易丢失&#xff0c;携带不变&#xff0c;为了方便自己学习的过程中记录笔记&#xff0c;特开发了这个博客系统。这个系统后端采用 SpringBoot MyBatis SpringMVC &#xff1b;前端使用Html CSS JS&#xff1b;数据库使用的是Mysq…

每日刷题c++

快速幂 #include <iostream> using namespace std; #define int long long int power(int a, int b, int p) {int ans 1;while (b){if (b % 2){ans * a;ans % p; // 随时取模}a * a;a % p; // 随时取模b / 2;}return ans; } signed main() {int a, b, p;cin >> a …

Python中的变量、赋值及函数的参数传递概要

Python中的变量、赋值及函数的参数传递概要 python中的变量、赋值 python中的变量不是盒子。 python中的变量无法用“变量是盒子”做解释。图说明了在 Python 中为什么不能使用盒子比喻&#xff0c;而便利贴则指出了变量的正确工作方式。 如果把变量想象为盒子&#xff0c;那…

KVM 安装 Ubuntu 22

在 KVM 中安装 Ubuntu 22 虚拟机。 首先创建硬盘文件 sudo qemu-img create -f qcow2 /app/vms/ubuntu22.qcow2 100G安装Ubuntu 22 sudo virt-install \--name ubuntu22 \--ram 4096 \--vcpus 2 \--disk path/app/vms/ubuntu22.qcow2,formatqcow2 \--os-type linux \--os-va…

基于生产-消费模式,使用Channel进行文件传输(Tcp方式)

Client端&#xff1a; #region 多文件传输 public class FileMetadata {public string FileName { get; set; }public long FileSize { get; set; } }class Program {const int PORT 8888;const int BUFFER_SIZE 60 * 1024 * 1024;//15s-50 25s-64 33s-32 27s-50 31s-40 25…

【后端高阶面经:Elasticsearch篇】39、Elasticsearch 查询性能优化:分页、冷热分离与 JVM 调优

一、索引设计优化:构建高效查询的基石 (一)分片与副本的黄金配置 1. 分片数量计算模型 # 分片数计算公式(单分片建议30-50GB) def calculate_shards(total_data_gb, single_shard_gb=30):return max

学习路之PHP--easyswoole3.3安装入门

学习路之PHP--easyswoole安装入门 一、安装swoole扩展二、安装easyswoole三、指定PHP版本安装四、启动swoole五、EasySwoole的入门学习如果报&#xff1a;not controller class match 六、学习推荐&#xff1a; 0、centos 7、php7.2.33、easyswoole 3.3 一、安装swoole扩展 二、…