macm1使用Docker制作jar镜像并连接宿主机mysql
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
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服务端ServerDocker守护进程运行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指的是虚拟环境内部而不是外部宿主机所以无法这样访问。