简明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的性能开销。 • 灵活性和可扩展性…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践
01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...
