手机网站静态模板,做网站的项目介绍,房地产app,网址注册查询文章目录 0.关键词1.安装docker2.镜像和容器3.Docker基础1.常见命令2.数据卷#xff08;volume#xff09;要解决的问题#xff1a;什么是数据卷#xff1a;解决的办法#xff1a; 3.数据卷的使用基本命令挂载数据卷#xff08;nginx#xff09;基于本地目录数据挂载volume要解决的问题什么是数据卷解决的办法 3.数据卷的使用基本命令挂载数据卷nginx基于本地目录数据挂载mysqlO创建容器时添加到数据卷 4.自定义镜像镜像的结构DockerfileDockerfile使用构建镜像步骤Docker网络network默认bridge自定义网络O创建容器的时候添加到网络 4.项目部署比较项目部署步骤 5.DockerCompose什么是DockerCompose 0.关键词
镜像/自定义镜像
Dockerfile
容器
数据卷默认/自定义
网络默认/自定义
1.安装docker
根据自己操作系统版本选取对应
参考文档 https://docs.docker.com/engine/install/ubuntu/#prerequisites
2.镜像和容器 3.Docker基础
1.常见命令 (命令不会写在命令后–help会打印提示)
镜像操作
1.docker pull 镜像名 【拉取镜像】
2.docker images 【查看本地镜像列表】
3.docker rmi 镜像名:版本号【删除镜像】
4.docker save -o 镜像名.tar 镜像名 【保存镜像到本地压缩包】
5.docker load -i 要读取的镜像.tar -q(可选打印的信息) 【读取本地压缩包到镜像】
容器操作
6.docker run 【创建并运行容器】
6.docker ps 【查看容器状态默认查看已启动的容器】-a查看所有的容器
7.docker logs 镜像名【查看日志】-f 持续查看
8.docker stop 容器名【停止容器】
9.docker start 容器名 【启动容器】
10.docker rm 容器id 【删除容器】
11.docker exec -it 容器名 bush【进入容器内部】
12.exit【退出容器】
13.docker inspect 容器名【查看容器挂载信息】
2.数据卷volume
要解决的问题
当我们需要修改nginx内的静态文件使用vi命令但是在docker中是没有这个命令的所有无法修改那么我们就要用到数据卷解决问题
什么是数据卷
一个虚拟目录是容器内目录与宿主机目录之间映射的桥梁
解决的办法
由于nginx内的文件无法修改那么我们通过数据卷做容器内目录与宿主机目录之间的双向绑定只要宿主机目录改变那么容器内目录也会发生改变 3.数据卷的使用
基本命令
查看如何使用 docker --help 14.docker volume ls【查看数据卷】
15.docker volume rm 数据卷名【删除指定数据卷】
16.docker volume inspect 数据卷名【查看指定数据卷详情】
17.docker volume prune【删除未被使用的数据卷】
挂载数据卷nginx
创建容器时利用-v 数据卷名:容器内目录 完成挂载
//以nginx为例
//创建并且挂载数据卷
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx//查看卷就能看到有一个名为html的数据卷
docker volume ls//查看html卷的详细信息
docker volume inspect html
宿主机/var/lib/docker/volumes/html/_data与容器/usr/share/nginx/html完成映射
[{CreatedAt: 2024-12-24T14:04:3208:00,Driver: local,Labels: null,Mountpoint: /var/lib/docker/volumes/html/_data,Name: html,Options: null,Scope: local}
]//到达宿主机的该目录下做修改
cd /var/lib/docker/volumes/html/_data//再进入nginx容器查看,我们发现再宿主机做的修改容器内也发生了修改
docker exec -it nginx bush//查看nginx容器的挂载信息
docker inspect nginxMounts: [//这里就可以看到挂载到的宿主机目录和容器内目录{Type: volume,//类型数据卷Name: html,//数据卷名Source: /var/lib/docker/volumes/html/_data,//宿主机目录Destination: /usr/share/nginx/html,//容器内目录Driver: local,Mode: z,RW: true,Propagation: }],基于本地目录数据挂载mysql
挂载到宿主机任意(自己定义的)目录而不是固定的/var/lib/docker/volumes目录下
**解决了什么问题******如果mysql做版本升级删除了mysql容器但是数据不会被删除会存在宿主机默认目录下但是如果重新创建mysql容器那么mysql数据卷就会产生一个新的命名的匿名数据卷原来的数据就用不了了那么我们通过指定的宿主机目录每次mysql做版本升级只需要指定到这些目录这些数据即可使用
匿名数据卷由于mysql的数据会越来越多容器放不下所以会自动把数据挂载出去产生的数据卷就是匿名的 注意mysql数据目录、配置文件(cnf文件,配置一些字符格式)、初始化脚本(sql文件)目录都需要挂载
O创建容器时添加到数据卷
docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \ -e MYSQL_ROOT_PASSWORD root1234\-v /root/mysql/data:/var/lib/mysql \-v /root/mysql/init:/docker-entrypoint-initdb.d \-v /root/mysql/conf:/etc/mysql/conf.d \mysql-e TZAsia/Shanghai \ 用户指定时区防止日志等修改有差异4.自定义镜像
**问题**有一些镜像docker是没有的那么我们需要自己去制作镜像例如java应用每一个java应用都不一样所以我们需要自己定义自己java项目的镜像
镜像的结构
镜像就是包含了应用程序程序运行的系统函数库运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。例如我们要运行java项目不同操作系统的要有对应的JRE才能运行那么我们需要配置对应的环境
1.基于Ubuntu构建的java镜像结构 我们只需要清楚的描述镜像的结构docker就会自动帮我们完成整个镜像的构建
Dockerfile copy命令拷贝到镜像的指定目录目录不一定存在但docker制作过程中会自动创建出来 Dockerfile使用
18.docker build -t 镜像名:版本 所在目录【构建镜像】 # 基础镜像 注意基础镜像需要引入可以通过docker load -i .tar文件
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZAsia/shanghai
RUN ln -snf /usr/share/zoneinfo/$Tz /etc/localtime echo $Tz /etc/timezone
# 拷贝jar包
copy hm-service.jar /app.jar
# 入口
ENTRYPOINT [java-jar,/app.jar]构建镜像步骤
基础镜像.tar包需要提前上传并加入镜像
1.上传jar包到当前目录下
2.编写好Dockerfile文件
3.执行docker build的命令这个时候镜像已经完成通过docker images查看
4.执行docker run -d --name 自定义容器名 -p 指定的启动端口:端口 镜像名【创建并运行容器】
5.查看运行状态(日志) docker log -f 容器名
Docker网络network
环境之间需要相互访问
默认bridge 自定义网络
解决的问题默认方式下的网桥要是A服务停止后B服务开启就会占用A的ip,A再次开启就会分配其他ip,那么其他引用A服务的服务需要更改A服务现用的ip
那么我们使用自定义网络通过容器名就可以互相访问不需要知道对方的ip 19.docker network create 自定义网络名【创建一个网络】 20.docker network ls【查看全部网络】 21.docker network prune 【清楚未使用的网络】 22.docker network inspect 网络名【查看网络详情】 23.docker network connect 自定义的网络名 容器名【指定容器加入某个网络】
24.docker network rm 网络名【删除自己定有的网络/网桥】
**注意**如果我们通过docker inspect 容器名查看容器的网络详情发现ip是空的那么就是该容器没有被启动
O创建容器的时候添加到网络
那么查看容器网络详情就不会看到默认bridge的网桥就只剩自己自定义的网桥,那么我们访问其他该网络下的容器就可以直接 ping 容器名访问了
docker run -d --name 需要创建的容器名 -p 端口号:映射的端口号 --network 自定义的网络名 镜像名
4.项目部署
比较
java应用原来再本地访问数据库需要访问localhost:3306地址我们使用容器化部署后配置自定义网络通过容器名就可以访问了
原 现注意这里的mysql是自定义网络的网络名 前端配置nginx(这里采用自定义数据卷) 项目部署步骤
1.打包jar包
2.编写Dockerfile文件
3.执行docker build -t 镜像名:版本 所在目录 命令来构建java镜像
4.docker run启动java镜像
5.准备号静态资源和nginx配置文件(文件需要做修改所以挂载到数据卷)
注意自定义网络需要再同一个网络下【java容器、mysql容器、nginx容器】
【可以创建容器时指定–network 网络名】或者【通过docker netword connect 自定义的网络名 容器名】命令连接到网络
5.DockerCompose
什么是DockerCompose
Docker Compose通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器帮助我们实现多个相互关联的Docker容器的快速部署。