一、Docker简介
Docker 是一个开源的项目,诞生于2013 年初,最初是 dotCloud 公司内部一个云平台的项目。它基于 Google 公司推出的 Go 语言实现。Docker 自开源后受到广泛的关注和讨论,甚至被喻为“下一次开源革命的领导者”。
Docker 利用 LXC 技术,以及 Linux 内核的 Cgroups 和 Namespace 等独特技术对进程进行封装,以达到和虚拟机类似的隔离效果,但更加轻便和高效。
Docker 以容器为单位进行应用程序的封装和交付。它可以自动化的构建、测试和部署应用程序。容器提供了一个独立的运行环境,它的配置和依赖关系被打包在一个可移植的静态容器中。由于所有的容器通过同一种方式进行封装,因此它们可以在任何 Docker 容器运行的环境中运行。
二、Docker 部署 jar
1、创建一个应用
首先,我们需要创建一个 Spring Boot 项目,作为我们的应用程序。使用以下命令创建并启动一个默认 Spring Boot 应用程序。
spring init --dependencies=web myapp
cd myapp
./mvnw spring-boot:run
您应该可以在浏览器中访问该应用程序,在 http://localhost:8080 上看到 Hello World!。
2、Dockerfile
创建 Dockerfile 文件, 并使用以下命令构建 Docker 镜像。
FROM openjdk:8-jdk-alpine
WORKDIR /app
COPY target/myapp-0.0.1-SNAPSHOT.jar /app
ENTRYPOINT ["java","-jar","myapp-0.0.1-SNAPSHOT.jar"]
该 Dockerfile 文件从官方的 openjdk 镜像构建一个新镜像,并设置一个工作目录 /app。将构建好的 jar 包放置在容器中的 /app 目录,并运行 ENTRYPOINT 命令启动应用程序。
使用以下命令构建 Docker 镜像。
docker build -t myapp .
构建好的镜像可以在本地镜像列表中看到,使用以下命令列出镜像。
docker images
3、运行 Docker 容器
运行容器前,我们需要停止之前的应用程序,并使用以下命令启动 Docker 容器。
docker run -d -p 8080:8080 myapp
-d 参数表示容器在后台运行。-p 参数表示将容器内部的 8080 端口映射到主机的 8080 端口。
您应该可以在浏览器中访问该应用程序,在 http://localhost:8080 上看到 Hello World!。
三、Docker Compose
1、创建 Docker Compose 文件
Docker Compose 是 Docker 官方推出的工具,用于定义和运行多容器的 Docker 应用程序。我们可以使用它来定义多个容器并相互通信的应用程序。
创建一个 docker-compose.yml 文件,添加以下内容。
version: '3'
services:
myapp:
build: .
ports:
- "8080:8080"
depends_on:
- mysql
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
在这个文件中,我们定义了两个服务。myapp 服务使用之前构建的 Docker 镜像,并映射容器中的 8080 端口到主机的 8080 端口。mysql 服务使用官方的 MySQL 镜像,并设置 ROOT 密码。
2、启动 Docker Compose
使用以下命令启动 Docker Compose。
docker-compose up
启动后,应用程序可以在 http://localhost:8080 上访问。
3、关闭 Docker Compose
使用以下命令停止 Docker Compose。
docker-compose down
四、Docker Swarm
1、初始化 Docker Swarm
Docker Swarm 是 Docker 官方提供的容器编排工具。它可以让您轻松地扩展和管理 Docker 容器。在使用 Docker Swarm 之前,我们需要初始化一个 Docker Swarm。
docker swarm init
这个命令将初始化一个 Docker Swarm,并返回一个命令,用于加入一个节点到 Swarm 中。
2、创建一个 Stack
创建一个名为 myapp 的 Stack,使用以下命令。
docker stack deploy -c docker-compose.yml myapp
这个命令将在 Swarm 中部署一个名为 myapp 的 Stack,它将启动一个 myapp 服务和一个 mysql 服务。
3、查看服务
使用以下命令查看正在运行的服务。
docker service ls
您应该可以看到两个服务,“myapp_myapp”和“myapp_mysql”。
使用以下命令查看服务的详细信息。
docker service inspect myapp_myapp
您应该可以看到 myapp_myapp 服务的详细信息,包括它的名称、镜像、副本数量、端口映射等。
4、扩展服务
使用以下命令将 myapp_myapp 服务的副本数量扩展到 3。
docker service scale myapp_myapp=3
您应该可以看到 myapp_myapp 服务的副本数量被扩展到 3。
5、关闭 Stack
使用以下命令关闭 Stack。
docker stack rm myapp
这个命令将删除名为 myapp 的 Stack,停止所有关联的服务。
五、总结
本文介绍了使用 Docker 部署 jar 文件的方法,包括手动部署、使用 Docker Compose 和使用 Docker Swarm。Docker 提供的容器化方式可以让我们更轻松地进行应用程序的开发、测试和部署。希望本文可以帮助您更好的使用 Docker。