文章目录
- 简介
- Docker的安装
- 快速入门
- docker部署Mysql
- 命令解读
- Docker基础命令
- 命令别名
- 数据卷挂载
- 挂载数据卷
- 本地目录挂载(推荐)
- 自定义镜像
- 镜像结构
- Dockerfile(了解)
- Docker容器网络互联
- 部署案例
- DockerCompose
简介
Docker就是帮我们快速帮我们部署项目和各种组件的的工具
正常在linux上装mysql很麻烦,步骤也很多
但是你用docker就可以一行代码就搞定
类似应用商店?可以直接帮我们下载各种东西,不用来回找
Docker的安装
linux环境可能有虚拟机你自己弄的
还可以是买的服务器
你直接用ssh连接就行,可以是虚拟机上的也可以是云服务的
然后再我们的Linux去安装docker
安装docker可以看一下别的教程哈
快速入门
docker部署Mysql
部署mysql只需要这么简单的一行语句
等他执行完后
可以直接用navict这种软件,设置IP地址为我们虚拟机地址能直接连上
说明mysql已经部署运行了
感觉有点像maven
镜像可以放到多个容器中执行,每一个容器可以理解我一台服务器,不过只有我们linux可以访问,服务器运行镜像(服务)
命令解读
容器相当于自己是一个系统,有自己IP,但是这个容器我们访问不了,要通过访问Linux(宿主)端口来映射到容器的服务上
比如容器安装mysql对应端口固定3306(容器内端口) 我们可以拿宿主3307(linux端口)去匹配他
端口映射:前面是宿主端口,后面是容器端口
-e 环境变量(k=v形式),不同镜像环境变量不同,具体到时问AI或者自行搜索
最后镜像有版本要求写版本记得,没写默认下载最新版本
Docker基础命令
docker images和docker ps 分别是查看 镜像 和 容器
docker rmi 和 docker rm 分别是删除 镜像 和 容器
docker logs 查看日志
docker exec 进入容器内部
docker run 会去拉取镜像(如果没有)创建容器并且运行(如果你只是想用单个服务,不要一直run,会创建多个容器,跑多个服务)
docker start 就将容器中停止的服务运行起来
docker build/save/load 自定义镜像用的(之后会讲)
所以指令不知道怎么写参数
的可以后面±-help来提示参数
docker load --help
案例
这里我们操作容器时所用名字都是运行容器时候指定的容器名
docker pull nginx 拉取nginx镜像docker images 查看所有镜像docker save -o nginx.tar nginx:latest
将我们latest版本的nginx保存到nginx.tar文件docker rmi nginx:latest 删除latest版本的nginx的镜像docker load -i nginx.tar 重新加载我们的tar文件,将其转化成镜像(nginx就回来了)docker run -d --name nginx -p 80:80 nginx
这个指令上面解析过docker ps 查看运行的容器docker stop nginx 停掉我们的nginx容器(这里最后和我们指定的容器名字相对)docker ps all 查看所有的容器(停不停都可以)docker start nginx 启动停止的nginx容器docker logs nginx 查看nginx容器日志docker exec -it nginx bash
进入容器内部,创建命令行交互(-it作用),命令行以bash识别
exit 退出容器docker rm nginx 删除nginx容器(需要先停止nginx容器运行)
命令别名
docker ps 查看容器排版比较乱
我们一般会格式化
指定查看信息
这个命令写出来复杂可以起别名
linux 可以设置命令别名
使用vi ~/.bashrc进入文件
文件里设置命令别名
前面是 新名 后面的 原名
然后退出保存(回车后输入 wq )
保存后让其生效
source ~/.bashrc
数据卷挂载
你直接进行nginx容器,你使用我们的vi这种linux命令其实用不了
因为容器只包含其运行必要文件,所以你在容器内修改文件就很困难,这时需要数据卷
先创建数据卷,数据卷可以认为是文件,将数据卷挂载到我们容器对应文件夹
然后修改宿主机里面的数据卷关联文件,达到修改nginx容器里面文件的效果(双向绑定)
对应指令
也可以使用docker volume --help看到下面指令
挂载数据卷
只有未创建的容器可以挂载数据卷
所以我们要先删除之前的nginx容器
这个容器内目录,是我们想存放东西的地方
docker rm nginx 删除容器
docker run -d --name nginx -p 80:80 -v :/user/share/nginx.html nginx
-d表示创建容器会直接启动,-v 数据卷名:容器内目录
html数据卷会挂载到nginx容器内的/user/share/nginx.html文件夹
使用docker volume inspect html
可以看见数据卷在主机的位置
docker volume inspect 数据卷名/容器名
下面展示的是数据卷名
如果是容器名的话,显示内容中有容器所有挂载数据卷信息
在这个mounts里面会显示
可以通过这个修改我们文件
可以双击文件修改
也可以将我们win里面的资源拖入
这样也相当于容器内也进行了修改
本地目录挂载(推荐)
就是不用数据卷了
直接用目录挂载
其实和上面差不多
需求
代码
你先把这些文件先创建一下
运行完后对应本地目录就会与我们的运行容器的文件相同(双向绑定了)
自定义镜像
运维这块干的较多
镜像结构
我们要将自己的项目去自定义成一个镜像然后再用Docker去部署
先了解镜像结构
镜像就是几个层的和
可能不同镜像基础层一样,比如mysql和nginx基础层一样就可以不用下载两遍
比如我们现在再拉一个redis就是分层下载的
redis 这个第一次已经存在,说明就是我们之前下过了
Dockerfile(了解)
主要就是拷贝jar包,因为基础jdk镜像已经有人帮忙做了
设置完dockerfile文件
我们接下来就部署就可以了,
将dockerfile和要拷贝的jar包同时复制到linux中
然后在对应目录下使用 docker build -t 镜像名 . (.表示从当前目录找Dockerfile)即可
之后就可以
取出进行docker save 镜像名
将文件取出
可以放到新的服务器 docker load 镜像名即可(用的系统要一样)
Docker容器网络互联
部署案例
视频
DockerCompose
我们之前部署很麻烦
自定义镜像,各个容器还要放入同一个网络中
基本就是一一对应的
参考这个语法就行
这里自定义镜像
context表示从当前目录找文件dockerfile文件(dockergfile指定dockergfil文件名)
也不用创建网络了指定在同一个网络(指定网络名称相同)即可
如何使用该文件,创建容器
把你想部署和yml文件的全放在一个文件夹中
然后docker compose up -d即可(-d表示后台运行),-f我们到我们部署文件夹下就不用写这个参数,-p不写默认为root(一般也不用写)