macm1使用Docker制作jar镜像并连接宿主机mysql

macm1使用Docker制作jar镜像并连接宿主机mysql

docker概念理解

Docker可以让开发者打包应用和依赖包到可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,并且容器是完全使用沙箱机制,相互之间无需任何接口。

Docker 使用 C/S 结构,即客户端/服务器体系结构。

  • 服务端负责构建、运行和分发 Docker 镜像。
  • 客户端和服务端可以运行在一台机器上,也可以通过 RESTful 、 Stock 或网络接口与远程 Docker 服务端进行通信。
docker version

Client:
 Cloud integration: v1.0.29
 Version:           20.10.22
 ...

Server: Docker Desktop 4.16.0 (95345)
 Engine:
  Version:          20.10.22
 ...

Docker Client 通过 REST API 与 Docker Host(dockerd 进程) 进行通信,执行的 docker 命令只与 Docker Host 进行交互。
在 Linux 下 Docker Host 可以是系统自身,而对于 Mac OS X 或 Windows 需要有一个中间的 Linux 操作系统,比如 Docker Desktop 实现的虚拟机,或者自己创建一个 Linux 虚拟机,装上 Docker 就能作为 Docker Host。

Docker Client 与 Docker Host 之间是 REST API,它们可以通过以下三种方式交互

  • 本地 Socket 文件(/var/run/docker.sock)
  • https (通常用 2376 端口)
  • http (通常用 2376 端口)

一个完整的Docker主要由以下几部分构成:

①Docker客户端(Client):客户端使用docker命令或其他工具调用Docker API;

②Docker主机(Host):可以是一个物理机或者虚拟机,用于运行Docker服务进程和容器;

③Docker服务端(Server):Docker守护进程,运行Docker容器;

④Docker镜像(Images):可以理解为创建实例所使用的模板;

⑤Docker容器(Container):容器是从Docker镜像生成对外提供服务的一个或一组服务;

⑥Docker仓库(Registry):保存镜像的仓库,类似于git和svn这样的版本控制系

  • Docker 客户端执行 docker run 命令。
  • Docker Daemon 发现本地没有我们需要的镜像。
  • Daemon 从 Docker Hub 下载镜像。
  • 下载完成后,镜像被保存到本地。
  • Docker Daemon 启动容器。

docker核心组成

docker的整个生命周期有三部分组成:镜像(image)+容器(container)+仓库(repository)

镜像是 Docker 运行容器的前提,仓库是存放镜像的场所

镜像

Docker镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等),镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像(Image)就是一堆只读层(read-only layer)的统一视角

容器

docker容器是由docker镜像创建的运行实例,docker容器 = 镜像+可读层

对于镜像和容器的理解

  • 镜像是文件,容器是进程。
  • 容器是基于镜像创建的,即容器中的进程依赖于镜像中的文件。
  • 镜像可以看成Java中的类,而容器可以看做是类的实例化对象。
  • 一个类可以有多个对象,同理,一个镜像可以有多个容器。
仓库

Docker仓库是一个集中存储、分发Docker镜像的仓库,客户端的docker pull和docker push命令都是直接与Docker仓库发生交互的。一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本

制作jar包镜像

dockerfile
#jdk版本
FROM openjdk:8-jdk-alpine

#挂载目录
VOLUME /tmp

#将jar包添加到容器中并更名为demosw.jar
ADD demoSw.jar demosw.jar

#docker运行命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/demosw.jar"]
jar包构建docker镜像
docker build -t demosw:0.1 .
查看镜像
docker images

REPOSITORY    TAG
demosw        0.1
创建容器
docker run -p 8016:8016 --name xx(容器名) -d xxx(镜像名)

// success
docker run -p 18022:18022 --name demosw -d demosw:0.1

docker run -d -p 80:80 --name webserver nginx
-p                  端口映射内:外
-d                  后台运行
--name              容器名
其他命令

查看容器有没有在运行

docker ps 

查看启动日志

docker logs --tail  300 -f  demo  

给已经运行的docker容器设置自动重启:

docker update –-restart=always demo 

删除镜像

docker rmi -f xxx(IMAGE ID)
// -f 运行容器时强制删除镜像

删除两个id相同的镜像:使用repository和tag

docker rmi docker.io/redis:3.2

删除容器

docker rm -f smart_restaurant(容器名/ID)
// -f 停止并删除
// -v 删除挂载卷
// -l 删除容器连接,但保留容器

连接宿主机mysql

mac电脑可能会出现连接不上数据库的错误,此时需要将连接数据库的127.0.0.1改成host.docker.internal即可连接成功。

spring.datasource.url=jdbc:mysql://host.docker.internal:3306/demoSW?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false

原因是docker是一个虚拟环境,127.0.0.1和localhost指的是虚拟环境内部,而不是外部宿主机,所以无法这样访问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

anjushi_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值