【Docker从入门到进阶】01.介绍 02.基础使用
1. 介绍
1.1. 什么是 Docker
Docker 是一个开源的平台,用于开发、发布和运行应用程序。它使开发者能够以更精简的方式封装应用及其依赖,做到“打包一次,到处运行”。通过 Docker,您可以创建轻量级、可移植的容器,每个容器内运行着一个应用程序及其所有依赖环境。
1.1.1. Docker 简介
Docker 提供了一种一致的应用运行环境,解决了“在我机器上正常工作”的问题。这是通过将应用程序及其所需的一切打包到容器中实现的,这样相同的容器可以在任何环境中运行。
1.1.2. Docker 的用途和优势
-
快速应用交付和部署:通过 Docker,可以用同一个配置快速测试、发布和大规模部署应用。
-
可移植性:无论是在本地开发环境、处理器架构不同的测试环境,还是在云端的生产环境,Docker 容器都能保持应用一致运行。
-
资源隔离和分配:Docker 使用 Linux 内核的功能,如 cgroups 和命名空间,来独立于操作系统隔离和分配资源。
-
高效利用系统资源:与虚拟机相比,Docker 容器使用的资源更少,能够运行更多的容器实例。
1.1.3. 容器 vs 虚拟机
-
虚拟机:在主机操作系统上通过虚拟化软件仿真硬件运行完整的操作系统。资源开销大,启动慢,但更适合运行不同操作系统内核。
-
容器:共享主机操作系统内核,通过隔离进程来实现资源使用控制。容器启动快,占用资源少,适合应用的轻量化和快速扩展。
1.2. Docker 的基本组成部分
1.2.1. Docker 镜像(Image)
Docker 镜像是一个只读模板,包含创建 Docker 容器的指令。镜像可以基于基础镜像进行拓展,添加新的指令来构建最终的应用程序执行环境。镜像是构建容器的基础,可以使用公共的镜像仓库,比如 Docker Hub,也可以使用私有仓库。
1.2.2. Docker 容器(Container)
Docker 容器是由镜像创建的可运行实例。容器是用户与应用程序交互的具体实现,它是独立的并提供一个隔离的运行环境。每个容器都与其他容器以及主机隔离,可作为一种本地或云端的环境部署。
1.2.3. Docker 仓库(Registry)
Docker 仓库是存储和分发镜像的平台。通过 Docker 仓库,您可以查找并下载他人共享的镜像,也可以上传自己的镜像用于共享或备份。常用的公共仓库是 Docker Hub,但根据需求可以搭建私有的 Docker 仓库。
2. 基础使用
本节将介绍Docker的基础操作,包括如何安装Docker、使用基本命令来管理镜像和容器。掌握这些内容将为您处理更复杂的Docker操作奠定基础。
2.1. 安装 Docker
Docker可在多种操作系统上安装,以下是常见系统的安装步骤:
-
Windows:使用Docker Desktop进行安装,需提前启用Hyper-V。
- 下载Docker Desktop安装包。
- 运行安装包并按照提示完成安装。
- 启动Docker Desktop并成功运行时,系统托盘将显示Docker图标。
-
macOS:通过Docker Desktop安装,需启用Apple Hypervisor。
- 下载Mac版Docker Desktop。
- 打开下载的
dmg文件,将Docker图标拖入“应用程序”文件夹。 - 运行Docker应用,初次启动可能需要输入管理员密码。
-
Linux:通常通过包管理工具安装(CentOS、Ubuntu为例)。
- 对于Ubuntu:
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io - 对于CentOS:
sudo yum install docker-ce docker-ce-cli containerd.io
- 对于Ubuntu:
-
验证安装是否成功:执行以下命令以检查Docker版本:
docker --version若显示版本信息,则安装成功。
2.2. 基本命令
掌握以下基本命令,便可轻松进行Docker的常规操作:
-
版本信息:
docker version
显示Docker客户端和服务端的版本信息。 -
系统信息:
docker info
查看Docker的具体设置信息,包含系统可用资源、已用资源等。 -
运行容器:
docker run
启动一个新的容器。docker run hello-world该命令从Docker Hub中拉取
hello-world镜像并运行。 -
列出容器:
docker ps:列出当前正在运行的容器。docker ps -a:列出所有容器包括已停止的。
-
管理容器:
- 停止容器:
docker stop <container_id> - 启动容器:
docker start <container_id> - 重启容器:
docker restart <container_id>
- 停止容器:
-
删除容器与镜像:
- 删除容器:
docker rm <container_id> - 删除镜像:
docker rmi <image_id>
- 删除容器:
2.3. 镜像管理
镜像是Docker构建的基础,通过管理镜像,您可以控制容器的基础环境:
2.3.1. 拉取镜像
在内网环境中,通常需要通过特定的镜像源或者私有镜像仓库来获取镜像。假设已在内网搭建了私有镜像仓库:
-
配置镜像源:在内网中使用私有仓库时,需配置docker以访问该仓库,编辑或创建
daemon.json文件:{"registry-mirrors": ["http://your-private-registry"] }然后,重启docker服务。
-
拉取镜像:
通过命令行下载镜像:docker pull <your-private-registry>/<image_name>:<tag>使用正确的仓库地址和标签来指定镜像版本。
2.3.2. 列出镜像
在下载或创建镜像后,可以查看当前系统上存储的所有镜像:
- 执行以下命令来查看镜像列表:
此命令将显示镜像仓库名称、标签、镜像ID、创建时间及其虚拟大小。docker images
2.3.3. 删除镜像
当不再需要某些镜像时,可以手动删除以节省磁盘空间:
- 查找镜像ID:首先使用
docker images命令找到目标镜像的ID。 - 删除特定镜像:
如果镜像正在被某些容器使用,需先停止并删除这些容器。docker rmi <image_id>
2.3.4. 创建镜像(可选)
在内网环境中,您可能需要自己构建镜像:
-
编写Dockerfile:
创建一个Dockerfile,定义您需要的环境和软件安装。FROM ubuntu:latest RUN apt-get update && apt-get install -y <your-required-packages> COPY ./your-local-file /some/path CMD ["your-command"] -
构建镜像:
使用以下命令构建镜像:docker build -t <your-image-name>:<tag> .在执行的目录中包含
Dockerfile。
2.3.5. 镜像保存与加载
对于内网环境中,如需在不同主机之间转移镜像而不通过镜像仓库,您可以使用保存和加载功能:
2.3.5.1. 保存镜像为文件
-
命令:
docker save可以将镜像导出到一个文件中,以便在其他系统上重新导入。假设错误报告创建ubuntu镜像文件:
docker save -o ubuntu_latest.tar ubuntu:latest -
用途:适用于需要将镜像转移到无网络或者不便于网络传输的环境。
2.3.5.2. 加载镜像文件
-
命令:
docker load从tar文件中加载镜像到本地镜像仓库:
docker load -i ubuntu_latest.tar -
用途:从转移的镜像文件中恢复镜像,此操作将镜像加载到Docker环境中,可以随时使用。
2.3.6. 导出和导入镜像
导出和导入略有不同,适用于不同场景,主要用于容器的迁移:
2.3.6.1. 导出镜像
-
命令:
docker export如需导出一个正在运行或已停止的具体容器,而非镜像:
docker export -o my_container.tar <container_id>
2.3.6.2. 导入镜像
-
命令:
docker import将导入的tar包文件重新创建为镜像:
cat my_container.tar | docker import - my_new_image:latest
2.3.7. 镜像的标记
标记(tag)操作允许您为镜像创建别名,以便于管理和引用不同版本的镜像:
-
命令:
docker tag为现有镜像分配新标签:
docker tag ubuntu:latest myrepo/ubuntu:optimized
2.3.8. 清理未使用的镜像
-
命令:
docker image prune删除所有未被使用过的所有悬挂(dangling)镜像:
docker image prune
2.3.9. 镜像的历史
-
命令:
docker history查看镜像的创建历史和层次结构,帮助理解镜像是如何构建的:
docker history ubuntu:latest
2.4. 容器管理
管理容器是理解Docker的关键之一,掌握容器的创建、启动和交互操作可以有效地利用Docker进行应用部署和维护。以下是详细的基本操作指南:
2.4.1. 创建和启动容器
使用 docker run 命令是创建和启动容器的主要方式:
-
命令:
docker run通过该命令可以从指定镜像创建并启动一个新的容器。例如:
docker run -d --name my_container ubuntu:latest-d:后台运行容器。--name my_container:为容器指定一个名字,方便管理和访问。ubuntu:latest:使用的镜像名称和标签。
-
启动已停止的容器:
使用
docker start启动:docker start my_container
2.4.2. 进入容器
有时需要进入容器内部进行操作或调试,以下是主要的两种方式:
-
执行命令行(交互式):
使用
docker exec启动新进程:docker exec -it my_container bash-it:以交互方式启动终端。
-
附加到终端:
使用
docker attach连接到容器的标准输入、输出和错误输出,适用于希望与容器主程序交互的场景:docker attach my_container- 这种方法将使您直接连接到运行中的应用程序。
2.4.3. 查看容器日志
查看日志对于调试和监控容器运行非常重要:
-
命令:
docker logs获取容器输出的日志信息:
docker logs my_container -
额外选项:
--follow(-f):实时跟踪日志输出。--tail:显示末尾若干行。
如实时查看日志尾部10行:
docker logs -f --tail 10 my_container
2.4.4. 停止与删除容器
对停止和删除容器进行合理管理,可以优化资源使用:
-
停止容器:
用
docker stop安全停止容器,它将发送SIGTERM信号:docker stop my_container -
强制终止容器:
用
docker kill强制终止执行,发送SIGKILL信号:docker kill my_container -
删除容器:
删除停止的容器是释放资源的好方法:
docker rm my_container- 使用
-f强制删除正在运行的容器。
- 使用
熟练掌握这些容器管理指令将让您在Docker的世界中更加游刃有余,实现高效的容器化管理和支持。
当你在一个容器中更新软件和安装必要的插件,并希望将其复制到另一台内网机器上,你可以通过以下几个步骤来实现:
2.5. 容器创建镜像的过程
2.5.1. 通过容器创建新的镜像
在容器上操作完毕后,你需要将其变化保存为一个新的镜像,这样才能在其他机器上重现相同的环境。
-
提交容器为镜像:
使用
docker commit将容器的当前状态保存为一个新的镜像:docker commit <container_id> <new_image_name>:<tag>例子:
docker commit my_container my_updated_image:latest
2.5.2. 保存镜像为文件
将创建的新镜像保存为一个可移动的文件,这样可以在其他机器上加载:
-
保存镜像:
使用
docker save命令:docker save -o my_updated_image.tar my_updated_image:latest这将生成一个
.tar文件,包含你镜像的所有数据。
2.5.3. 将镜像文件移动到其他机器
使用任何适合的手段,将生成的.tar文件传输到目标内网机器上,例如:
- 使用USB驱动器或其他物理介质。
- 通过内网文件共享服务(如Samba、NFS等)。
- 使用安全拷贝工具(如
scp若在内网有SSH可用)。
2.5.4. 在新机器上加载镜像
在接收.tar文件的内网机器上,使用 docker load 命令来恢复你的镜像:
-
加载镜像:
docker load -i my_updated_image.tar这将在新机器上将镜像加载到Docker中,并且可以通过
docker images检查确认该镜像是否存在。
2.5.5. 运行新镜像的容器
在新机器上,从加载的镜像启动一个新的容器。
-
启动容器:
docker run -d --name new_container my_updated_image:latest
这样,您就可以在新的内网环境中使用相同的更新镜像和配置进行操作了。
通过这些步骤,您可以安全高效地在内网环境中部署和共享更新后的Docker镜像,无需依赖外部网络。
相关文章:
【Docker从入门到进阶】01.介绍 02.基础使用
1. 介绍 1.1. 什么是 Docker Docker 是一个开源的平台,用于开发、发布和运行应用程序。它使开发者能够以更精简的方式封装应用及其依赖,做到“打包一次,到处运行”。通过 Docker,您可以创建轻量级、可移植的容器,每个…...
GraphRAG-Local-UI - 基于 GraphRAG 支持本地的聊天UI
文章目录 一、关于 GraphRAG-Local-UI 🕸️特点🌟🗺️路线图最近更新即将推出的功能 二、📦安装和设置三、使用入门🚀1、创建索引目录2、添加示例数据(可选)3、初始化索引文件夹4、配置设置5、定…...
Java 根据字符生成背景透明的图片
上代码 package com.example.demotest.controller;/*** Author shaolin* Date 2024-10-08 10:11**/import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; impor…...
树莓派3b安装ubuntu18.04服务器系统server配置网线连接
下载ubuntu镜像网址 img镜像,即树莓派官方烧录器使用的镜像网址 ubuntu18.04-server:ARM/RaspberryPi - Ubuntu Wiki 其他版本:Index of /ubuntu/releases 下载后解压即可。 发现使用官方烧录器烧录配置时配置wifi无论如何都不能使用&am…...
【AIGC】2022-NIPS-视频扩散模型
2022-NIPS-Video Diffusion Models 视频扩散模型摘要1. 引言2. 背景3. 视频扩散模型3.1. 重建引导采样以改进条件生成 4. 实验4.1. 无条件视频建模4.2. 视频预测4.3. 文本条件视频生成4.3.1 视频与图像建模的联合训练4.3.2 无分类器指导的效果4.3.3 更长序列的自回归视频扩展 5…...
从零开始构建:Python自定义脚本自动化你的日常任务
从零开始构建:Python自定义脚本自动化你的日常任务 Python 作为一种简洁且功能强大的编程语言,被广泛应用于各种自动化任务中。通过编写 Python 脚本,你可以轻松地将日常重复性工作自动化,例如文件操作、数据处理、网络爬虫、系统…...
【python实操】python小程序之对象的属性操作
引言 python小程序之对象的属性操作 文章目录 引言一、对象的属性操作1.1 题目1.2 代码1.3 代码解释 二、思考2.1 添加属性2.2 获取属性 一、对象的属性操作 1.1 题目 给对象添加属性 1.2 代码 class Cat:# 在缩进中书写⽅法def eat(self):# self 会⾃动出现,暂不管print(f…...
HCIP——网络类型及数据链路层协议
目录 网络类型的分类 数据链路层协议 MA网络 以太网协议 P2P网络 HDLC---高级数据链路控制协议 HDLC网络搭建 PPP---点到点协议 PPP协议的优点 PPP数据帧封装结构编辑 PPP会话的搭建 路建立阶段---LCP建立 认证阶段 PAP CHAP 网络层协议协商阶段---NCP协商 网…...
数据结构——栈与队列的实现(全码)
一 栈的概念 栈是一种特殊的线性表,栈内数据遵循先进后出(LIFO)的原则,对于栈,只能在同一侧进行入栈和出栈操作。 入栈操作和出栈操作是在栈的同一侧进行的,如图示: 对于栈这种数据类型,我们可以采用链表或…...
MacOS编译和安装Poco库的方法
1.从官网git下载最新的poco源代码 在/usr/local路径下创建Poco文件夹,克隆Poco源代码 sudo git clone -b poco-1.13.3-release https://github.com/pocoproject/poco.git2.等了一会后,报错啦!!! error: RPC failed…...
医院管理新境界:Spring Boot技术突破
6系统测试 6.1概念和意义 测试的定义:程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为: 目的:发现程序的错误; 任务:通过在计算机上执行程序,暴露程序中潜在的错误。 另一个…...
Docker 环境下 MinIO 监控实战:通过 Prometheus 实现集群与桶级别性能监控
Docker 环境下 MinIO 监控实战:通过 Prometheus 实现集群与桶级别性能监控 文章目录 Docker 环境下 MinIO 监控实战:通过 Prometheus 实现集群与桶级别性能监控一 获取 prometheus 配置二 配置的内容三 prometheus 的配置1)集群级别的指标2&a…...
渗透测试入门学习——使用python脚本自动跟踪csrf_token实现对网站登录界面的暴力破解
目录 写在前面 使用方法 相关代码 写在前面 最近在学习使用Burp Suite时发现其intruder模块无法实现多种模式的混合使用,就如想要暴力破解账号和口令两个区域并同时跟踪网页的csrf_token时BP似乎不能很方便的实现这一功能,于是自己在练习时就想到了用…...
stc8最小系统使用usb下载程序,关于断电的避坑
首先,按stc官方的原理图做好最小系统。 下面,来看一下stc手册中的操作步骤 USB-ISP 下载程序步骤: 1、按下板子上的 P3.2/INT0 按键,就是 P3.2 接地 2、给目标芯片重新上电,不管之前是否已通电。 电子开关是按下停电后…...
API 数据接口:使用操作流程与安全指南
在当今数字化高速发展的时代,API 数据接口如同构建数字世界的关键纽带,将不同的软件系统和服务紧密连接在一起。无论是企业开发者致力于提升业务效率,还是个人用户追求更便捷的数字体验,深入了解 API 数据接口的使用操作流程以及全…...
elasticsearch 8.2 版本如何设置config/elasticsearch.yml
在Elasticsearch 8.2版本中,`config/elasticsearch.yml`文件是用于配置Elasticsearch的主要配置文件。你可以通过编辑这个文件来设置各种配置选项。以下是一些常见的配置选项及其设置方法: ### 1. 基本配置 #### 集群名称 ```yaml cluster.name: my-cluster ``` #### 节点…...
华为 HCIP-Datacom H12-821 题库 (33)
🐣博客最下方微信公众号回复题库,领取题库和教学资源 🐤诚挚欢迎IT交流有兴趣的公众号回复交流群 🦘公众号会持续更新网络小知识😼 1.VLAN Pool 只要通过一个 SSID 就能够同时支持多个业务 VLAN,从而缩小广播域&#…...
【网络篇】计算机网络——运输层详述(笔记)
目录 一、运输层 1. 概述 2. 运输层和网络层的关系 3. 运输层协议概述 二、多路复用和多路分解 1. 综述 2. 无连接的多路复用与多路分解(UDP) 3. 面向连接的多路复用与多路分解(TCP) 4. Web 服务器与TCP 三、UDP&#x…...
用java编写飞机大战
游戏界面使用JFrame和JPanel构建。背景图通过BG类绘制。英雄机和敌机在界面上显示并移动。子弹从英雄机发射并在屏幕上移动。游戏有四种状态:READY、RUNNING、PAUSE、GAMEOVER。状态通过鼠标点击进行切换:点击开始游戏(从READY变为RUNNING&am…...
java Map中get方法爆错NullPointerException
代码如下: public class Hello {public static void main(String[] args) {Map<Integer,Integer> map new HashMap<>();map.put(2,1);int i map.get(1); System.out.println(i);} }运行出错,看代码很明显是get到一个不存在map的值&#x…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
