Docker 学习篇(一)| 认识 Docker
Docker 学习篇一| 认识 Docker1. 什么是 Docker2. Windows 上装软件的痛3. Docker 怎么解决的4. 三核心仓库、镜像、容器5. 三个动作没有安装6. Docker 解决了传统部署的三大痛点痛点一环境冲突 —— JDK 版本打架痛点二移植噩梦 —— Ubuntu 迁 CentOS痛点三资源浪费 —— 空闲服务吃内存7. Docker Desktop 是什么8. 实际好处9. 常见疑问1. 什么是 DockerDocker 是一个容器引擎。它把程序和程序需要的运行环境操作系统、依赖库、配置打包在一起放进一个叫容器的隔离空间里运行。你可以理解为Docker 在你的电脑里划出一个个独立的小隔间每个隔间自带一套微型 Linux互不干扰。程序跑在隔间里和外面 Windows 系统是隔离的。三个关键词打包、隔离、一次构建到处运行。2. Windows 上装软件的痛装 MySQL下载.exe→ 下一步 → 输密码 → 完成。一切正常。直到你想同时装 MySQL 5.7 和 8.0 —— 安装程序直接拒绝「已检测到 MySQL 存在」。不是你的问题。Windows 的设计决定了所有程序共享一套环境——同一个文件系统、同一份注册表、同一组系统服务。两个版本的同一款软件必然打架。3. Docker 怎么解决的Docker 给每个程序分配一个独立的小隔间叫容器。每个容器自带一个微型 Linux几十 MB不依赖你的 Windows程序需要的所有依赖JDK、glibc 等程序本身容器之间完全隔离。场景WindowsDocker装两个 MySQL不可能两个容器各跑各的卸载软件卸载程序 残留注册表 残留文件删容器彻底干净软件依赖冲突两个软件要不同版本的 Python得折腾各自容器自带Windows 是大通铺Docker 是公寓楼每个房间自带水电。4. 三核心仓库、镜像、容器Docker 的世界里只有这三样东西核心是什么类比仓库Registry存放镜像的地方官方的叫 Docker Hub国内有镜像加速站应用商店镜像Image程序 微型 Linux 所有依赖打包成一个只读文件Word 模板.dotx容器Container用镜像启动出来的运行实例正在干活的进程打开后的编辑窗口关系一句话仓库里存镜像镜像启动变容器。镜像是文件容器是进程。5. 三个动作没有安装Docker 世界里没有安装软件这一步只有三个动作动作命令做什么拉取docker pull mysql:8.0下载别人做好的镜像构建docker build -t my-app .把自己的项目打成镜像运行docker run -d mysql:8.0从镜像启动容器6. Docker 解决了传统部署的三大痛点痛点一环境冲突 —— JDK 版本打架服务器上已有 Spring Boot 1.x 项目要 JDK 8新项目 Spring Boot 3.x必须 JDK 17。Linux 只有一个全局JAVA_HOME指 JDK 8 → 新项目报Unsupported major.minor version 61.0指 JDK 17 → 老项目报NoClassDefFoundError: javax/xml/bind/…传统解法装两个 JDK给每个项目写脚本设各自的JAVA_HOME再写 systemd 服务文件管理启停。每来一个新 JDK 版本的项目就重复一遍。Docker每个项目自己打包一个 Dockerfile各带各的 JDK# 老项目 FROM eclipse-temurin:8-jdk-alpine COPY old-demo.jar app.jar CMD [java, -jar, app.jar] # 新项目 FROM eclipse-temurin:17-jdk-alpine COPY new-demo.jar app.jar CMD [java, -jar, app.jar]dockerrun-d--nameold-project-p8081:8080 old-project:v1dockerrun-d--namenew-project-p8082:8080 new-project:v1JDK 各带各的宿主机不装 JDK 都行。不止 JDK一台 Docker 可以同时跑不同版本的 MySQL、Redis、NginxDocker只装一个管理一切 ├── MySQL 8.0 容器 → 宿主机 3306 ├── MySQL 5.7 容器 → 宿主机 3307 ├── Redis 7 容器 → 宿主机 6379 ├── Nginx 容器 → 宿主机 80 ├── 博客后端 容器 → JDK 17 → 宿主机 8080 └── 老项目 容器 → JDK 8 → 宿主机 8081六个容器各带各的版本互不干扰。Windows 上做不到。痛点二移植噩梦 —— Ubuntu 迁 CentOS本地 Ubuntu 22.04 开发好了迁移到 CentOS 8 服务器MySQL 安装命令不同aptvsdnf配置路径不同系统库包名不同libpng-devvslibpng-devel文件权限不同ubuntu用户 vsec2-user传统解法导出apt list --installed手动映射到dnf包名一个个装。改配置路径。修权限。反反复复试错。Docker本地和服务器用同一份docker-compose.ymlDockerfile# 本地dockercompose up-d# 服务器 —— 完全一样的命令dockercompose up-d系统和库在镜像里不依赖宿主机。数据库地址用容器名mysql而不是 IP换个环境照样通。痛点三资源浪费 —— 空闲服务吃内存一台 4GB 服务器跑 Redis默认 100MB MySQL默认 300MB Tomcat默认 200MB。晚上没人用也吃掉 600MB。传统解法手动调每个服务的配置redis.conf的maxmemory、my.cnf的innodb_buffer_pool_size、Tomcat 的JAVA_OPTS写 cron 定时停启脚本。累容易出错。Dockerdockerrun-d--nameredis--memory50m redis:7-alpinedockerrun-d--namemysql--memory100m-eMYSQL_ROOT_PASSWORDroot mysql:8.0dockerrun-d--nametomcat--memory100m tomcat:9一行--memory搞定不需要改服务内部配置随时可调。7. Docker Desktop 是什么它是你 Windows 上唯一需要安装的软件。底层通过 WSL2 跑一个轻量级 Linux 虚拟机在这个虚拟机里运行 Docker 引擎。不需要装多个 Docker——一个引擎管理所有容器不需要在 Windows 上装 MySQL、Redis、Nginx——它们全跑在容器里你的 Windows 保持干净8. 实际好处环境不打架JDK 8 / 17 / 21 同时跑MySQL 5.7 和 8.0 并存不污染本机中间件全部容器化系统零残留换电脑无痛装 Docker Desktop → 拉代码 →docker compose up -d所有服务全起环境一致性本地、测试、生产用同一个镜像「我电脑上能跑」成为历史用完即弃测完删容器不留痕迹9. 常见疑问疑问答案容器里面装了 Docker 吗没有。容器里只有程序和依赖Docker 引擎在外面唯一一个每个容器有自己的 JDK对各自打包各自的版本互不影响容器之间能通信吗能通过 Docker 内部网络直接互访Docker 是在 Windows 里又装了个系统是跑了一个微型 Linux不是再装个 Windows镜像是安装包吗不是。是「程序 环境」的打包文件不需要安装启动就是容器
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2589768.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!