文章目录

  • 一、名词概念
    • Docker镜像
    • Docker镜像仓库
  • 二、Docker镜像仓库常用命令
  • 三、容器启动相关指令
    • Nginx
    • docker run
    • docker ps
  • 四、综合实例
    • 1.搭建Nginx服务
    • 2.Docker hub上创建私有仓库

一、名词概念

Docker镜像

Docker 镜像:是一个只读的模板,它包含了创建并运行一个 Docker 容器所需的所有指令、文件系统和参数。
  可以把它想象成一个软件的安装包或模具。这个安装包不仅包含了程序本身,还包含了它运行所需的所有依赖项(如库、环境变量、配置文件等)。

一个生动的比喻:做蛋糕

  1. Dockerfile(食谱):这是一个文本文件,里面写满了做蛋糕的指令,比如“准备面粉”、“加入鸡蛋”、“在 180°C 下烘烤 30 分钟”。
  2. Docker 镜像(蛋糕模具):你根据“食谱”(Dockerfile)的指令,准备好所有原材料(代码、依赖库),并烤好了一个完整的、但还没切的蛋糕。这个蛋糕被做成了一个标准的“模具”(镜像)。这个模具是只读的,保证了每次用它做出来的蛋糕都是一模一样的。
  3. Docker 容器(切下来的蛋糕):当你从“模具”(镜像)里切下一块蛋糕来吃时,这块蛋糕就是一个容器。它是镜像的一个运行实例,是可读可写的。你可以在这块蛋糕上加上草莓(对容器进行修改),但这不会影响原来的模具(镜像)。

Docker镜像仓库

Docker 镜像仓库:是一个集中存储和分发 Docker 镜像的服务,就像一个专门的应用商店(如 iOS 的 App Store)或代码仓库(如 GitHub),但它只管理 Docker 镜像。

你可以把它想象成一个图书馆

  • = Docker 镜像

  • 图书馆 = Docker 镜像仓库

  • 借书/还书 = 拉取镜像/推送镜像

docker官方架构图:
在这里插入图片描述
docker镜像仓库架构图:
在这里插入图片描述
docker官网:https://www.docker.com/

实际工作镜像仓库的使用
在这里插入图片描述

  • 开发环境:开发人员使用的一套环境
  • 测试环境:需求开发完成后,发布到供测试人员进行测试的环境
  • 预发布环境:版本测试完成后,发布到和生产类似的环境,提前模拟生产发布
  • 生产环境:真正面向客户的环境

二、Docker镜像仓库常用命令

docker命令学习
命令行:docker --help
官网学习:www.docker.com -> Developers -> Documentation -> Reference ->Docker CLI

docker login

功能:登陆到一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub

语法:

docker login [OPTIONS] [SERVER]

关键参数

  • -u: 登陆的用户名
  • -p: 登陆的密码
    示例:
docker login
docker login https://index.docker.io/vi/
docker login -u zhangsan

docker pull
功能:从镜像仓库中拉取或者更新指定镜像到本地
语法:

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

关键参数:

  • -a:拉取所有 tagged 镜像
  • --disable-content-trust:忽略镜像的校验,默认开启
    示例:
docker pull nginx:1.23.3

docker push
功能:将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
语法:

docker push [OPTIONS] NAME[:TAG]

别名:docker image push
关键参数:

  • -a:推送所有 tagged 镜像
  • --disable-content-trust:忽略镜像的校验,默认开启

在推送push前需要在官网创建自己的仓库。push推送时需要用这个格式的标签名:用户名/仓库名:标签
使用tag命令将要推送的镜像起一个标签名:
比如:docker tag nginx:1.23.4 zhangsan/mybitnginx:v1.23.4
推送:

docker push zhangsan/mybitnginx:v1.23.4

docker search
功能:从 Docker Hub 查找镜像
语法:

docker search [OPTIONS] TERM 

关键参数:

  • --no-trunc:显示完整的镜像描述
  • -f <过滤条件>:列出收藏数不小于指定值的镜像
    示例:
docker search -f stars=10 nginx

docker logout
功能:登出一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
语法:

docker logout [SERVER]	

docker images
功能:列出本地镜像
语法:

docker images [OPTIONS] [REPOSITORY[:TAG]]  

别名:docker image ls, docker image list
关键参数:

  • -a:列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
  • --digests:显示镜像的摘要信息;
  • -f:显示满足条件的镜像;
  • --format:指定返回值的模板文件;
  • --no-trunc:显示完整的镜像信息;
  • -q:只显示镜像 ID。

docker image
功能:查看镜像详细信息
语法:

docker image inspect [OPTIONS] IMAGE [IMAGE...]

示例:

docker image list
docker image inspect 0f8498f13f3a
docker image inspect nginx:1.22.1

docker tag
功能:标记本地镜像,将其归入某一仓库
语法:

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]  

别名:docker image tag
示例:

docker tag ubuntu:22.04 zhangsan/myubuntu:v1.22.1

三、容器启动相关指令

Nginx

  Nginx是一款高性能的开源软件,最初被设计为“网页服务器”,但现在更广泛地被用作“反向代理”、“负载均衡器”和“HTTP 缓存”。
  可以把它想象成一个高效的“交通枢纽”或“万能前台”,它负责接收所有进入网站的流量(请求),然后智能地将这些流量引导到正确的服务器(或服务)上,同时还能处理安全、加速等多项任务。

  • 正向代理:代理客户端(如 VPN),替客户端去访问网站,隐藏客户的身份。
  • 反向代理:代理服务器端,替服务器接收客户端的请求。客户端并不知道真正处理它请求的是后端的哪台服务器。

反向代理

  • 隐藏后端架构:保护内部服务器(如 Node.js, Java, Python 应用服务器)的安全,不直接暴露在公网上。
  • 负载均衡:当你的网站访问量很大时,一台服务器会扛不住。你会拥有多台完全一样的服务器(形成一个服务器集群)。Nginx 作为反向代理,可以像一个大管家一样,把收到的用户请求“均匀地”分发给后端的多台服务器。
    • 扩展性:通过添加更多服务器来轻松应对高流量。
    • 高可用性:如果其中一台服务器宕机了,Nginx会自动停止将请求发往那台坏掉的机器,保证服务不中断。
    • 减轻单台服务器压力:每台服务器都不会过载。

HTTP 缓存
Nginx 可以把后端服务器的响应(如网页、图片)临时存储(缓存)在自己这里。
  工作流程:当第一个用户请求某个页面时,Nginx 会去后端服务器获取数据,然后返回给用户,同时自己保存一份。当第二个用户请求同一个页面时,Nginx直接把自己缓存的内容返回给用户,而不用再去麻烦后端服务器。

好处:

  • 极大加快响应速度:用户感觉网站变得飞快。
  • 极大减轻后端服务器压力:后端服务器只需要处理动态请求,静态内容由 Nginx 缓存提供。

Nginx安装

检查是否已经安装:ps -ef | grep nginx,如果有了就不用装
下载安装:

  • Ubuntu:sudo apt install nginx -y
  • CentOS:sudo yum install nginx -y
  • 启动:systemctl restart nginx

查看效果:
打开浏览器输入云服务器公网ip,会出现这样的网页:
在这里插入图片描述

docker run

功能: 创建一个新的容器并运行一个命令
语法:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

别名:docker container run

关键参数:

  • -d:后台运行容器,并返回容器 ID
  • -i:以交互模式运行容器,通常与 -t 同时使用
  • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用
  • -P:随机端口映射,容器内部端口随机映射到主机的端口
  • -p:指定端口映射,格式为:主机(宿主)端口:容器端口
  • --name="nginx-lb":为容器指定一个名称
  • -h "mars":指定容器的 hostname
  • -e username="ritchie":设置环境变量
  • --cpuset-cpus="0-2" or --cpuset-cpus="0,1,2":绑定容器到指定 CPU 运行
  • -m:设置容器使用内存最大值
  • --network="bridge":指定容器的网络连接类型
  • --link=[]:添加链接到另一个容器
  • --volume, -v:绑定一个卷
  • -rm:shell 退出的时候自动删除容器

示例:
到官网找到centos7
查看宿主机版本:cat /etc/*release*在这里插入图片描述
将centos:7拉取到本地:docker pull centos:7
运行centos:7:docker run centos:7
在这里插入图片描述
这里执行docker run 不带任何选项看上去没有任何效果,其实这个容器已经被打开了但因为没交互所以退出了。
使用docker ps -a可以看到历史执行过的容器

添加-it选项以交互形式运行容器,如下:
在这里插入图片描述
注意:通常不会单独使用-i或-t选项,需要两个一起使用,即-it(常用于交互式容器)

接下来我们运行一个nginx:1.24.0容器,如果本地没有会自动从服务器拉取。
在这里插入图片描述
使用docker ps查看运行状态

  当我们在浏览器中直接访问服务器(宿主机)时,访问的是宿主机本身的服务(如果有的话)。Docker容器拥有独立的网络命名空间,外网无法直接访问容器内的Nginx服务。需要通过端口映射将宿主机的端口与容器的端口进行绑定。例如,将宿主机的7070端口映射到容器Nginx的80端口后,当访问宿主机IP的7070端口时,流量会被自动转发到容器内部的80端口,从而访问到容器中的Nginx服务。
如下-p选项的使用:
在这里插入图片描述
在这里插入图片描述

-P是绑定随机端口,后面不用带任何信息,该选项很少使用,如:docker run -P -d nginx:1.24.0

--name选项改变容器名字,使用新起的容器名与其交互会变得很方便。
在这里插入图片描述
-h:改变容器主机名
在这里插入图片描述
-e:添加容器的环境变量
在这里插入图片描述
-m:设置容器使用内存最大值,如下给限定容器内存使用500MB
docker run -d -m 500m --name mynginx3 nginx:1.24.0
docker stats mynginx3
在这里插入图片描述

-rm选项:shell 退出的时候自动删除容器,使用docker ps -a是查不到的。
如:docker run -it --name=mycentos4 -rm centos:7

docker ps

功能: 列出容器信息
语法:

docker ps [OPTIONS]

别名:docker container ls, docker container list, docker container ps

关键参数:

  • -a:显示所有的容器,包括未运行的。
  • -f:根据条件过滤显示的内容。
  • --format:指定返回值的模板文件。如 json 或者 table
  • -l:显示 latest 的容器。
  • -n:列出最近创建的 n 个容器。
  • --no-trunc:不截断输出。
  • -q:静默模式,只显示容器编号。
  • -s:显示总的文件大小。

四、综合实例

1.搭建Nginx服务

查找nginx镜像版本:
方法一:shell中执行docker search nginx如下:(不推荐)
在这里插入图片描述
方法二:登陆官网查找:
在这里插入图片描述

  1. 拉取镜像:docker pull nginx:1.24.0
  2. 查看有没有到本地:docker images nginx
  3. 看详细信息:docker image inspect nginx:1.24.0
  4. 启动Nginx容器:
  • 绑定宿主机7077端口
  • 将容器重命名为myweb
  • 将主机名命名为myweb.com
  • 添加环境变量myenv=test
  • 后端运行

即:

docker run -p 7077:80 --name=myweb -h myweb.com -e myenv=test -d nginx:1.24.0

假设我们要调整首页:
添加选项-it,以前台交互的形式启动

docker run -p 7078:80 --name=myweb -h myweb.com -e myenv=test -it nginx:1.24.0 bash

此时nginx并没有启动,需要再命令行输入nginx启动nginx。
修改首页:

  1. 进入目录:cd /usr/share/nginx/html/
  2. 修改index.html中的内容如:
    在这里插入图片描述
    效果如下:
    在这里插入图片描述

2.Docker hub上创建私有仓库

BusyBox介绍
  BusyBox 是一个集成了三百多个最常用 Linux 命令和工具的软件。例如 ls、cat 和 echo 、grep、find、mount 以及 telnet等。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。而所有这一切功能却只有区区 1M 左右的大小。因海外带宽较小,我们拉取该镜像推送到自己的仓库。

CentOS安装:

  1. 创建一个目录:mkdir -p /data/myhou
  2. 进入目录:cd /data/myhou
  3. 下载在该目录下:wget https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-x86_64 --no-check-certificate
  4. 重命名:mv busybox-x86_64 busybox(可不做)
  5. 授权:chmod +x busybox
  6. 测试:./busybox ls

Ubuntu安装:

  • apt install busybox -y

到Docker官网创建仓库:
在这里插入图片描述
在这里插入图片描述

  1. 拉取一个busybox:docker pull busybox:1.35.0
  2. 根据推送规则给busybox设置标签:docker tag busybox:1.35.0 saal0/qsy_box:v1.0
  3. 登陆docker(如果没有登陆):docker login
  4. 推送到仓库:docker push saal0/qsy_box:v1.0

除此之外还可以推送到腾讯云,阿里云等。登陆腾讯云/阿里云官网,搜索容器镜像服务,就可以搭建自己的仓库,注意推送和拉取规则。这里就不演示。

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

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

相关文章

科技信息差(8.30)

&#x1f30d;DeepSeek V3.1 Base突袭上线&#xff01;击败Claude 4编程爆表&#xff0c;全网在蹲R2和V4&#x1f384;语音界Sora&#xff01;微软刚开源新模型&#xff0c;一次生成90分钟语音、3200倍压缩率VibeVoice-1.5B开创了语音界多个重大技术突破&#xff1a;一次性可连…

【国内电子数据取证厂商龙信科技】ES 数据库重建

我们公司在协助侦办一起案件现场勘查遇到这样一个案件&#xff0c;现场没有 获取到服务器数据库密码&#xff0c;且涉案服务器数据巨大&#xff0c;涉及到的数据库并不 是 mysql 数据库&#xff0c;而是 elasticsarch 数据库&#xff0c;这给我们侦办案件带来了极 大的困难&…

【51单片机定时1秒中断控制流水灯方向】2022-11-14

缘由C语言怎么编可中断取反流水灯-编程语言-CSDN问答 用P1口做输出口&#xff0c;接八只发光二极管。编写程序&#xff0c;使发光二极管循环点亮&#xff0c;循环点亮时间间隔为1秒&#xff0c;该时间间隔用定时器中断实现。/ INT0 接单次脉冲输出&#xff0c;每当有外部中断信…

Megatron-LM(模型并行)

Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism 1. 技术设计原则 Megatron-LM 提出轻量级层内模型并行&#xff0c;无需定制编译器或修改框架&#xff0c;仅通过在 PyTorch 原生代码中插入少量通信操作&#xff08;如all-reduce&…

C/C++:AddressSanitizer内存检测工具

AddressSanitizer是gcc自带的内存检测工具&#xff0c;无需额外安装 常见问题 #include <stdlib.h>// 越界访问 void stack_buffer_overflow() {char buffer[1];int i 10;buffer[i] A; // 访问越界 }// 野指针 void use_after_free() {char *text (char *)malloc(size…

【源码】智慧工地系统:智能化施工现场的全新管理方案

智慧工地系统是一个综合利用物联网&#xff08;IoT&#xff09;、大数据、云计算、人工智能&#xff08;AI&#xff09;、移动互联网和BIM&#xff08;建筑信息模型&#xff09;等新一代信息技术&#xff0c;对施工现场的“人、机、料、法、环”等关键要素进行实时、全面、智能…

网络安全等级保护(等保2.0)

网络安全等级保护&#xff08;等保2.0&#xff09;工作全流程指南 等级保护&#xff08;全称“网络安全等级保护”&#xff09;是我国网络安全领域的核心制度&#xff0c;是《网络安全法》规定的法定义务&#xff0c;等保2.0相关国家标准于2019年5月10日正式发布。2019年12月1日…

【Docker】Docker初识

目录 容器技术发展史 Jail时代 1979年贝尔实验室发明chroot 2000年FreeBSD 4.0发行FreeBSD Jail 2001年Linux VServer发行 2004年Solaris Containers发行 云时代 2006年google推出Process Containers 2008年LXC推出 2011年CloudFoundry推出Warden 2013年LMCTFY启动 …

SNMPv3开发--snmptrapd

SNMPv3开发–snmptrapd REF:3min搞定snmpdtrap的配置与使用

机器学习时间序列算法进行随机划分数据是不合适的!

问题代码&#xff1a;数据集划分方式不适合时间序列&#xff0c;会导致评估结果不可靠。 代码在整体流程上是合理的&#xff0c;但针对时间序列数据&#xff0c;存在一个关键问题&#xff1a;使用train_test_split进行随机划分是不合适的。时间序列的特殊性风速数据属于时间序列…

逆向思维下,如何把基金投资做亏?

投资界常说“聪明的人学习别人赚钱的方式”&#xff0c;但如果我们刻意采用逆向思维&#xff0c;想要把基金投资做亏&#xff0c;其实也有科学依据。 今天&#xff0c;我们就从心理学和行为金融的角度&#xff0c;揭示那些真实的投资亏损方法。 ⚡️ 1. 总想追热点&#xff0c…

1-python 自定义模板导出文档-基础实现

使用 Python 根据自定义的 Word 模板和传入的 JSON 数据生成 Word 报告&#xff0c;是自动化文档生成的常见需求。最常用的方法是使用 python-docx 和 docxtpl 库。其中&#xff0c;docxtpl 是基于 python-docx 的模板引擎&#xff0c;支持 Jinja2 模板语法&#xff0c;非常适合…

LeetCode算法日记 - Day 24: 颜色分类、排序数组

目录 1. 颜色分类 1.1 题目分析 1.2 解法 1.3 代码实现 2. 排序数组 2.1 题目解析 2.2 解法 2.3 代码实现 1. 颜色分类 75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地 对它们进行排序…

学习一下动调

[NSSCTF 2nd]MyBasedie查一下用ida64打开main函数里面没有什么信息&#xff0c;接着追一下函数&#xff0c;内容在test函数里面函数会对我们输入的内容进行base64加密&#xff0c;这段逻辑也很简单&#xff0c;就是将加密后的字符串和目标字符串依次进行比较&#xff0c;一样就…

Java试题-选择题(22)

Java试题-选择题&#xff08;22&#xff09; 题目以下对JDBC事务描述错误的是 &#xff1f; A) JDBC事务属于JAVA事务的一种 B) JDBC事务属于容器事务类型 C) JDBC事务可以保证操作的完整性和一致性 D) JDBC事务是由Connection发起的&#xff0c;并由Connection控制要通过可滚动…

蓝牙5.3核心技术架构解析:从控制器到主机的无线通信设计

蓝牙5.3核心技术架构解析&#xff1a;从控制器到主机的无线通信设计在无线通信领域&#xff0c;蓝牙技术如何通过精巧的架构设计实现设备间的高效互操作&#xff1f;答案在于其分层架构与标准化的接口定义。蓝牙5.3核心规范作为现代无线通信的重要标准&#xff0c;其系统架构设…

android View#performClick() 和 View#callOnClick() 的差异

文章目录performClick()callOnClick()关键区别对比总结在 Android 中&#xff0c;View.performClick() 和 View.callOnClick() 都是用于触发视图点击事件的方法&#xff0c;但它们的设计目的和执行逻辑存在细微差异&#xff0c;具体区别如下&#xff1a;performClick() 核心作…

PHP单独使用phinx使用数据库迁移

可以独立使用的迁移包对比后&#xff0c;感觉phinx更接近PHP的使用习惯。 为什么要单独用&#xff1f; 因为我不想数据库的迁移文件依赖于某种框架。本来是可以在框架里直接安装这个包的&#xff0c;但是发现这个包依赖cakephp&#xff0c;而cakephp的函数与thinkphp的env()函…

从零开始学习单片机18

使用STM32CubeMX创建工程选择对应芯片后创建工程&#xff0c;首先设置时钟源内部时钟源包括LSI&#xff08;低速时钟&#xff09;和HSI&#xff08;高速时钟&#xff09;&#xff0c;使用内部时钟源就需要将图中的一二处勾选HCLK是芯片运行时的评率&#xff0c;虽然下面标的最大…

如何使用 DeepSeek 帮助自己的工作?

技术文章大纲&#xff1a;利用 DeepSeek 提升工作效率 了解 DeepSeek 的基本功能 DeepSeek 的核心能力&#xff1a;文本生成、代码辅助、数据分析支持的平台与访问方式&#xff08;网页端/API/集成工具&#xff09;适用场景&#xff1a;技术文档撰写、自动化流程设计、数据处理…