每次学新东西,就想到当初选JAVA后端,我就想扇自己
一款运维工具也需要JAVA后端掌握,学不完根本学不完。还需要虚拟机环境,我是真不喜欢虚拟机,太难用了
虽然Docker可以帮助我们快速部署和搭建,但是部署Docker也是真麻烦
为什么不能docker一键安装docker呢

初识Docker

Docker是一款应用容器引擎,可以帮助我们快速部署和搭建
Docker需要在Linux环境下运行,所以需要虚拟机搭建环境

使用Docker的前提当然是搭建虚拟机了
具体安装虚拟机和Docker可看https://b11et3un53m.feishu.cn/wiki/Rfocw7ctXij2RBkShcucLZbrn2d

基于Docker安装mysql

只需要一条命令即可

1
2
3
4
5
6
 docker run -d \
> --name mysql \
> -p 3306:3306 \
> -e TZ=Asia/Shanghai \
> -e MYSQL_ROOT_PASSWORD=123456 \
> mysql


以上就是Docker安装mysql,真是太简单了,我大一安装mysql可是一直出错,安装了一整天了
Docker安装部署这么容易是因为Docker下载的是已经部署好的mysql镜像,而且Docker运行这些镜像的时候
会创建一个隔离环境,称为容器。所以同时运行多个镜像也是可以的
正是因为如此Docker可以解决依赖兼容问题

Docker的常见命令

  1. docker run 创建并运行镜像
  2. -d 让镜像在后台运行
    如果不加 -d 镜像会在控制台执行,不能进行其他操作直到停止
  3. -p 端口映射
    因为我们的Docker是在Linux虚拟机上部署的,假设虚拟机的IP是192.168.150.101.
    Docker运行镜像会创建单独的容器,其实这个容器也是有IP地址的,但是我们直接访问容器的IP会失败
    所以会进行映射,通过访问虚拟机的IP端口映射到容器的IP端口
  4. -e 设置环境变量 格式为 KEY=VALUE
    具体的环境变量需要查看Docker的镜像官网
  5. —name 设置镜像的名称
  6. docker pull 从镜像仓库拉取镜像到本地仓库
  7. docker images 查看本地镜像
  8. docker rmi 删除本地镜像
  9. docker push 将本地镜像推送到镜像仓库
  10. docker stop 停止容器
  11. docker start 启动容器
  12. docker ps 查看容器运行状态
  13. docker rm 删除容器
  14. docker exec -it 容器名 bash 通过命令行操作容器

数据卷

  1. 数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录的之间映射的桥梁;
    数据卷解决的问题:docker为我们下载的镜像文件只包含了该文件运行所需要的依赖环境,
    所以如果我们通过docker exec -it 容器名 bash命令进入该容器去操作容器内文件时,
    会发现容器内并没有 vi 等操作文件的命令,所以我们不能在容器里操作容器里的文件
    因此数据卷可以为我们解决这个问题
    解决的原理 :数据卷可以进行双向映射,创建数据卷目录,然后分别对应容器中的目录和
    虚拟机docker中的目录,映射成功后,通过操作虚拟机中的目录就可以达到操作容器目录的效果
    数据卷对应的虚拟机目录一般都在volume目录下

    数据卷命令

    数据卷映射目录

    docker run -v 数据卷名(自定义):容器目录
  2. docker run 是创造并执行容器,所以如果一个容器已经被创造,但是没有挂载数据卷,即就不能挂载数据卷或者会自动挂载一个匿名卷
  3. 如果执行该命令的时候数据卷不存在,会自动创建,数据卷会和虚拟机volums目录下和数据卷同名的文件目录自动挂载,

    本地目录挂载

    使用命令:docker run -v 本地目录(自定义):容器目录
  4. 本地目录必须以 / 或者 ./开头
  5. 和数据卷挂载的区别:直接将本地目录 和容器目录挂载,本地目录不需要是在volume目录下

    本地挂载mysql

  6. 创建对应的文件夹
  7. 将提前准备好的sql语句脚本和dockerfile文件导入mysql文件夹
  8. 运行命令
    记得前提把上面示例创造的mysql容器删除,不然会报错
    1
    2
    3
    4
    5
    6
    7
    8
    9
    docker 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镜像的结构

  1. 基础镜像是通用的,因为是分层结构,所以其他镜像也可以使用
  2. 设置镜像结构 Dockerfile

    尝试自定义镜像

  3. 编写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"]
  4. 将准备好的demo.jar和Dockerfile上传到虚拟机中
  5. 执行 docker build -t docker-demo .
    -t :给镜像命名
    . :表示当前路径,如果不在上传的demo文件下,需要指定demo的位置
  6. 执行 docker run -d —name dd -p 8080:8080 docker-dome

    如图成功,访问8080端口

容器网络互联

如果在创建容器的时候没有指定网段IP,docker会通过网桥自动分配给容器一个IP,但是容器关闭后,这个IP会被分配给其他容器

自定义网络

加入自定义网络的容器可以通过容器名互相访问

创建自定义网络 hmall

1
docker network create hmall

使mysql处于自定义网络中
1
docker network connect hmall mysql

部署JAVA应用

  1. 对JAVA应用打包,将写好的dockerfile和jar导入虚拟机root目录下
  2. 构建镜像
    1
    docker build -t hmall .
  3. 创造运行容器
    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就作为了解吧!