引言
当前微服务项目已经大面积普及,对于新需求迭代上线有许多疑惑的部分,比如线上的某些功能不能重启,在这种情况下我们需要部署和启动项目就不能搞大范围重启或干脆重新制作镜像,这种方式都是不可取的,这时候就需要我们自己手动搭建镜像并部署,笔者开始模拟这次上线过程并做记录。
部署准备工作
step1: 安装依赖镜像
step2: 安装镜像
基础镜像
很多docker 容器都会依赖于jdk基础镜像,我们首先需要制作jdk基础镜像,制作jdk镜像就意味着需要拉去centos7环境镜像,接下来笔者将centos7拉取的过程记录如下:
docker pull centos:7
docker run -di --name centos7 centos:7
保证centos7基础镜像顺利构建成功
构建jdk1_8_202镜像
dockerfile 编写
# 指明构建的新镜像是来自于`centos:7`基础镜像
FROM centos:7
# 通过镜像标签声明了作者信息
LABEL maintainer="feitian"
# 设置工作目录
WORKDIR /usr/local/java/develop
# 新镜像构建成功以后创建指定目录
RUN mkdir -p /usr/local/java/develop
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
# 拷贝文件到镜像中并解压
ADD jdk-8u202-linux-x64.tar.gz /usr/local/java/develop
# 设置容器内 JAVA_HOME 环境变量
ENV JAVA_HOME /usr/local/java/develop/jdk1.8.0_202
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
构建jdk镜像
docker build -f /usr/local/java/Dockfile -t feitianjdk:jre-8 .
jdk基础镜像构建
dockerfile制作
# 基础镜像
FROM feitianjdk:jre-8
# author
MAINTAINER feitian
# 挂载目录
VOLUME /home/feitian
VOLUME /data/sftpuser/data
# 创建目录
RUN mkdir -p /home/feitian
RUN mkdir -p /data/sftpuser/data
# 指定路径
WORKDIR /home/feitian
ENV LANG=zh_CN.UTF-8 \
LANGUAGE=zh_CN:zh \
LC_ALL=zh_CN.UTF-8 \
JAVA_OPTS="-server -Xms512m -Xmx1024m" \
SPRING_PROFILES_ACTIVE="dev" \
NACOS_SERVER_ADDR="121.37.xxx.xxx:8848" \
NAMESPACE="fb26666d-ea94-4114-8390-b28d82910d20"
# 时区设置
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/shanghai" > /etc/timezone
# 复制jar文件到路径
COPY ./xxx-platform-xxx-1.0-RELEASES.jar /home/feitian/xxx-platform-xxx-1.0-RELEASES.jar
# 启动服务
# ENTRYPOINT ["java","-jar","app.jar"]
ENTRYPOINT exec java ${JAVA_OPTS} -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -jar -Dspring.profiles.active=${SPRING_PROFILES_ACTIVE} -Dspring.cloud.nacos.discovery.server-addr=${NACOS_SERVER_ADDR} -
Dspring.cloud.nacos.discovery.namespace=${NAMESPACE} -
Dspring.cloud.nacos.config.namespace=${NAMESPACE} -
Dspring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR} xxx-platform-xxx-1.0-RELEASES.jar
- note 注意from 后面的镜像名一定要注意,别写错了。
执行镜像
docker run -itd -p 9666:9666 \
-v /home/feitian:/home/feitian \
-v /data/sftpuser/data:/data/sftpuser/data \
--name feitianbk feitianbk:latest
如果命令顺序有问题,可能会导致挂载失效的问题
挂载目录是否生效
创建容器并执行镜像时需要主意顺序,不然会导致挂载失效的问题。
docker inspect feitianbk | grep Mounts -A 40
容器运行正常
至此笔者关于docker的文章可能就告一段路,接下来笔者会重点学习一些关于算法和源码的文章分享给各位童鞋,欢迎一起交流学习。