第一版
- springboot项目打包成jar
- 创建dockerfile,注释掉的不用理会,没什么 用,可以去掉
#[root@localhost docker-test]# cat dockerfile
FROM centos
#VOLUME ["/volume01","/volume02"]
#CMD yum -y install vim
COPY ./app.jar /home/app.jar
EXPOSE 8080
RUN yum install java-1.8.0-openjdk.x86_64 -y
ENTRYPOINT java -jar /home/app.jar --server.port=8080
#ENV MYPASS 123456
#CMD echo $MYPASS
CMD /bin/bash
RUN 用来安装软件,ENTRYPOINT 用来在容器启动后运行的命令,这里就是运行java
- 构建镜像,
youname/jdk
自定义镜像名称,别忽略最后的那个点号
docker build -f dockerfile -t youname/jdk .
- 运行
docker run -d --name myapp -p 80:8080 youname/jdk
-
访问
-
我的springboot项目只是一个简单的演示,只有首页
第二版
上面的运行后,在使用docker attach 或者 docker exec 之类的命令进入后停留在springboot的页面,无法操作其他的,只能结束ctrl+c,这样就导致容器结束运行;因为容器如果没有前台命令运行的话就自动退出,例如,如果手动在centos安装redis后,即使后台运行了,也是会退出;
解决方法:使用ENTRYPOINT指令,执行一连串的shell命令(放到一个脚本中),该指令dockerfile中只能有一个;
- 修改dockerfile
FROM centos
VOLUME ["/home/docker-test/conf:/home/conf/","/home/docker-test/data:/home/data"]
EXPOSE 8080
RUN yum install java-1.8.0-openjdk.x86_64 redis -y && systemctl enable redis
#CMD yum -y install vim
COPY ./data/app.jar /home/data/app.jar
COPY ./data/start.sh /home/data/start.sh
COPY ./conf/redis.conf /home/conf/redis.conf
RUN chmod +x /home/data/start.sh
#RUN redis-server /home/conf/redis.conf
#ENTRYPOINT redis-server /home/conf/redis.conf && nohup java -jar /home/data/app.jar --server.port=8080 > /home/data/out.log 2>&1 & && /bin/bash
ENTRYPOINT ["sh","/home/data/start.sh"]
- 增加start.sh脚本
#!/bin/sh
redis-server /home/conf/redis.conf
nohup java -jar /home/data/app.jar --server.port=8080 > /dev/null 2>&1 &
/bin/bash
#依次运行
- 固定不变的命令放到前面,比如下载jdk,否则每次修改dockerfile构建镜像都要重新下载一次;不理解参考docker镜像层的概念,或者使用docker image history 你的镜像 查看构建历史
第三版
- centos + node
FROM centos
ADD ./node-v12.18.3-linux-x64.tar.xz /usr/local/
RUN chmod +x /usr/local/node-v12.18.3-linux-x64/bin/node
RUN chmod +x /usr/local/node-v12.18.3-linux-x64/bin/npm
RUN ln -s /usr/local/node-v12.18.3-linux-x64/bin/node /usr/bin/node
RUN ln -s /usr/local/node-v12.18.3-linux-x64/bin/npm /usr/bin/npm
#CMD node -v
RUN npm config set registry https://registry.npm.taobao.org
ENTRYPOINT ["/bin/bash"]
- 其中
node-v12.18.3-linux-x64.tar.xz
是需要提前下载好