第30周Java分布式入门 docker

Docker课程笔记

Docker是什么

Docker是一种容器技术,它能够将软件及其所有依赖项打包到一个轻量级、可移植的容器中,从而实现在任何环境中的快速部署和运行。

为什么需要Docker

  • 安装软件的挑战:软件安装过程中可能遇到下载困难、安装失败或运行出错等问题。
  • 环境差异:软件在不同电脑上运行可能因为环境差异而出现问题。
  • 虚拟机的开销:虚拟机技术虽然可以解决环境问题,但是资源开销大,成本高。

Docker的用途

  • 构建:Docker可以将本地程序打包到固定环境中,避免重复配置工作。
  • 共享:Docker通过中央仓库实现程序的方便共享和部署。
  • 运行:Docker保证程序在相同环境中以相同方式运行,降低环境不一致导致的错误。

Docker的特点

  • 标准化:Docker具有标准化的特点。
  • 轻量级:Docker是轻量级的。
  • 安全:Docker保证了安全性。

Docker的核心概念

  • 镜像:程序和环境的统一打包体,包含核心程序和所需环境。
  • 容器:镜像实例化后的具体对象,程序实际运行在容器内部。
  • 仓库:集中存储镜像的地方,类似于maven的中央仓库或git HUB。

知识小结

Docker介绍

  • Docker定义:Docker是一个容器技术,官网更新快,有新版公告、合作企业、应用广泛程度介绍。
  • Docker与容器的关系:Docker是一种容器技术,性能更好,特性更丰富,应用更广泛。

容器概念

  • 容器定义:容器是标准的软件单元,打包代码及所有依赖项,轻量级、独立、可执行。
  • 容器作用:容器帮助解决环境问题,提高开发效率。

为什么需要Docker

  • 安装软件困难:安装软件的风险与环境不一致问题。
  • 虚拟机解决方案:虚拟机解决了环境问题,但成本高。

Docker的用途

  • 构建时:使用Docker方便地将本地程序打包到固定环境中,避免重复配置工作。
  • 共享时:Docker有统一的管理中心,方便程序共享与传输,提高整体效率。
  • 运行时:Docker保证程序在相同环境以相同方式运行,降低环境冲突风险。

Docker架构

  • 镜像:镜像是程序和环境的统一打包体,包含核心程序及所需环境。
  • 容器:容器是镜像运行起来的产物,程序实际运行在容器内部。
  • 仓库:仓库用于集中存储镜像,类似于maven中央仓库或git HUB。

实操部分

  • 安装:介绍Docker在macOS、Windows和Linux下的安装方式。
  • 容器操作:包括Docker容器的生成、运行、配置和连接。
  • 使用Docker运行Redis:通过Docker运行Redis实例,连接与验证。
  • 使用Dockerfile创建容器:Dockerfile的编写,创建自定义容器。

重点知识举例解释

  • Docker与虚拟机:想象你有一个装满各种食材的冰箱(虚拟机),每次做饭(部署应用)都需要整个冰箱。而Docker就像是将食材提前分装成小包装,每次只需要拿一小包(容器),这样既节省空间(资源占用小),又方便取用(部署快速)。

Docker 安装笔记

一、Docker的安装

1. Docker在MacOS上的安装
  • 安装方式:Docker Desktop
  • 安装步骤
    1. 访问官网,点击Get Started。
    2. 下载Docker Desktop并安装。
  • 系统要求:macOS High Sierra (10.13)及以上,2010年或更新Mac硬件。
  • 版本选择:社区版免费,商业版含额外服务。
2. Docker在Linux下的安装
  • 配置国内yum源
    • 使用wget从阿里云获取配置文件,替换默认yum源。
  • 卸载旧版本
    • 使用yum remove命令卸载Docker及其相关组件。
  • 更新yum
    • 使用yum check-updateyum update命令更新系统软件包。
  • 安装所需软件包
    • 使用yum install命令安装依赖软件包。
  • 设置稳定的存储库
    • 使用yum-config-manager命令添加阿里云Docker CE稳定版存储库。
  • 查看docker版本
    • 使用yum list命令查看所有可安装的Docker版本。
  • 安装指定的版本
    • 使用yum install命令安装指定版本的Docker CE。
  • 启动服务
    • 使用systemctl start docker命令启动Docker服务。
  • 验证是否安装成功
    • 使用docker versiondocker info命令查看Docker版本和信息。

二、知识小结

  • 查看CentOS版本 :使用命令cat /etc/redhat-release
  • Docker安装用户权限:必须使用root用户或具备管理员权限的用户。
  • 安装命令与教辅资料:提供教辅资料供参考,无需背诵命令。
  • 配置国内Yum源:替换为阿里云等国内源以加速下载。
  • 清理与更新Yum源 :执行yum clean allmake cache命令清理旧源。
  • 卸载旧Docker版本:确保无残留避免版本冲突。
  • 更新Yum :使用yum update命令更新系统。
  • 安装Docker所需软件包:安装依赖软件包。
  • 指定Docker仓库地址:使用阿里云Docker仓库地址。
  • 查看可安装Docker版本
    • 使用命令yum list docker-ce --showduplicates | sort -r选择稳定版(stable)安装。
  • 指定Docker版本安装:确保安装版本与教程一致。
  • 启动Docker服务 :使用systemctl start docker命令启动。
  • 验证Docker安装 :使用docker versiondocker info命令验证确认Docker安装成功。
  • 安装注意事项:遵循步骤,避免版本不同、未配置国内源等导致的失败。

Docker 课程笔记

一、生成并运行 Docker 容器

1. 查看 Docker 命令

  • 命令概览:Docker 提供了丰富的命令,包括管理容器、镜像、网络等。
  • 常用命令:helpsearchrun 等,用于查看帮助、搜索镜像、运行容器等。

2. 拉取 Ubuntu 镜像

  • 命令:docker pull ubuntu
  • 默认标签:如果不指定版本,默认拉取最新版本(latest)。
  • 下载过程:连接中央仓库进行下载,可能会因网络问题导致下载失败。

3. 镜像换源

  • 原因:国内访问 Docker 中央仓库可能因网络问题导致下载缓慢或失败。
  • 换源方法:
    • macOS :在 Docker Engine 配置中添加 registry-mirrors,指向国内镜像源(如网易、中科大)。
    • Windows:类似 macOS,找到配置中心添加镜像源。
    • Linux :编辑 /etc/docker/daemon.json 文件,添加镜像源后重启 Docker。
  • 镜像源地址:

4. 运行容器

  • 命令:docker run -i -t ubuntu /bin/bash
  • 参数解释:
    • -i:交互式操作。
    • -t:分配一个伪终端。
    • ubuntu:镜像名。
    • /bin/bash:在容器内执行的命令。
  • 效果:进入 Ubuntu 容器的命令行界面,可以执行 Ubuntu 系统内的命令。
  • 退出容器:使用 exit 命令,容器会停止但不会被删除。

5. 搜索镜像

  • 命令:docker search redis
  • 结果:列出与 Redis 相关的镜像,包括镜像名、描述、星级、是否官方等。
  • 广泛性:广泛流传的软件通常都有对应的 Docker 镜像。

6. 内容总结

  • 主要工作:生成并运行 Docker 容器。
  • 命令使用:
    • help:查看 Docker 命令帮助。
    • pull:拉取 Ubuntu 镜像。
    • run:运行容器并进入交互模式。
  • 换源技巧:解决国内网络访问 Docker 中央仓库的问题。
  • 搜索镜像:使用 search 命令查找相关镜像。
  • 自动下载:如果运行容器时镜像未下载,Docker 会自动下载镜像。

二、知识小结

知识点 核心内容 考试重点/易混淆点 难度系数
Docker 基础命令使用 使用 docker --help 查看命令帮助 区分不同命令的功能和用法 🌟
镜像管理 searchpull(下载)、build(构建)等命令 pullbuild 的区别和用法 🌟🌟
容器管理 run(运行)、start/stop(启停)、rm(删除)等命令 run 命令的参数含义,如 -i-t-b-bash 🌟🌟🌟
换源操作 macOS、Windows、Linux 下的换源方法 不同系统下的配置文件位置和内容 🌟🌟🌟🌟
实操演示 拉取并运行 Ubuntu 镜像,进入容器内部操作 换源后下载镜像,使用 run 命令启动容器 🌟🌟🌟
搜索镜像 使用 docker search 命令搜索镜像 搜索结果的解读和选择 🌟
小技巧 docker run 时自动下载镜像,无需提前手动下载镜像 🌟

三、后台运行容器

1. 启动 Redis 容器

  • 命令:docker run -i -t redis /bin/bash。这个命令用于启动 Redis 容器,并进入其内部命令行界面。
  • 解释:-i 表示以交互模式运行容器,-t 为容器重新分配一个伪输入终端,redis 是要运行的镜像名称,/bin/bash 是进入容器后要执行的命令。

2. 访问正在运行的容器

  • 步骤:
    1. 使用 docker containers ls 命令查询正在运行的容器情况,获取容器 ID。
    2. 使用 docker exec -it 容器ID /bin/bash 命令进入正在运行的容器内部。
  • 解释:docker containers ls 列出所有正在运行的容器,docker exec 允许用户在运行中的容器内执行命令,-it 参数使得用户能够以交互方式进入容器内部。

3. 后台启动 Redis 容器

  • 命令:docker run -d redis。这个命令用于在后台启动 Redis 容器。
  • 解释:-d 参数表示在后台运行容器,这样即使关闭终端,容器也会继续运行。
  • 效果:使用此命令启动的 Redis 容器不会在终端中显示运行过程,但会返回一个容器 ID,表示容器已在后台成功启动。

4. 内容小结

  • 总结:
    • 学会了如何启动 Redis 容器,并进入其内部命令行界面。
    • 掌握了访问正在运行的容器的方法,能够进入容器内部进行操作。
    • 了解了如何在后台启动 Redis 容器,使得容器能够在关闭终端后继续运行。
  • 重点:
    • -d 参数的使用是后台运行容器的关键。
    • 通过 docker containers lsdocker exec 命令可以管理和访问正在运行的容器。

四、知识小结

知识点 核心内容 考试重点/易混淆点 难度系数
Docker 容器后台启动 使用 docker run -d 命令在后台启动容器 区分 -d-it 参数的使用场景 理解后台运行的意义 🌟🌟
Redis 容器启动 使用 docker run -d redis 启动 Redis 容器 Redis 容器启动后的持续运行问题 如何确认 Redis 服务已启动 🌟🌟🌟
进入正在运行的容器 使用 docker exec -it <container_id> bash 进入容器 container_id 的获取方法 execrun 命令的区别 🌟🌟🌟
后台运行的优势 后台运行容器,无需保持终端开启 后台运行与前台运行的区别 后台运行的应用场景 🌟
Redis 服务连接 使用 redis-cli 连接 Redis 服务 如何确认 Redis 服务已准备好接受连接 连接命令的正确使用 🌟🌟
容器状态查看 使用 docker containers ls 查看容器状态 如何解读 docker containers ls 的输出 容器 ID 的获取与应用 🌟🌟

五、访问自定义容器

1. 停止已运行的 Redis

  • 操作:使用 docker container 命令查看运行的容器,并使用 docker container stop 加上容器号来停止 Redis 容器。

2. 运行 Redis 容器

  • 命令:docker run -d -p 8888:6379 redis
  • 解释:该命令启动 Redis 容器,并在后台运行。-d 表示后台运行,-p 表示端口映射,将本机的 8888 端口映射到容器的 6379 端口(Redis 默认端口)。

3. 连接 Redis 服务

  • 操作:使用 redis-cli -p 8888 命令尝试连接本机的 8888 端口上的 Redis 服务。
  • 结果:连接成功,说明通过端口映射成功连接到了 Docker 内部的 Redis 服务。

4. 验证 Redis 服务

  • 操作:
    1. 在连接到的 Redis 服务中,使用 keys * 命令查看所有 key,确认服务为空。
    2. 使用 set a b 命令设置一个 key-value 对。
    3. 再次使用 keys * 命令查看,确认 key-value 对已成功保存。
  • 验证:
    1. 另开一个终端,直接连接本机 6379 端口的 Redis 服务,使用 keys * 命令查看,确认该服务为空。
    2. 回到之前的终端,查看 8888 端口的 Redis 服务中的 key,确认与之前设置的相同。
  • 结论:通过对比两个 Redis 服务中的数据,证明了 8888 端口的 Redis 服务是 Docker 内部的,而非本机自身的。

5. 作用

  • 端口映射(-p)建立了一个桥梁,让 Docker 外部和 Docker 内部进行连接,无需在本机安装 Redis 环境,只需下载 Docker 中已配置好的 Redis 环境即可使用。

六、知识小结

知识点 核心内容 考试重点/易混淆点 难度系数
Docker 与 Redis 连接 使用端口映射方式连接本机与 Docker 中的 Redis 服务 端口映射命令的理解与应用 ★★★☆☆
停止已运行的 Redis 容器 停止容器的命令操作 ★★☆☆☆
尝试连接未启动服务的端口(失败) 确认服务未启动的提示信息 ★★☆☆☆
端口映射命令 docker run -d -p 888:6379 redis -d:后台运行 -p:端口映射 888:本机端口 6379:Redis 默认端口 ★★★★☆
执行命令后,本机 888 端口访问的是 Docker 中 Redis 的 6379 端口 端口映射效果的理解 ★★★☆☆
验证连接 1. 使用 redis-cli -p 888 连接 Redis 2. 在 Redis 中生成并查看数据 确认连接成功与数据一致性的方法 ★★★☆☆
对比本机 Redis 与 Docker 中 Redis 的数据差异 区分不同 Redis 实例的数据 ★★★★☆
端口映射的作用 - 无需在本机安装 Redis 环境 - 快速搭建和使用 Redis 环境 端口映射在环境搭建中的优势 ★★★☆☆
通过下载已配置好的 Docker 镜像,使用端口映射快速启动服务 Docker 镜像与端口映射的结合应用 ★★★★☆

七、Dockerfile

1. 创建文件夹并编写 Dockerfile

  • 目的:制作自己的 Docker 镜像,方便推广和节省使用者配置环境的工作量。
  • 步骤:
    1. 在本机创建一个专门用于制作镜像的文件夹,命名为 "dockerfile"。
    2. 进入该文件夹,使用 vim 创建一个 Dockerfile。
    3. 在 Dockerfile 中编写内容,第一行使用 "FROM" 指定基础镜像,如 "FROM ubuntu"。
    4. 使用 "CMD" 指令指定镜像启动后执行的命令,如 "CMD echo 'imook-java'"。

2. 利用文件制作镜像

  • 命令:使用 "docker build -t myimage ." 命令来制作镜像。
    • docker build:制作镜像的命令。
    • -t myimage:给镜像取名为 "myimage"。
    • .:指定 Dockerfile 所在的当前路径。
  • 效果:执行命令后,Docker 会读取 Dockerfile 并制作镜像,最后显示镜像制作成功的画面。

3. 运行镜像并验证效果

  • 命令:使用 "docker run myimage" 命令来运行镜像。
  • 效果:运行镜像后,可以在终端看到 "imook-java" 的输出,验证镜像制作成功且能够正常运行。
  • 验证:使用 "docker images" 命令可以查看当前所有的镜像,确认 "myimage" 镜像已经存在。

4. 后续

  • 可以在 Dockerfile 中添加更多的命令和配置,以制作更复杂、功能更丰富的镜像。

八、知识小结

知识点 核心内容 考试重点/易混淆点 难度系数
Dockerfile 作用 帮助开发者制作自己的镜像 镜像的作用与意义 🌟
制作镜像的原因 方便推广,节省对方工作量,有利于自己推广 镜像的推广价值 🌟
实战操作:创建文件夹 在 user/apple 下创建名为 dockerfile 的文件夹 文件夹命名及位置 🌟🌟
编写 Dockerfile 使用 vim 创建 dockerfile,写入 from 和 cmd 命令 from 和 cmd 命令的写法与意义 🌟🌟🌟
from 命令解释 指定基础镜像,如乌邦图 基础镜像的选择 🌟
cmd 命令解释 容器启动时执行的命令,如 echo "im ook-JAVA" cmd 与 run 命令的区别 🌟🌟
制作镜像命令 docker build -t myimage . -t 参数的含义,点的含义 🌟🌟🌟
查看镜像命令 docker images 验证镜像是否生成成功 🌟
运行镜像命令 docker run myimage 运行镜像并查看效果 🌟🌟
后续扩展 在镜像中做更多事情,如复制文件、配置环境 镜像的进一步定制 🌟🌟🌟🌟
相关推荐
在下木子生2 分钟前
SpringBoot条件装配注解
java·spring boot·后端
周Echo周26 分钟前
5、vim编辑和shell编程【超详细】
java·linux·c++·后端·编辑器·vim
用户945085191249232 分钟前
一文搞懂过滤器和拦截器
java
Java水解36 分钟前
Java面试必问到的10道面试题
java·面试
martian6651 小时前
《Spring Boot全栈开发指南:从入门到生产实践》
java·开发语言·spring boot
快来卷java1 小时前
深入剖析雪花算法:分布式ID生成的核心方案
java·数据库·redis·分布式·算法·缓存·dreamweaver
郁大锤1 小时前
如何在 Windows 上安装与配置 Tomcat
java·windows·tomcat
三次拒绝王俊凯1 小时前
在 IntelliJ IDEA 2019 中安装/启用 PlantUML 插件
java·ide·intellij-idea
moxiaoran57531 小时前
多线程开发中List的使用
java
2401_871290582 小时前
Hadoop 集群的常用命令
大数据·hadoop·分布式