上一篇文章使用Dockerfile创建了一个SpringBootWeb的镜像,创建完成之后就可启动容器了。
但是进入启动的容器缺少了vim工具,所以需要查看修改一些文件或者配置就非常的不方便,如果
在容器中安装vim,则每次创建容器都必须安装一遍vim,确实非常的麻烦。
所以本文就是用于构建镜像的时候顺便安装vim。啥都不说,直接上配置。
一.创建一个基础的dockerfile文件
from ubuntu
user root
run pwd
run cp /etc/apt/sources.list /etc/apt/ubuntu_sources.list
# 设置apt-get源
run echo 'deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted \n\
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted \n\
deb http://mirrors.aliyun.com/ubuntu/ jammy universe \n\
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates universe \n\
deb http://mirrors.aliyun.com/ubuntu/ jammy multiverse \n\
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates multiverse \n\
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse \n\
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted \n\
deb http://mirrors.aliyun.com/ubuntu/ jammy-security universe \n\
deb http://mirrors.aliyun.com/ubuntu/ jammy-security multiverse \n ' > /etc/apt/sources.list
# 执行软件包更新源操作
run apt-get -o Acquire::Check-Valid-Until=false update
#安装jdk
run apt-get install -y openjdk-8-jdk
# 安装vim编辑器
run apt-get install vim -y --allow-unauthenticated
run echo 'set nu' > ~/.vimrc
# 拷贝时区文件,如果没有就先注释
add zoneinfo.tar /usr/share/
# 设置时区
run ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
run echo 'Asia/Shanghai' >/etc/timezone
# 安装网络工具
run apt-get install -y net-tools inetutils-ping curl
# run apt-get install -y wget
env LANG=C.UTF-8
env JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
run mkdir -p /app/application
workdir /app/application
2.然后构建基础镜像
docker build -t java_ubuntu ./ -f Dockerfile
构建完成的镜像就会把vim的工具安装装java_ubuntu的镜像中
3.使用基础镜像
3.1 方式1:专用的dockerfile
这个构建镜像文件主要用于创建专用的springbootweb.jar
# from java_ubuntu docker的基础image
from java_ubuntu
# maintainer设置维护这信息 作者是lixin
maintainer lixin
# 创建一个目录作为工作目录
run mkdir SpringBootWeb
# 设置工作目录,类似cd
workdir SpringBootWeb
# 拷贝yml文件到工作目录中
copy application-dev.yml application-dev.yml
# 拷贝yml文件到工作目录中
copy SpringBootWeb-1.0.jar springbootweb.jar
# 设置对外端口为 8080
expose 8080
# 执行 java -jar 命令 (CMD:在启动容器时才执行此行。RUN:构建镜像时就执行此行)
cmd java -jar springbootweb.jar --spring.profiles.active=dev
然后执行构建springbootweb-dev的镜像
docker build -t springbootweb-dev ./ -f Dockerfile-dev
然后执行启动容器命令就可以正常启动容器了
docker run --name=springbootweb-dev -d springbootweb-dev
3.2 方式2:模板的dockerfile
通用的dockerfile是通过build传入参数进行,创建镜像的
from java_ubuntu
arg bootappname
run pwd
copy ${bootappname} bootapp.jar
expose 8080
run echo "#!/bin/bash" > startup.sh
run echo "java -jar bootapp.jar" >> startup.sh
run chmod +x startup.sh
#cmd不能直接执行${},可以在docker run时通过环境变量-e的方式传递
#cmd java -jar ${bootappname}
entrypoint ["/bin/bash","startup.sh"]
然后执行构建脚本
docker build --build-arg appname=producter-one -t producter-one ./ -f dockerfile-build
然后启动容器需要指定启动命令
docker run --name=producter-one -net=mynetwork -e NACOS_CONFIG_DATAID1=producter-one.yaml -d producter-one java -jar producter-one.jar