当前位置: 首页 > news >正文

docker的基本概念的个人回顾

目录

docker

1、概念

2、docker启动nginx

1、基本流程

2、下载nginx

3、启动容器

4、docker run 详解

5、修改nginx页面

6、保存镜像

7、镜像分享到社区

8、总结

3、docker存储与Nginx页面挂载

1、目录挂载

2、卷映射

总结

4、docker网络

5、redis主从同步集群


docker

1、概念

1、运行docker pull redis,命令会发给docker主机,主机获取下载这个软件镜像到本地-----》运行docker run redis, docker主机会先查看是否有这个镜像,没有则下载,有则放入容器中运行。

2、使用 docker build my,就会制作名为my的镜像 -----》使用docker push my,就会把my的镜像放到镜像仓库上

3、容器:安装容器的运行时环境,利用容器启动一个个应用,每个应用运行在自己的容器内部,每个容器都包含这个应用运行的完整环境,且容器相互隔离。简单理解,容器就是轻量的虚拟机技术,共享操作系统内核

2、docker启动nginx

1、基本流程

2、下载nginx

docker search nginx # 查看是否有镜像 docker pull nginx # 获取镜像 docker images # 查看系统的镜像 docker pull nginx:版本 # 下载指定版本nginx: docker rmi 镜像名:版本|镜像id # 删除镜像

3、启动容器

1、每一个容器都代表一个运行中的应用

2、启动nginx应用:

docker run [选项] 镜像名 [启动命令] [启动参数] docker run nginx # 启动nginx docker run nginx # 启动nginx

3、查看运行中的容器:

docker ps docker ps -a # 查看所有容器,包括停止的, 查看容器名字

4、启动容器

docker start 容器名 | 容器id

5、停止容器

docker stop 容器名 | 容器 id

6、查看容器状态

docker stats 容器id | 容器名

7、查看容器日志

docker logs 容器id | 容器名

8、删除容器, 但删除前需要先停止容器运行

docker rm 容器id

4、docker run 详解

1、先删除之前启动的容器 docker rm -f 容器id

2、每个容器启动时,都运行在自己的空间内,互相隔离。需要给容器做一个映射。例如图中,把88端口对应到容器内的80端口上,而容器内的nginx运行在80端口。由此,我们可以访问容器内部的nginx。(每个容器就是一个小虚拟机)

2、启动命令

docker run -d(后台启动) --name 容器名(给这个容器起名字) -p 主机端口:容器端口 (设置主机端口和容器端口的映射) 镜像名

5、修改nginx页面

1、使用docker exec 进入到装了nginx的容器里,容器里有一个文件路径 /usr/share/nginx/html, 存放着nginx的默认页面。nginx的镜像里有官方文档可供查阅

2、进入docker交互模式

docker exec -it(启动交互模式) 容器名 | id /bin/bash(使用控制台模式交互) # 进入容器内部

3、容器内部基本就是一个linux系统,linux系统命令在这里也可以使用

4、进入nginx页面存放位置

cd /usr/share/nginx/html # 进入Nginx页面

5、可以使用 echo "文本内容" > index.html 来尝试着修改默认页面

echo "文本内容" > index.html # 直接修改Nginx页面

6、exit # 退出容器

exit # 退出容器

6、保存镜像

1、提交镜像

docker commit -m "提交信息" 容器名 镜像名 #把运行中的容器变成镜像

2、把镜像保存成文件

docker save -o 文件名.tar(把镜像写出成tar文件) 镜像名

3、使用别人的本地镜像文件:

docker load -i 镜像压缩包路径 # 加载镜像后,使用 docker run 命令就可以运行镜像成容器

7、镜像分享到社区

1、登录网站

docker login # 之后按照提示输入用户名密码就行

2、对镜像进行改名:

docker tag 原来的镜像 用户名/新的镜像名:tag标签。 # 例如:docker tag my-nginx-service:v1.0 username/nginx-service:latest

3、镜像改名后,推送镜像

docker push 更改后的镜像名 # 推送镜像

8、总结

3、docker存储与Nginx页面挂载

1、目录挂载

1、正常情况下,容器内部数据修改麻烦容易丢失

2、docker的目录挂载:指定外部主机的一个文件夹A,告诉容器,这个文件夹A就是容器内的文件B。需要在docker run 运行容器时使用-v 外部路径:容器内部路径选项

3、目录挂载是将宿主机上一个你非常熟悉的具体目录路径,直接映射到容器内的一个目录。两边操作的是同一份文件。

docker run -d(后台启动) --name 容器名(给这个容器起名字) -p 主机端口:容器端口 (设置主机端口和容器端口的映射) -v 外部路径:容器内部路径 镜像名

2、卷映射

1、在docker run中使用 -v选项时,使用 -v ngconf(卷名):/etc/nginx, 可以读取配置文件。这个目录放在主机的/var/lib/docker/volumes/(容器名),里面有配置文件,修改那里面的配置文件可以同步改变容器内nginx的配置。

2、使用卷映射后, cd /var/lib/docker/volumes/ngconf/data.容器里边的/etc/nginx的内容被放到了这个目录下

3、目录挂载:初始启动外部目录有什么,容器里面就有什么

卷映射: 初始启动容器内部有什么,外部就有什么。外部的修改会实时同步到容器内部,且外部目录位置固定

4、卷挂载是由Docker创建和管理的存储空间。你可以把它想象成一块由Docker分配的“U盘”,你只需要给它起个名字,然后挂载到容器里即可,不需要关心它在宿主机上的具体路径。

4、

# 创建一个名为“my-website”的卷 docker volume create my-website # 启动容器并挂载卷 docker run -d --name my-nginx-with-volume -p 8080:80 -v my-website:/usr/share/nginx/html nginx docker volume ls # 列出所有的卷 docker volume inspect 卷名 # 查看卷的详细信息

5、

如果卷是空的,Docker会自动将容器内部目标目录的原始内容复制到卷中。这确保了应用能正常启动。

你可以通过docker volume inspect my-website命令查看这个卷在宿主机上的真实存储路径,但通常不需要直接操作它。

删除容器后,my-website这个卷和数据依然存在。下次新启动一个容器并挂载同一个卷,数据就会恢复。

总结

假设外部主机目录为A,容器内部目标目录为B

1、使用目录挂载:A的内容直接覆盖B。对A的修改同步修改B。容器迁移后,必须创建相同路径的A才能正常使用。适用于开发时

2、使用卷挂载:当一个新创建的、空的卷挂载到容器目录B时,Docker会先将B目录里的原始内容(来自镜像)复制到卷中,然后容器再启动。适用于开发完成,需要迁移或数据备份时。

4、docker网络

1、每个容器启动时,都会加入一个docker的默认网络,叫docker0。

2、每个启动的容器,相当于连接在这个网络里的虚拟机,docker会为每个容器分配ip

3、命令

docker container inspect 容器名 # 查看这个容器的具体状态

4、容器内部可以通过这个虚拟网络互相访问

5、docker为每个容器分配唯一ip,使用容器ip + 容器端口可以互相访问

6、ip可能会变化,包括内部的。因此,我们需要创建自定义网络,容器名就是域名,使用域名来访问对方的服务。

7、

docker network create 网络名 # 创建一个自己的网络 docker network ls # 列举出网络 docker run -d(后台启动) --name 容器名(给这个容器起名字) --network 网络名(这个容器要加入的网络) -p 主机端口:容器端口 (设置主机端口和容器端口的映射) -v 外部路径:容器内部路径 -v 卷名:容器内部配置文件路径(卷映射同步更改配置文件) 镜像名

8、在容器内部可以通过 http://容器名:容器端口 访问另一个容器

5、redis主从同步集群

1、概念

1、redis1主机负责写请求,redis2主机负责读请求。

2、两个容器需要放入到同一个网络

3、同时,保存redis数据的目录可以挂载到机器外边

4、同时,需要手动设置两个redis同步

5、redis1设置复制模式为master,同时设置访问密码

6、redis2,设置同步模式为slave下属,设置主机的地址(容器内部自定义网络,容器名即为域名),设置主机容器内部的端口,设置访问master的密码,设置自己的密码。

7、推荐使用比特纳米的redis镜像,已经配置好了集群设置。官方的没有。我们只需要按照说明设置环境变量就行

8、具体的命令如下

http://www.cnnetsun.cn/news/92893.html

相关文章:

  • 突破60帧束缚:原神性能优化工具深度解析
  • 云计算作业—-V L AN实验
  • 当连锁巡检“听懂人话”:VLM技术下的智能运营新场景
  • 责任链模式(Chain of Responsibility):实现事件或请求的逐级处理与传递
  • SMUDebugTool深度探索:解锁AMD Ryzen系统的隐藏性能
  • JavaScript 中的单例模式:利用闭包、IIFE 或 ES Modules 实现线程安全的单例
  • CORS 机制中的预检请求(Preflight Request):为什么 OPTIONS 请求总是先于复杂请求发送?
  • Google Drive文件下载终极指南:简单快速解决下载难题
  • 面对一个新领域,如何快速摸清门道?试试“一键生成”研究地图
  • 终极指南:5步实现全球付费内容免费阅读
  • GBase 8s数据库SYSTIMESTAMP表达式介绍(上)
  • 从“秒级”到“毫秒级”:金仓如何让InfluxDB的“时序神话”黯然失色?
  • zotero-style插件深度解析:从零打造高效文献管理生态
  • 5倍推理加速:Axolotl缓存策略如何终结重复计算瓶颈
  • LobeChat能否部署在华为云弹性云服务器?国产化替代实践
  • LobeChat备份与恢复策略:防止重要对话丢失
  • Access Token 生命周期管理:详细设计 Token 的获取、缓存、续期和过期处理机制
  • 客户群 ID 与业务 ID 映射:设计高性能数据库表结构,实现 ChatID 与内部业务标签的快速关联
  • 代码随想录算法训练营Day48 | 108.冗余连接、109.冗余连接II
  • 微信网页版访问困境突破:3步安装wechat-need-web插件实战指南
  • MFC扩展库BCGControlBar Pro v37.1——支持Visual Studio 2026
  • 知乎专题策划:LobeChat是否真的值得入手?
  • 毕业论文AIGC全线飘红?揭秘5个“去AI化”核心手段,附保姆级工具清单
  • MTKClient:如何快速掌握联发科设备调试的核心技巧?
  • 国内云渲染平台有哪些公司?推荐及分析
  • VisualCppRedist AIO:Windows运行库问题的终极免费解决方案
  • 5分钟学会Bypass Paywalls Clean:终极免费阅读指南
  • 音乐播放器插件系统:如何通过5个关键插件实现真正的个性化体验?
  • 什么是“本地永久云手机”,真正独享的云端体验!
  • VMOS Edge与魔云腾Q1对比评测:谁才是本地永久云手机最优选?