Docker
每次学新东西,就想到当初选JAVA后端,我就想扇自己
一款运维工具也需要JAVA后端掌握,学不完根本学不完。还需要虚拟机环境,我是真不喜欢虚拟机,太难用了
虽然Docker可以帮助我们快速部署和搭建,但是部署Docker也是真麻烦
为什么不能docker一键安装docker呢
初识Docker
Docker是一款应用容器引擎,可以帮助我们快速部署和搭建
Docker需要在Linux环境下运行,所以需要虚拟机搭建环境
使用Docker的前提当然是搭建虚拟机了
具体安装虚拟机和Docker可看https://b11et3un53m.feishu.cn/wiki/Rfocw7ctXij2RBkShcucLZbrn2d
基于Docker安装mysql
只需要一条命令即可
1 | |
以上就是Docker安装mysql,真是太简单了,我大一安装mysql可是一直出错,安装了一整天了
Docker安装部署这么容易是因为Docker下载的是已经部署好的mysql镜像,而且Docker运行这些镜像的时候
会创建一个隔离环境,称为容器。所以同时运行多个镜像也是可以的
正是因为如此Docker可以解决依赖兼容问题

Docker的常见命令
- docker run 创建并运行镜像
- -d 让镜像在后台运行
如果不加 -d 镜像会在控制台执行,不能进行其他操作直到停止 - -p 端口映射
因为我们的Docker是在Linux虚拟机上部署的,假设虚拟机的IP是192.168.150.101.
Docker运行镜像会创建单独的容器,其实这个容器也是有IP地址的,但是我们直接访问容器的IP会失败
所以会进行映射,通过访问虚拟机的IP端口映射到容器的IP端口 - -e 设置环境变量 格式为 KEY=VALUE
具体的环境变量需要查看Docker的镜像官网 - —name 设置镜像的名称
- docker pull 从镜像仓库拉取镜像到本地仓库
- docker images 查看本地镜像
- docker rmi 删除本地镜像
- docker push 将本地镜像推送到镜像仓库
- docker stop 停止容器
- docker start 启动容器
- docker ps 查看容器运行状态
- docker rm 删除容器
- docker exec -it 容器名 bash 通过命令行操作容器
数据卷
- 数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录的之间映射的桥梁;
数据卷解决的问题:docker为我们下载的镜像文件只包含了该文件运行所需要的依赖环境,
所以如果我们通过docker exec -it 容器名 bash命令进入该容器去操作容器内文件时,
会发现容器内并没有 vi 等操作文件的命令,所以我们不能在容器里操作容器里的文件
因此数据卷可以为我们解决这个问题
解决的原理 :数据卷可以进行双向映射,创建数据卷目录,然后分别对应容器中的目录和
虚拟机docker中的目录,映射成功后,通过操作虚拟机中的目录就可以达到操作容器目录的效果
数据卷对应的虚拟机目录一般都在volume目录下
数据卷命令

数据卷映射目录
docker run -v 数据卷名(自定义):容器目录 - docker run 是创造并执行容器,所以如果一个容器已经被创造,但是没有挂载数据卷,即就不能挂载数据卷或者会自动挂载一个匿名卷
- 如果执行该命令的时候数据卷不存在,会自动创建,数据卷会和虚拟机volums目录下和数据卷同名的文件目录自动挂载,
本地目录挂载
使用命令:docker run -v 本地目录(自定义):容器目录 - 本地目录必须以 / 或者 ./开头
- 和数据卷挂载的区别:直接将本地目录 和容器目录挂载,本地目录不需要是在volume目录下
本地挂载mysql
- 创建对应的文件夹

- 将提前准备好的sql语句脚本和dockerfile文件导入mysql文件夹
- 运行命令
记得前提把上面示例创造的mysql容器删除,不然会报错1
2
3
4
5
6
7
8
9docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v ./mysql/data:/var/lib/mysql \
-v ./mysql/conf:/etc/mysql/conf.d \
-v ./mysql/init:/docker-entrypoint-initdb.d \
mysql
自定义镜像
镜像
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。
docker镜像的结构
- 基础镜像是通用的,因为是分层结构,所以其他镜像也可以使用

- 设置镜像结构 Dockerfile

尝试自定义镜像
- 编写Dockerfile
1
2
3
4
5
6
7
8
9# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"] - 将准备好的demo.jar和Dockerfile上传到虚拟机中
- 执行 docker build -t docker-demo .
-t :给镜像命名
. :表示当前路径,如果不在上传的demo文件下,需要指定demo的位置 - 执行 docker run -d —name dd -p 8080:8080 docker-dome

如图成功,访问8080端口
容器网络互联
如果在创建容器的时候没有指定网段IP,docker会通过网桥自动分配给容器一个IP,但是容器关闭后,这个IP会被分配给其他容器
自定义网络
加入自定义网络的容器可以通过容器名互相访问
创建自定义网络 hmall
1 | |
使mysql处于自定义网络中
1 | |
部署JAVA应用
- 对JAVA应用打包,将写好的dockerfile和jar导入虚拟机root目录下

- 构建镜像
1
docker build -t hmall . - 创造运行容器本地浏览器访问
1
docker run -d --name hmall --network hmall -p 8080:8080 hmall
部署前端应用
emmm~,这个最后一步一直报错 404,花了一下无,给我气红温了,就先跳过了一键部署DockerCompose
DockerCompose是通过一个单独的YAML格式的文件来定义一组相关联的应用容器,帮
助我们实现多个相互关联的Docker容器的快速部署。
右边即是YAML格式的容器等同于左边

将准备好的YAML文件传入虚拟机中,再执行 docker compose up 即可一键部署
完结
Docker并不作为JAVA后端的一个重点,再加上最近有些浮躁,很难静下心来,所以学的有点粗糙,
也想早点开启下一章微服务的学习
Docker就作为了解吧!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Little Monste'Blog!
评论




