Open Draymonders opened 4 years ago
Dockerfile
FROM adoptopenjdk/openjdk11:alpine-slim
VOLUME /tmp
ENV TimeZone=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone
EXPOSE 2333
ENTRYPOINT ["java", "-jar", "/usr/share/redis-time-out/sturnus.jar"]
ARG JAR_FILE
ADD target/${JAR_FILE} /usr/share/redis-time-out/sturnus.jar
打成docker image
docker build --build-arg JAR_FILE=sturnus-v0.1.jar -t sturnus .
如果打包有问题的话,需要删除掉,用下面的命令
docker images | grep sturnus | awk '{ print $3 }' | xargs docker rmi
运行docker容器
docker run --name sturnus-redis-timeout --env REDIS_HOST="xx.xx.xx.xx" -d sturnus:latest
查看log内容
docker ps -a | grep sturnus-redis-timeout | awk '{ print $1 }' | xargs docker logs --tail=100
如果运行出错,可以删除容器,重新运行
docker ps -a | grep sturnus-redis-timeout | awk '{ print $1 }' | xargs docker rm -f
利用 https://github.com/Draymonders/docker-labs 构建基础环境。
将镜像持久化成文件,发送到server上
docker save sturnus > sturnus.tar
在server上, 加载镜像
docker load < sturnus.tar
又踩到坑了,发现外网并不能访问服务
docker run
有个expose
-p
,是映射宿主端口和容器端口,换句话说,就是将容器的对应端口服务公开给外界访问,而 expose
仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射。我理解: host模式,直接用主机的网络设施; bridge模式,用的软件桥接,建立了宿主机port到容器port的映射
最后确定的是
docker run -p 8080:8080
出现外网无法访问的情况docker-compose
去弄, network_mode
无论是bridge
还是host
都可以
version: "3"
services: redis: image: redis restart: always ports:
12300:6379
sturnus-redis-app: image: sturnus ports:
打jar包的命令
mvn clean package -DskipTests=true
然后新写的一个
Springboot
程序,需要打成jar包, 用的spring-boot-maven-plugin
插件,遇到了Jdk版本不对
和No main class
的坑, 最终成功的打包pom.xml
写法如下