极简版小白Docker学习篇(通俗易懂)

Docker学习篇

Docker学习篇源于自己第一次部署上线前后端分离的项目时,所采用的方法。途中遇到的问题以及是如何解决,我将在这篇博客有所展示,希望对过来阅读的你们有些许所获和学习。那么,废话不多说,赶紧上车!

Docker初认识

  1. Docker的概念

什么是Docker?看这一篇干货文章就够了! - 知乎 (zhihu.com)

说白了,从上述文章我们可以知道:Docker是一种现代流行的容器技术的一种实现,是可以极简缩小版的操作系统(又或是虚拟机)。兼具操作系统的功能,又能轻量化移植(clone),提高项目部署效率,降低部署的难度。实现“Build once, run everywhere”,这简直不要太香!

Docker初体验

!!!前提:你的虚拟机或者服务器上面得安装Docker,这里我是默认你们是有的。
要想使用Docker的前提,我们得需要知道container、image和Dockerfile的关系,构建镜像命令和Dockerfile相关语句以及如何编写优雅的Dockerfile(重点)

0. 准备工作

安装Docker

  • 虚拟机——[虚拟机VMware安装docker完成个人web项目部署_docker vmware用哪个-优快云博客](https://blog.youkuaiyun.com/weixin_43012300/article/details/107304808#:~:text=虚拟机VMware安装docker完成个人web项目部署 1 1.安装并使用虚拟机VMware 2 2.在虚拟机上安装Linux系统centos7 3 3.安装docker 4,7 8.退出并重启容器 [docker restart 7e132767c055] 8 9.访问项目 更多項目)
  • 服务器——推荐宝塔,无脑安装docker。

1. 前置知识

  • container (容器)
  • image (镜像)
  • Dockerfile

Docker中容器和镜像的关系梳理_docker一个容器运行多个镜像-优快云博客

因此我们可以知道,image(镜像)是通过Dockerfile构建出来的,该过程实例化出了container(容器)。即一个容器对应一个镜像,创建了镜像,就也创建了容器!
容器是进程,镜像是文件

2. Dockerfile编写

2.0 注意
  1. 在前后端写Dockerfile文件,名字千万不能错!只能是Dockerfile!!!只能是Dockerfile!!!只能是Dockerfile!!!(重要的事情说三遍)要不然docker执行Dockerfile会报错的。
  2. 指令必须保持全部大写,要不然汇报语法错误!
2.1 常见命令
命令功能备注
FROM拉取容器的基本镜像必须是Dockerfile的第一句!!!
COPY复制本地文件到容器的工作目录明确src和dest传递参数
ADD添加本地文件到容器的工作目录明确src和dest传递参数
WORKDIR指定容器的工作目录可写在COPY和ADD前面,也可以在它们后面
CMD执行容器的指令命令根据前后端项目而定
2.2 ADD和COPY的异同点
  • 异:其实ADD命令远不止上面表格所说的那样,只是添加的功能。它是兼具COPY功能和解压文件的功能的。因此在传送到指定位置时,想省去文件解压还要传递文件的麻烦事,那么ADD是最优选择!当然你也可以先解压,然后再COPY过去,不过这就多走了一步啦!

  • 同:传递参数都是src和dest,那么src是根据构建的上下文的规则,那这是什么意思呢?其实说白了就是你Dockerfile文件存放在你项目里的位置。例如:Java项目Dockerfile是存在放在项目的根目录,那么你想把跟Dockerfile文件同级目录的pom.xml添加到容器当中,那么ADD pom.xml 容器的工作目录下 这就是构建的上下文,其实就是你项目的上下文。要不然在执行Dockerfile文件会报找不到添加文件目录而报错的。COPY指令同理。

    详情可以参见这篇博客:Dockerfile 中的 COPY 与 ADD 命令 - sparkdev - 博客园 (cnblogs.com)

2.3 WORKDIR

容器的工作目录,就是将运行image实例化的容器存放的地方,该语句可以放在执行COPY和ADD指令前面,也可以在它们后面,不同的是dest参数要进行变化。例如:

# 1. 在前面的写法
WORKDIR /app # 指定工作目录为容器的/app
COPY pom.xml . # 复制到容器目录的根目录下 即/app
# 2. 在后面的写法
COPY pom.xml /app/
WORKDIR /app 
2.4 FROM

这是Dockerfile必不可少的指令,也是必须置于文件的第一句!用来拉取基础镜像。

可以直接拉虚拟机的镜像,也可以Java镜像,也可以maven镜像都是可以的。

2.5 Dockerfile范例

何为优雅的Dockerfile呢?就是缩短构建(build)时间,尽可能短的完成项目镜像的制作。

技巧

  • 不需要maven拉取项目需要的jar包(对于Java项目)
  • 自己手动书写配置项目启动基础环境配置(对于Java项目,最基本是要Java环境)

普通版:

FROM maven:3.5-jdk-8-alpine as builder # 拉取maven镜像 为mvn package做准备
# Copy local code to the container image.
WORKDIR /app
COPY pom.xml . # 复制到根目录下(/app)
COPY src ./src #根目录下的src,即 /app/src
# Build a release artifact.
RUN mvn package -DskipTests # 自动拉取项目所需要的所有jar包,从中央仓库获取
# Run the web service on container startup.
CMD ["java","-jar","/app/target/user_center-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]

优化版:

FROM centos # 最最基本的镜像基础
COPY target/user_center-0.0.1-SNAPSHOT.jar /app/user_center-0.0.1-SNAPSHOT.jar # 减少maven拉取jar包的时间 直接复制jar进入到容器的工作目录当中
ADD jdk-8u381-linux-x64.tar.gz /app/ 
WORKDIR /app
#5.配置环境变量
ENV JAVA_HOME=/app/jdk1.8.0_381
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
EXPOSE 8081
CMD ["java", "-jar", "user_center-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]

3. Docker常见指令

学习网站:Docker Compose | 菜鸟教程 (runoob.com)

终端提示:docker --help

这里就介绍我部署上线项目,最常用到的命令。

  • docker build

    -t (为构建的镜像指定名称和标签。通常tag为了标记镜像的版本号)

  • docker run

    -d (以后台模式运行容器,大多数项目都是以后台的形式运行)

    -p : (指定项目启动端口和容器的启动端口,一般都是保持一致)

    -v :(将主机上的目录或文件挂载到容器中。这样可以在容器和主机之间共享文件。)

    –name (指定容器的名称)

  • docker ps

    查看正在运行的容器container的信息

    -a (查看所有创建过的容器)

  • docker images

    查看已经创建的镜像的信息

  • docker kill

    后面加上需要停止的容器id,或者是该容器的名(name)

  • docker logs

    查看某容器的运行日志,后面跟上容器id,或者是该容器名(name)

  • docker rmi/docker rm

    前者删除镜像、后者删除容器

  • docker port

    查看容器的端口映射情况

<think>嗯,用户是一个小白,想要一个单易懂的Gerrit入门指南,学习如何使用和管理Gerrit。首先,我需要明确Gerrit的基本概念和它在开发流程中的作用。Gerrit是一个代码审查工具,常用于Git工作流中,特别是与持续集成系统结合。用户可能对Git有一定的了解,但作为小白,可能需要从基础开始解释。 首先,我应该介绍Gerrit是什么,为什么使用它,然后逐步讲解安装、配置、基本使用和管理。用户可能是在团队中刚接触Gerrit,需要知道如何提交代码、进行代码审查以及处理审核结果。可能需要分步骤说明,用单的术语,避免技术行话。 安装部分,用户可能需要不同环境的安装方式,比如Docker或者手动安装。但作为入门,可能Docker单,所以重点放在Docker安装步骤。不过,用户也可能需要其他方式,但作为入门指南,可能先推荐Docker,因为它更单,减少环境配置的问题。 接下来是配置,包括用户账户设置、SSH密钥配置,这些是使用Gerrit的前提。需要详细说明如何生成SSH密钥,如何添加到Gerrit账户中,如何验证连接是否成功。 然后是基本使用,比如克隆仓库、创建分支、提交代码、推送变更到Gerrit。这部分需要逐步指导,包括具体的命令和操作示例。例如,git push origin HEAD:refs/for/master,这个命令可能对新手来说比较陌生,需要解释清楚每个参数的作用。 代码审查流程部分,用户需要知道如何查看变更,添加评论,打分,以及如何处理审核结果。可能需要解释Gerrit的评分系统,比如+1,+2的含义,以及如何根据反馈修改代码并重新提交。 管理部分,包括用户权限管理、项目配置、插件管理等。这部分可能需要更高级的操作,但对于入门指南,可能需要要介绍,让用户知道有哪些管理功能,但不需要深入细节,除非用户明确需要。 最后,常见问题解答部分,可以帮助用户解决在使用过程中可能遇到的典型问题,比如推送失败、权限不足、冲突解决等。这部分需要结合常见错误信息,给出解决步骤,帮助用户自助解决问题。 需要确保整个指南结构清晰,步骤明确,语言通俗易懂。避免使用复杂的术语,或者在必要时解释术语。例如,解释什么是“refs/for/”分支,为什么需要这样推送代码。可能需要比较Gerrit和普通的Git工作流的区别,帮助用户理解Gerrit的代码审查机制。 另外,用户可能对Gerrit的Web界面不太熟悉,需要指导如何在Web界面上进行审查操作,比如如何查看差异,添加评论,审核通过后如何提交等。可能需要截图或具体步骤,但文字描述的话,需要用清晰的步骤说明。 还需要考虑用户可能的错误操作,比如忘记添加Change-Id,导致推送失败,这时候需要指导如何解决,比如安装commit-msg钩子。这部分可能需要在提交代码的部分提前说明,避免用户遇到问题。 在管理方面,用户可能需要创建新项目,管理用户权限,设置访问控制等。这部分需要介绍Gerrit的权限模型,如何通过Web界面或配置文件进行设置,但可能属于进阶内容,入门指南可以要提及,引导用户查阅更详细的文档。 总结下来,入门指南的结构应该是:Gerrit介、安装配置、基本使用流程(提交、审查、合并)、管理基础、常见问题。每个部分用短的段落和步骤说明,使用示例代码和命令,帮助用户一步步操作。同时,注意提示用户可能遇到的坑,比如SSH配置、Change-Id缺失等,并给出解决方法。</think>### **Gerrit 入门指南(小白友好)** --- #### **一、Gerrit 是什么?** Gerrit 是一个基于 Git 的代码审查工具,主要用于团队协作开发。它像一个“代码审查中间站”:开发者提交代码后,需经过他人审核(Review)才能合并到主分支,确保代码质量。 --- #### **二、Gerrit 核心概念** 1. **Change(变更)** 每次提交的代码修改称为一个“Change”,需经过审核才能合并。 2. **Review(审查)** 团队成员对代码提出意见或批准。 3. **Patch Set(补丁集)** 每次修改后重新提交的代码本(如根据反馈多次修改,会生成多个 Patch Set)。 --- #### **三、Gerrit 安装(快速)** **推荐使用 Docker 安装(最单)**: ```bash # 下载 Gerrit 镜像 docker pull gerritcodereview/gerrit # 启动 Gerrit 容器(自动初始化) docker run -d -p 8080:8080 -p 29418:29418 --name gerrit gerritcodereview/gerrit ``` 访问 `http://localhost:8080` 即可进入 Gerrit Web 界面。 --- #### **四、Gerrit 基础使用** ##### **1. 配置账户** - **注册/登录**:首次访问 Gerrit Web 界面需注册(或使用已有账号,如 LDAP)。 - **设置 SSH 密钥**(用于代码推送): 1. 本地生成 SSH 密钥:`ssh-keygen -t rsa -b 4096` 2. 将公钥(`~/.ssh/id_rsa.pub`)内容粘贴到 Gerrit 账户的 **SSH Keys** 设置中。 ##### **2. 提交代码流程** ```bash # 克隆仓库(Gerrit 仓库地址格式:ssh://用户名@服务器地址:端口/项目名) git clone ssh://your-username@localhost:29418/All-Projects # 创建新分支并修改代码 git checkout -Id!) git commit -m "添加新功能 Change-Id: Ixxx..." # 自动生成 Change-Id 需安装钩子(见下方提示) # 推送到 Gerrit 审查 git push origin HEAD:refs/for/master # 推送到 master 分支的审查队列 ``` **提示**: - **自动生成 Change-Id**:运行命令 `scp -p -P 29418 用户名@gerrit服务器:hooks/commit-msg .git/hooks/`,提交时会自动生成 Change-Id。 ##### **3. 代码审查** - **在 Web 界面查看 Change**: 进入 Gerrit → 点击你的 Change → 查看代码差异,添加评论。 - **审核操作**: - **打分(Code-Review)**:+1 表示通过,+2 有合并权限的人通过。 - **提交合并**:审核通过后,点击 **Submit** 按钮合并代码。 --- #### **五、Gerrit 管理基础** ##### **1. 用户与权限** - **添加用户**:通过 Web 界面或数据库(默认使用内置数据库,可集成 LDAP)。 - **权限管理**:在项目设置 → **Access** 标签页配置权限(如谁能提交、审核、合并等)。 ##### **2. 项目管理** - **创建项目**:Web 界面 → **Projects** → Create New Project。 - **配置分支权限**:在项目的 **Access** 中设置分支(如 `refs/heads/*`)的读写权限。 ##### **3. 插件管理** Gerrit 支持插件(如下载插件到 `gerrit/plugins` 目录): - 常用插件:`webhooks`(事件通知)、`replication`(仓库同步)。 --- #### **六、常见问题** 1. **推送失败:权限不足** - 检查 SSH 密钥是否配置正确。 - 确认账户是否有项目权限。 2. **缺少 Change-Id** - 安装 `commit-msg` 钩子(见第四部分提示)。 3. **代码冲突** - 更新本地代码:`git pull --rebase`,解决冲突后重新提交。 --- #### **七、学习资源** - **官方文档**:https://www.gerritcodereview.com/documentation - **练习环境**:使用 Docker 快速搭建本地 Gerrit 测试。 掌握以上步骤,你已能完成 Gerrit 的基础操作和单管理!遇到问题时,多查日志(Gerrit 日志在安装目录的 `logs` 文件夹)和官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brilliant.Louis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值