简明docker快速入门并实践方法
简明docker快速入门并实践方法
- 前言:
- 1. 什么是Docker?
- 2. Docker的基本概念
- 3. 安装配置Docker
- 4. Docker基本命令:
- 5. 简单实践:拉取Nginx镜像-自定义配置-推送镜像
- 步骤 1:拉取Nginx镜像
- 步骤 1.5(可选):运行Nginx容器以熟悉操作
- 步骤 2:创建自定义Nginx配置文件
- 步骤 3:创建Dockerfile
- 步骤 4:构建Docker镜像
- 步骤 5:运行Docker容器
- 步骤 6(可选):登录Docker Hub并推送镜像
- 6.补充内容
- Docker网络的基本概念
- Docker网络的基本命令
前言:
这是一篇简明docker快速入门并实践方法,目的是希望大家在半个小时内对docker快速了解并进行操作。故比较简洁(不过基本的使用方法都包含了),建议和那些更详细的知识帖结合起来看。
下面有两个视频,第一个视频看完可以对docker有基本的了解。第二个视频看完可以学会一些docker的实操操作。大家可以先看第一个视频后,再根据我下面分享的知识直接进行docker
的实践操作:
- 改变软件行业的技术!程序员、软件爱好者必须掌握的Docker,到底是什么?
- 保姆级Docker入门教程:10分钟从零开始彻底掌握 Docker,0 基础到实战部署
1. 什么是Docker?
Docker是基于Linux
容器技术的一种应用,它使得开发者能够将应用程序及其依赖打包成一个轻量级、可移植的容器。从而确保该应用能够在任何环境中一致地运行。相比传统的虚拟机技术,Docker更加高效和快速,因为它不包含整个操作系统,而是共享主机操作系统的内核。
2. Docker的基本概念
- 镜像(Image):
- 用于创建容器的只读模板,包含运行某个应用所需的所有代码、库、配置文件等。
- 使用
docker pull <image_name>
从Docker Hub拉取镜像。
- 容器(Container):
- 镜像的运行实例。它可以被启动、开始、停止、删除,并且可以通过Docker命令行接口与之交互。
- 使用
docker run <image_name>
启动容器
- 仓库(Repository):
- 存储和分享Docker镜像的地方。分为公共仓库(如Docker Hub)和私有仓库。
- 使用
docker login
登录Docker Hub
,docker push <image_name>
推送镜像。
- Dockerfile
Dockerfile
定义了构建镜像的步骤,通过docker build -t <image_name> .
命令创建镜像。- 示例:
FROM ubuntu:latest RUN apt-get update && apt-get install -y nginx EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
3. 安装配置Docker
访问Docker官网下载适合的版本。对于Windows和macOS用户,推荐使用Docker Desktop
,它集成了Docker
引擎、Docker CLI
客户端和其他实用工具。
-
安装Docker:
- 访问Docker官网,根据你的操作系统(
Windows
、macOS
、Linux
)下载并安装Docker Desktop
或Docker Engine
。 - 安装过程中,可以参考这两个帖子:1. 2024最新 Windows系统安装docker教程,2. 在windows安装Docker到指定路径
- 安装完成后,通过命令行(如
Windows
的PowerShell
或Linux
的Terminal
)运行docker --version
检查安装是否成功。
- 访问Docker官网,根据你的操作系统(
-
基本配置:
- 登录
Docker Hub
(可选,用于拉取或推送镜像):docker login
- 配置
Docker
以使用非默认设置(如代理、存储驱动等),可参考官方文档。
- 登录
4. Docker基本命令:
- 基本命令
docker --version
:检查Docker是否正确安装及当前版本。docker pull <image-name>
:从Docker Hub下载指定的镜像。docker images
:列出本地所有的镜像。docker run <image_name>
:启动容器。docker run -it --rm <image-name>
:基于镜像启动一个新的容器,并进入其内部shell环境。docker ps
:显示正在运行的容器。docker ps -a
:查看所有容器(包括停止的)。docker stop <container-id>
:停止指定ID的容器。docker rm <container_id>
:删除指定ID的容器docker tag <镜像名>:<标签> <仓库用户名>/<镜像名>:<标签>
: 为自己设置的镜像添加标签docker push <仓库用户名>/<镜像名>:<标签>
推送镜像到仓库
5. 简单实践:拉取Nginx镜像-自定义配置-推送镜像
步骤 1:拉取Nginx镜像
首先,从Docker Hub拉取官方的Nginx镜像:
docker pull nginx:latest
确认镜像已成功拉取:
docker images
你应能在列表中看到名为nginx
且标签为latest
的镜像。
操作解释:
docker pull
命令用于从Docker Hub或其他容器镜像仓库中拉取镜像。nginx:latest
指定了要拉取的镜像名称和标签(这里是最新的稳定版)。- 使用
docker images
命令查看本地已有的镜像列表,确认nginx镜像是否已成功拉取。
步骤 1.5(可选):运行Nginx容器以熟悉操作
docker run -d -p 8080:80 --name my-test-nginx nginx:latest
-d
表示以守护进程模式运行容器。-p 8080:80
将容器的80端口映射到主机的8080端口。--name my-test-nginx
为容器指定一个名称。
现在,你可以在浏览器中访问 http://localhost:8080
,应该会看到Nginx
的默认欢迎页面。
注意:在继续下一步之前,你可以使用 docker stop my-test-nginx
停止这个容器,并使用 docker rm my-test-nginx
删除它(如果你不再需要它的话,不过这里不删)。
docker stop my-test-nginx
docker rm my-test-nginx
步骤 2:创建自定义Nginx配置文件
在创建自定义配置文件前,先了解Nginx
默认配置的关键部分。Nginx
的主配置文件通常位于/etc/nginx/nginx.conf
,它定义了Nginx
的工作方式、事件处理、HTTP
服务器设置等。
现在,我们将创建一个自定义配置文件。首先,首先,创建一个新的目录用于存放你的Nginx
配置文件和Dockerfile
文件。例如,创建名为my-nginx-config
的目录:
mkdir my-nginx-config
cd my-nginx-config
然后,在该目录中创建一个名为nginx.conf
的文件,并添加以下内容:(这是一个简化的nginx.conf
示例,它保留了Nginx
的基本功能,并且容易理解)
user nginx;
worker_processes 1; # 对于简单实践,我们可以只使用一个工作进程error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {worker_connections 1024; # 每个worker进程的最大连接数
}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;include /etc/nginx/conf.d/*.conf; # 默认包含的配置文件目录,可以添加自定义配置# 定义一个简单的服务器块,用于测试server {listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html index.htm;}# 错误页面处理error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}}
}
步骤 3:创建Dockerfile
在同一目录下(my-nginx-config
),创建一个名为Dockerfile
的文件,并添加以下内容:
# 使用官方的Nginx镜像作为基础镜像
FROM nginx:latest# 将当前目录下的nginx.conf文件复制到容器中的/etc/nginx/nginx.conf位置.
# 注意:这里假设Dockerfile和nginx.conf在同一目录下
COPY nginx.conf /etc/nginx/nginx.conf# 如果有其他配置文件或静态资源,也可在此处复制
# COPY default.conf /etc/nginx/conf.d/default.conf
# COPY html/ /usr/share/nginx/html/# 暴露80端口(Nginx默认端口)
EXPOSE 80# 启动Nginx服务,并保持在前台运行(daemon off)
CMD ["nginx", "-g", "daemon off;"]
解释:
COPY nginx.conf /etc/nginx/nginx.conf
:这条指令将本地(构建上下文)的nginx.conf
文件复制到容器内的/etc/nginx/nginx.conf
位置,替换掉容器默认的Nginx
配置文件。EXPOSE 80
:这条指令告诉Docker
,容器在运行时需要监听80
端口(虽然这不是必需的,因为Nginx
默认监听80
端口,但声明一下是个好习惯)。CMD ["nginx", "-g", "daemon off;"]
:这条指令指定了容器启动时默认执行的命令。这里使用daemon off
参数是为了让Nginx在前台运行,这样Docker容器就不会因为Nginx进入后台而立即退出。
步骤 4:构建Docker镜像
返回上一级目录(包含Dockerfile
和nginx.conf
的目录),然后构建Docker
镜像:
docker build -t my-custom-nginx .
- 这将创建一个名为
my-custom-nginx
的Docker镜像。 -t
选项用于为镜像指定标签,.
表示当前目录为构建上下文。
步骤 5:运行Docker容器
使用刚刚构建的镜像运行容器:
docker run -d -p 8080:80 --name my-custom-nginx-container my-custom-nginx
- 这将启动一个名为
my-custom-nginx-container
的容器,并将容器的80
端口映射到主机的8080
端口。 - 访问
http://localhost:8080
,你将看到基于自定义配置的Nginx页面。
步骤 6(可选):登录Docker Hub并推送镜像
首先,登录Docker Hub:
docker login
然后,为镜像打标签(如果你的Docker Hub
用户名是your-username
):
docker tag my-custom-nginx your-username/my-custom-nginx
最后,推送镜像到Docker Hub
:
docker push your-username/my-custom-nginx
至此,你已经成功地创建了一个自定义的Nginx
镜像,并将其推送到了Docker Hub
。
6.补充内容
Docker网络的基本概念
- 网络(Networking):
- Docker容器可以通过Docker网络相互通信,也可以与外部网络通信。Docker提供了多种网络模式,如bridge、host、overlay等。
- 卷(Volumes):
- Docker卷用于持久化数据,即使容器被删除,卷中的数据仍然保留。这有助于数据的备份、恢复和迁移。
- Compose(docker-compose):
- Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过
docker-compose.yml
文件,可以轻松地配置和管理多个容器的启动、停止和连接。
- Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过
Docker网络的基本命令
docker network ls
:列出所有Docker网络。docker volume ls
:列出所有Docker卷。docker-compose up
:根据docker-compose.yml
文件启动所有服务。docker-compose down
:停止并移除由docker-compose.yml
定义的所有容器、网络、卷和默认网络。
相关文章:
简明docker快速入门并实践方法
简明docker快速入门并实践方法 前言:1. 什么是Docker?2. Docker的基本概念3. 安装配置Docker4. Docker基本命令:5. 简单实践:拉取Nginx镜像-自定义配置-推送镜像步骤 1:拉取Nginx镜像步骤 1.5(可选…...

《MambaIR:一种基于状态空间模型的简单图像修复基线方法》学习笔记
paper:2402.15648 目录 摘要 一、引言 1、模型性能的提升依赖于网络感受野的扩大: 2、全局感受野和高效计算之间存在固有矛盾: 3、改进版 Mamba的巨大潜力 4、Mamba 在图像修复任务中仍面临以下挑战: 5、方法 6、主要贡献…...

链式前向星的写法
【图论02】动画说图的三种保存方式 降低理解门槛 邻接表 链式前向星 邻接矩阵_哔哩哔哩_bilibili 杭电ACM刘老师-算法入门培训-第12讲-拓扑排序及链式前向星_哔哩哔哩_bilibili 图论003链式前向星_哔哩哔哩_bilibili(链式前向星的遍历) head数组的下标…...

【逆境中绽放:万字回顾2024我在挑战中突破自我】
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 一、引言二、个人成长与盘点情感与心理成长学习与技能提升其它荣誉 三、年度创作历程回顾创作内容概…...
尺取法(算法优化技巧)
问题和序列的区间有关,且需要操作两个变量,可以用两个下标(指针)i 和 j 扫描区间。 1,反向扫描,i 从头,j 从尾,在中间相遇。 例1.1(P37) 找指定和的整数对…...
基于 K-Means 聚类分析实现人脸照片的快速分类
注:本文在创作过程中得到了 ChatGPT、DeepSeek、Kimi 的智能辅助支持,由作者本人完成最终审阅。 在 “视频是不能 P 的” 系列文章中,博主曾先后分享过人脸检测、人脸识别等相关主题的内容。今天,博主想和大家讨论的是人脸分类问题。你是否曾在人群中认错人,或是盯着熟人的…...

【漏洞预警】FortiOS 和 FortiProxy 身份认证绕过漏洞(CVE-2024-55591)
文章目录 一、产品简介二、漏洞描述三、影响版本四、漏洞检测方法五、解决方案 一、产品简介 FortiOS是Fortinet公司核心的网络安全操作系统,广泛应用于FortiGate下一代防火墙,为用户提供防火墙、VPN、入侵防御、应用控制等多种安全功能。 FortiProxy则…...

7.5.4 MVCC优化测试
作者: h5n1 原文来源: https://tidb.net/blog/4e02d900 1. 背景 由于MVCC 版本数量过多导致rocksdb扫描key数量过多影响SQL执行时间是tidb经常出现问的问题,tidb也一直在致力于优化该问题。 一些优化方式包括比: (1) 从传统…...

STM32 FreeRTOS 事件标志组
目录 事件标志组简介 基本概念 1、事件位(事件标志) 2、事件组 事件组和事件位数据类型 事件标志组和信号量的区别 事件标志组相关API函数介绍 事件标志组简介 基本概念 当在嵌入式系统中运行多个任务时,这些任务可能需要相互通信&am…...

生成树机制实验
1 实验内容 1、基于已有代码,实现生成树运行机制,对于给定拓扑(four_node_ring.py),计算输出相应状态下的生成树拓扑 2、构造一个不少于7个节点,冗余链路不少于2条的拓扑,节点和端口的命名规则可参考four_node_ring.py,使用stp程序计算输出生成树拓扑 2 实验原理 一、…...

企业分类相似度筛选实战:基于规则与向量方法的对比分析
文章目录 企业表相似类别筛选实战项目背景介绍效果展示基于规则的效果基于向量相似的效果 说明相关文章推荐 企业表相似类别筛选实战 项目背景 在当下RAG(检索增强生成)技术应用不断发展的背景下,掌握文本相似算法不仅能够助力信息检索&…...

2024年博客之星年度评选—创作影响力评审入围名单公布
2024年博客之星活动地址https://www.csdn.net/blogstar2024 TOP 300 榜单排名 用户昵称博客主页 身份 认证 评分 原创 博文 评分 平均 质量分评分 互动数据评分 总分排名三掌柜666三掌柜666-CSDN博客1001002001005001wkd_007wkd_007-CSDN博客1001002001005002栗筝ihttps:/…...

递归40题!再见递归
简介:40个问题,有难有易,均使用递归完成,需要C/C的指针、字符串、数组、链表等基础知识作为基础。 1、数字出现的次数 由键盘录入一个正整数,求该整数中每个数字出现的次数。 输入:19931003 输出…...

社区版Dify实现文生视频 LLM+ComfyUI+混元视频
社区版Dify实现文生视频 LLMComfyUI混元视频 一、 社区版Dify实现私有化混元视频效果二、为什么社区版Dify可以在对话框实现文生视频?LLMComfyUI混元视频 实现流程图(重点)1. 文生视频模型支持ComfyUI2. ComfyUI可以轻松导出API实现封装3. Di…...

【LLM】Openai-o1及o1类复现方法
note 可以从更为本质的方案出发,通过分析强化学习的方法,看看如何实现o1,但其中的核心就是在于,如何有效地初始化策略、设计奖励函数、实现高效的搜索算法以及利用强化学习进行学习和优化。 文章目录 note一、Imitate, Explore, …...
jlatexmath-android如何实现自定义渲染字符
使用jlatexmath-android的过程,如果出现个别字符渲染不了,会导致无法显示 常用的做法是新增自定义字体切换系统默认字体渲染,下面我们介绍第2种方法。 修改流程: 1、到jlatexmath-android的官网下载源码到本地,导入…...
dockerhub上一些镜像
K8s下网络排障工具 https://hub.docker.com/r/nicolaka/netshoot ex kubectl run tmp-shell --rm -i --tty --image nicolaka/netshoot -- /bin/bash # 主机的net ns下运行 kubectl run tmp-shell --rm -i --tty --overrides{"spec": {"hostNetwork": tru…...
Python 爬虫学习指南与资料分享
Python爬虫学习资料 Python爬虫学习资料 Python爬虫学习资料 在数字化浪潮中,Python 爬虫作为强大的数据获取工具,为众多领域提供关键支持。想要系统掌握这门技术,以下的学习指南与资料分享将为你照亮前行道路。 一、学习指南 入门奠基 …...
TypeScript特有运算符和操作符
文章目录 TypeScript 特有运算符1. keyof2. typeof3. in4. extends5. is6. as 和 <Type>7. never8. readonly9. ?10. []11. | 和 &12. !13. ?? 和 ?. 总结 TypeScript 特有运算符 1. keyof 作用:用于获取对象类型的所有键(属性名&#x…...
介绍下常用的前端框架及时优缺点
以下是一些常用的前端框架及其优缺点介绍: React • 优点 • 组件化架构:可构建可复用的UI组件,提高开发效率和组件可维护性。 • 虚拟DOM:高效更新页面,减少直接操作DOM的性能开销。 • 灵活性和可扩展性…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)
旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据!该数据集源自2025年4月发表于《地理学报》的论文成果…...