docker服务部署详解

这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战

之前介绍过docker的相关知识,以及常用命令。今天就介绍一下如何将maven工程通过docker打包成镜像,并进行服务部署和启动。

下面就介绍一下如何对一个java开发的maven工程打包镜像并部署。

第一步:

在本地安装docker环境。

直接在官网上安装,点击链接下载: Install Docker Desktop on Mac

下图中的两个按钮都可以点击下载。

屏幕快照 2021-11-30 下午9.38.01.png 下载完成后,双击打开安装即可,和普通mac应用安装方式相同。

屏幕快照 2021-11-30 下午9.40.22.png 然后打开docker,查看一下docker的版本号,是否安装成功。

输入命令$ docker --version

看到版本号返回就说明成功了。 打开docker

屏幕快照 2021-11-30 下午9.44.03.png

第二步:

接下来是对maven程序编译成jar包。

首先通过命令编译或者直接在idea上面执行install编辑。

mvn clean package -Dmaven.test.skip=true -DskipTests=true
复制代码

编译成功后,会出现一个.jar后缀的文件。

第三步:

编译成功后,在项目的根目录下新建一个docker文件夹,创建如下内容,具体目录如下 。

屏幕快照 2021-11-30 下午9.55.41.png

Dockerfile

FROM jeanblanchard/java:serverjre-8
MAINTAINER Te St "[email protected]"
​
RUN apk update; apk add curl bash
RUN apk update && apk add ca-certificates && \
    apk add tzdata && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
# Set up environment variables
ENV BASE_DIR=/opt \
    CLIENT_BASE=/opt/client \
    WEB_BASE=/opt/web
​
EXPOSE 9990 7070
​
# Copy initial execution script
ADD scripts /scripts
​
# Copy final binary
ADD binary/TestClient.jar ${CLIENT_BASE}/
ADD binary/TestWeb.jar ${WEB_BASE}/
ADD binary/classes ${CLIENT_BASE}/classes/
​
# Excution
ENTRYPOINT ["/scripts/run.sh"]
复制代码

prepare.sh

#!/usr/bin/env bash
echo "copying TestClient"
mkdir -p binary
if [ -d "binary/*" ];then
rm -r binary/*
else
echo "无需删除文件"
fi
cp ../target/*.jar binary/
cp -r ../target/classes binary/
复制代码

run.sh

#!/usr/bin/env bash
​
PARAMS=$1
echo "current env: $PARAMS"
shift
if [ ! -n "$PARAMS" ]
then
    echo "env should be provided as an argument"
    PARAMS="dev"
    echo "active dev as a default"
fi
​
#设置执行权限
cd ${CLIENT_BASE}/classes
chmod 777 *
​
echo "加载指定配置,运行jar包"
#加载外部配置文件也可以使用这种:java -jar xxx.jar --spring.config.location="路径+文件名"
nohup java -Dfile.encoding=UTF-8 -jar ${WEB_BASE}/TestWeb.jar --server.port=9990 --spring.profiles.active=${PARAMS}&
nohup java -Dfile.encoding=UTF-8 -jar ${CLIENT_BASE}/TestClient.jar&
echo "输出启动日志"
# 多项目,保持docker前台运行
while [[ true ]]; do
    sleep 1
done
复制代码

startdocker.sh,不太重要的文件。

##运行容器
docker run -idt -p 9990:9990 -p 7070:7070 -e LANG=en_US.UTF-8 testall:latest dev
##打包镜像
docker build -t testall:latest -f /Users/mac/Desktop/test/TestClient/docker/Dockerfile /Users/mac/Desktop/test/TestClient/docker/
## 登录容器
docker exec -ti 4a05c1f1692f#容器id /bin/bash
# 查看日志
docker logs --since 30m xxxxx

复制代码
第四步:

执行prepare.sh文件 ,在终端输入命令sh prepare.sh

这个文件的主要作用就是复制jar包到指定的路径下面。

第五步:

使用docker编译打包镜像,用到Dockerfile文件中的组合命令。这个执行时间可能会有点久。

docker build -t testall:latest -f /Users/mac/Desktop/test/TestClient/docker/Dockerfile /Users/mac/Desktop/test/TestClient/docker/
复制代码

这样镜像就完成了, 通过docker images 查看一下打好的镜像。

第六步

启动docker容器,开放端口9990, 执行下列命令。

docker run -idt -p 9990:9990 -p 7070:7070 -e LANG=en_US.UTF-8 testall:latest dev

接下来就是在浏览器中输入你的web地址,就可以啦。 注意ip是127.0.0.1,域名为9990。

猜你喜欢

转载自juejin.im/post/7036382142749736997