git是分布式的版本控制工具
git可以通过本地仓库管理文件的历史版本记录
# 本地仓库操作的命令
# 初始化本地库
git init
# 添加文件到暂存区
git add .
git checkout 暂存区要撤销的文件名称
# 提交暂存区文件
git commit -m '注释'
# 版本穿梭
# 查看提交记录
git log
git reflog
# 版本穿梭
# 直接使用穿梭后的版本文件
git reset --hard 提交版本id
# 使用穿梭后的版本文件+ 穿梭前的修改
git reset --soft 提交版本id
# 删除git管理的文件
git rm 要删除的文件
git add .
git commit -m '注释'
# 本地分支管理
# 一条时间线上的历史版本记录 就是一个分支
# 通过Head指针指向分支 分支指向一个提交id
# 查看分支信息(所有分支+分支指向的提交id)
git branch -v
# 创建分支
git branch 分支名称
# 切换分支
git checkout 分支名称
# 删除分支
git branch -d 分支名称
# 合并分支(在当前分支中去合并另一个分支的内容)
git merge 要合并的分支名称
# 分支合并冲突解决
# 查看冲突文件信息
git status
# 编辑冲突文件(保留需要的代码,删除冲突标志) 保存
vim ...
# 重新提交
git也可以通过远程仓库协作开发管理历史版本记录
#gitlab/gitee/github都是远程仓库
# - gitlab是一个开源项目,用来搭建局域网的远程仓库
# - 远程仓库需要使用账号密码才可以连接访问,账号还需要有对应的权限(决定账号是否可以访问远程仓库、或者推送更新到远程仓库...)
# 先在远程仓库中创建一个空仓库
# 本地创建标识(origin)连接空仓库
git remote add origin 远程仓库地址
# 查看远程仓库的标志
git remote
# 推送本地仓库到远程仓库(远程分支不存在会自动创建) 需要使用账号连接
git push origin 本地分支:远程分支
# 拉取远程仓库最新的代码到本地
git pull origin 远程分支名称
# git工作流程(进入公司工作)
# 1、克隆远程仓库 需要使用账号连接
git clone 远程仓库地址
# 2、开发(写代码) 可能要切换分支
# 3、提交到本地仓库
git add .
git commit -m '备注'
# 4、推送自己的代码(涉及到远程仓库版本的修改:慎重)
git push origin 自己的分支:远程分支名称
# 协作冲突
# 解决三板斧
# 1、先拉取最新版本
git pull origin 分支
# 2、手动解决冲突
# 3、在提交推送到远程仓库
git add .
git commit -m 'xx'
git push origin 本地分支:远程分支
git常见问题:
你们公司开发中使用了哪些分支,某一个分支你们用来干什么?
master:生产分支
release:预发布分支
devlope: 开发分支(以后开发都是基于此分支进行)
- feature:功能分支(某个程序员开发独立功能使用的分支)
hotfix:bug修复分支
什么是PR: pull request
- 推送到远程仓库的分支,申请合并
虚拟机
测试:
- mysql等中间件安装多个比较繁琐
- 一个虚拟机只能装一个操作系统(一个系统中启动的服务不能重复、监听的端口号都是唯一的)
生产中:
- 快速水平扩展(mysql读写压力过大,同时启动多个分摊访问压力)
如果通过服务器 安装多个虚拟机的方式 安装多个中间件解决,每个虚拟机都是一个完整的设备,占内存磁盘空间较大
虚拟化容器技术:
在一台服务器中安装一个工具(软件):
- 工具可以创建多个进程,每个进程按照我们需要的最小环境准备部署需要的中间件或者程序
docker hub远程仓库服务器在国外 下载速度较慢
为了提高下载速度 可以使用国内的镜像服务器(网易、阿里云)
docker镜像仓库
- 存放的镜像文件的仓库
- docker镜像仓库地址:https://hub-stage.docker.com/
docker镜像: 类似于类
- 特殊的文件:包含了一个镜像创建容器运行时的文件
- docker可以基于镜像文件创建容器
docker容器: 类似于对象
- 使用镜像文件运行后的进程
- 每个容器对应一个docker的进程
- 每个容器对应自己独立的一个环境,容器间互相独立隔离、和操作系统也是隔离的
- 每个容器有自己的一套环境和自己的任务
docker用来虚拟化一个个的容器,每个容器是一个独立的环境可以运行程序
搜索镜像:
docker search 镜像名称
docker search redis
下载镜像:
docker pull 镜像名称[:tag]
docker pull redis
docker pull redis:6.2.14
查询镜像:
docker images
docker images -q :只查询所有镜像id
删除镜像:
docker rmi 镜像名称[:tag] 删除指定版本的镜像
docker rmi $(docker images -q) 查询所有镜像的id 全部删除
执行时会新创建容器
# 查看运行中的容器
docker ps
# 查看所有容器
docker ps -a
# 创建容器: 如果镜像不存在会自动下载 默认前台阻塞运行
docker run redis:7
# 1、创建守护式容器: 以守护的方式运行
# -d :守护启动容器
docker run -d redis:7
# --name: 配置容器名称(必须唯一)
docker run -d --name 'ertao' redis:7
# 2、创建交互式容器: 容器创建后自动进入到容器内部
# -it :交互启动并打开指定终端
docker run -it --name 'santao' redis:7 /bin/bash
# 进入容器内部:支持基础的linux命令
# 退出并关闭容器:输入exit+回车
# 退出不关闭容器: ctrl键+p键+q键
# 3、重新进入容器内部
# 重新进入容器 并使用容器内默认的终端(ctrl+c结束时会导致容器关闭)
docker attach ertao
# 重新进入容器并创建新的终端:
# -it :交互方式进入容器 exit退出时,容器不会被关闭
docker exec -it 容器名称/id /bin/bash
#在已创建的容器的基础上进行的操作
docker start 容器id/容器名称
docker stop 容器id/容器名称
docker restart 容器id/容器名称
docker pause 容器id/容器名称
docker unpause 容器id/容器名称
docker kill 容器id/容器名称
# 查看正在运行中的容器
docker ps
# 查看所有容器
docker ps -a
# 删除容器
docker rm 容器名称/id
# 删除未运行的所有容器
docker rm $(docker ps -qa)
# -f强制删除
docker rm -f 容器名称/id
docker run -d -p 6379:6379 -p 6380:6379 redis:7
容器日志查看:以后用来排查容器启动失败/请求处理失败的错误日志
# -f 跟随查看
# -n 查看最后的多少行
docker logs -f -n5 myredis1
查看容器详情信息:
docker inspect 容器名称/id
容器拷贝文件
为了保证容器内的数据安全,容器可以将自己内部的某些文件挂载到服务器(虚拟机)磁盘上,就算容器被误删除了,数据仍然存在不会丢失
但是,仍然有概率丢失,所以以后一般不会使用docker部署mysql
数据卷管理: volume命令基本不用
#数据卷:为docker容器准备的目录,存放docker容器产生的数据或者配置
# 查看所有的已创建的数据卷
docker volume ls
# 创建数据卷:暂时没有用(没有容器绑定)
docker volume create myredis2-data
# 查看数据卷详情:
docker volume inspect myredis2-data
# 删除指定数据卷
docker volume rm myredis2-data
# 删除未使用数据卷
docker volume prune
数据卷挂载:相对路径挂载数据卷
- docker自动创建目录挂载
- 不同的容器内部的程序产生的数据持久化的目录不同,所以挂载时容器内的目录不一定是什么
- -v 用来挂载目录:相对路径表示由docker来在磁盘上创建目录和容器内的指定目录挂载
- -v 服务器内目录:容器内目录
docker run -d --name myredis2 -p 7379:6379 -v myredis2-data:/data redis:7
目录挂载:绝对路径目录
- 需要我们手动创建目录 然后配置挂载
- 我们先创建 /myredis2-data 目录, 使用该目录挂载容器内的 data目录
docker run -d --name myredis2 -p 7379:6379 -v /myredis2-data:/data redis:7
在容器挂载的目录中添加文件会不会挂载到容器内部?
在本地目录中新增的文件或者对文件进行的修改 也会上传到容器的内部
docker创建redis容器 挂载配置文件和 数据文件目录
# 创建自定义目录
mkdir /myredis4
# 进入自定义目录
cd /myredis4/
# 创建存放redis配置文件的目录
mkdir ./conf
# 创建挂载redis持久化数据文件的目录
mkdir ./data
# 创建redis配置文件
vim /myredis4/conf/redis.conf
protected-mode no
daemonize no
databases 16
port 6380
dir /data/
# 创建redis容器: 配置端口号映射、指定目录和配置文件挂载
# redis-server /etc/redis/redis.conf 指的是容器创建后再容器内执行redis启动命令并使用我们挂载到容器内的配置文件
docker run -p 7381:6380 --name myredis4 -v /myredis4/conf/redis.conf:/etc/redis/redis.conf -v /myredis4/data:/data -d redis:7 redis-server /etc/redis/redis.conf
# 将虚拟机opt/a目录下的 文件复制到容器内的 /opt目录下
docker cp /opt/a/pangju.txt myredis4:/opt/
# 将容器内的文件下载到虚拟机当前目录下
docker cp myredis4:/opt/pangju.txt ./
exec: 可以重新进入容器内,也可以再容器外 让容器执行命令打印结果
docker exec -it myredis4 cat /etc/redis/redis.conf
docker exec -it myredis4 ll /etc
docker支持将运行中的容器创建为镜像,将镜像打为tar包,也支持将镜像的tar包加载还原为镜像文件使用
# 将容器保存为镜像
docker commit 容器名称/id 自定义镜像名称:自定义版本号
# 镜像打包为tar我呢间
docker save -o 压缩包路径+名称 镜像名称:版本号
# 要恢复镜像的服务器 拿到压缩包以后
# 还原压缩包为镜像文件
docker load -i 压缩包路径+名称
# 使用镜像创建容器运行
===========================================================
dockerfile 可以按照dockerfile语法定义一个文件,按照文件的配置准备好需要的其他文件,docker可以自动根据他们创建一个镜像文件使用
下面的内容:了解 按照课件过一遍
可以管理镜像和容器