centos7上docker 打包 部署的方法

    xiaoxiao2025-10-24  3

    centos7上docker 打包 部署的方法 前提条件: (1)已生成jar或war包文件。(通过 maven 自动化构建的 java demo 打包了,就是说生成了以 jar 或者 war 结尾的包文件了) (2)已经成功安装 docker 。

    目录准备:/usr/cwgis/docker/sprintbootdemo中有两个文件(Dockerfile和sprintbootdemo.jar)

    /usr/cwgis/docker/sprintbootdemo

    dockerfile sprintbootdemo.jar

    进入打包目录

    cd /usr/cwgis/docker/sprintbootdemo

    编辑Dockerfile文件内容如下:

    FROM azul/zulu-openjdk:8 VOLUME /usr/cwgis/docker/sprintbootdemo ADD sprintbootdemo.jar app.jar RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

    另一个dockerfile文件内容例子

    FROM centos:latest ADD jdk1.8.0_171.tar.gz /usr/local/java ENV JAVA_HOME /usr/local/java/jdk1.8.0.171 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH $PATH:$JAVA_HOME/bin

    只打包war镜像的方法 dockerfile文件内容: 把所有需要的文件放到docker文件夹下,所需文件如下(apache和jdk已经解压好了)

    [root@localhost docker]# ls apache-tomcat-7.0.90 Dockerfile jdk1.8.0_181 sample.war FROM centos:7.2.1511 MAINTAINER Quincy COPY jdk1.8.0_181 jdk //拷贝后会重命名为jdk 和tomcat COPY apache-tomcat-7.0.90 tomcat COPY sample.war /tomcat/webapps/ ENV JAVA_HOME=/jdk ENV PATH=$JAVA_HOME/bin:$PATH CMD ["/tomcat/bin/catalina.sh", "run"] EXPOSE 8080

    打包命令

    docker build -t springbootdemo . //注意:命令后面的 . 要带上 。 springbootdemo为build的docker镜像的名字

    查看刚才打包的镜像

    docker images //可以看到springbootdemo就是刚才创建的镜像

    启动docker springbootdemo镜像

    docker run -d -p 8080:8080 springbootdemo //验证地址:http://192.168.10.200:8080 docker save -o springbootdemo.tar springbootdemo:latest //把打包的springbootdemo镜像存储为本地目录中springbootdemo.tar文件,发布到网上供客户安装使用

    加载docker镜像文件的方法

    docker load -i springbootdemo.tar docker load -i nginx.tar

    只打包jdk的docker镜像方法

    docker pull centos

    dockerfile文件内容:

    FROM centos:latest COPY jdk jdk ENV JAVA_HOME=/jdk ENV CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH=$PATH:$JAVA_HOME/bin

    打包build成镜像jdk1.8docker

    //打包build成镜像jdk1.8docker [root@testpc sprintbootdemo]# docker build -t jdk1.8docker . Sending build context to Docker daemon 989.2MB Step 1/5 : FROM centos:latest ---> 9f38484d220f Step 2/5 : COPY jdk jdk ---> Using cache ---> 3ca107e3587f Step 3/5 : ENV JAVA_HOME=/jdk ---> Running in 64457a74567e Removing intermediate container 64457a74567e ---> 25a4c850fea9 Step 4/5 : ENV CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ---> Running in 40510ae3ccba Removing intermediate container 40510ae3ccba ---> 15bcda8837cb Step 5/5 : ENV PATH=$PATH:$JAVA_HOME/bin ---> Running in 3c20f727b723 Removing intermediate container 3c20f727b723 ---> c2999efa1bda Successfully built c2999efa1bda Successfully tagged jdk1.8docker:latest [root@testpc sprintbootdemo]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE jdk1.8docker latest c2999efa1bda 6 seconds ago 590MB <none> <none> 7061514a6281 8 minutes ago 590MB supermap/iserver latest bc0649fdae47 2 weeks ago 3.09GB busybox latest 64f5d945efcc 2 weeks ago 1.2MB nginx latest 53f3fd8007f7 2 weeks ago 109MB supermap/iportal latest 4c17715de1b6 2 months ago 1.8GB centos latest 9f38484d220f 2 months ago 202MB //运行jdk1.8docker镜像 [root@testpc sprintbootdemo]# docker run -d -it jdk1.8docker /bin/bash bface3aa5b82ba80f216bb32b303725644a886059c19972000ed287f1545bb95 [root@testpc sprintbootdemo]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bface3aa5b82 jdk1.8docker "/bin/bash" 17 seconds ago Up 16 seconds cranky_poitras //进入jdk1.8docker镜像容器中命令行方式 [root@testpc sprintbootdemo]# docker exec -it bf /bin/bash //测试java版本可用 [root@bface3aa5b82 /]# java -version bash: /jdk/bin/java: Permission denied [root@bface3aa5b82 /]# chmod 777 /jdk/bin/java [root@bface3aa5b82 /]# java -version java version "1.8.0_172" Java(TM) SE Runtime Environment (build 1.8.0_172-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode) [root@bface3aa5b82 /]#

    关于Dockerfile的介绍,可以查看: https://www.dwhd.org/20151202_113538.html?lan=cn&lan=cn

    Docker之Dockerfile编写详解 制作docker image 的方式有两种:一是使用 Docker container,直接进入 container 內部,使用命令来增刪改,再导出成 image;二是使用 Dockerfile,将增刪改的动作文本化(譬如所需要的环境、依赖、变量等),再build成 image。Dockerfile 的方式容易调整与管理,也是首选推荐的方式。 在 Dockerfile 中用到的命令有 FROM FROM指定一个基础镜像, 一般情况下一个可用的 Dockerfile一定是 FROM 为第一个指令。至于image则可以是任何合理存在的image镜像。 FROM 一定是首个非注释指令 Dockerfile. FROM 可以在一个 Dockerfile 中出现多次,以便于创建混合的images。 如果没有指定 tag ,latest 将会被指定为要使用的基础镜像版本。 MAINTAINER 这里是用于指定镜像制作者的信息 RUN RUN命令将在当前image中执行任意合法命令并提交执行结果。命令执行提交后,就会自动执行Dockerfile中的下一个指令。 层级 RUN 指令和生成提交是符合Docker核心理念的做法。它允许像版本控制那样,在任意一个点,对image 镜像进行定制化构建。 RUN 指令缓存不会在下个命令执行时自动失效。比如 RUN apt-get dist-upgrade -y 的缓存就可能被用于下一个指令. --no-cache 标志可以被用于强制取消缓存使用。 ENV ENV指令可以用于为docker容器设置环境变量 ENV设置的环境变量,可以使用 docker inspect命令来查看。同时还可以使用docker run --env =来修改环境变量。 USER USER 用来切换运行属主身份的。Docker 默认是使用 root,但若不需要,建议切换使用者身分,毕竟 root 权限太大了,使用上有安全的风险。 WORKDIR WORKDIR 用来切换工作目录的。Docker 默认的工作目录是/,只有 RUN 能执行 cd 命令切换目录,而且还只作用在当下下的 RUN,也就是说每一个 RUN 都是独立进行的。如果想让其他指令在指定的目录下执行,就得靠 WORKDIR。WORKDIR 动作的目录改变是持久的,不用每个指令前都使用一次 WORKDIR。 COPY COPY 将文件从路径 复制添加到容器内部路径 。 必须是想对于源文件夹的一个文件或目录,也可以是一个远程的url, 是目标容器中的绝对路径。 所有的新文件和文件夹都会创建UID 和 GID 。事实上如果 是一个远程文件URL,那么目标文件的权限将会是600。 ADD ADD 将文件从路径 复制添加到容器内部路径 。 必须是想对于源文件夹的一个文件或目录,也可以是一个远程的url。 是目标容器中的绝对路径。 所有的新文件和文件夹都会创建UID 和 GID。事实上如果 是一个远程文件URL,那么目标文件的权限将会是600。 VOLUME 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。 EXPOSE EXPOSE 指令指定在docker允许时指定的端口进行转发。 CMD Dockerfile.中只能有一个CMD指令。 如果你指定了多个,那么最后个CMD指令是生效的。 CMD指令的主要作用是提供默认的执行容器。这些默认值可以包括可执行文件,也可以省略可执行文件。 当你使用shell或exec格式时, CMD 会自动执行这个命令。 ONBUILD ONBUILD 的作用就是让指令延迟執行,延迟到下一个使用 FROM 的 Dockerfile 在建立 image 时执行,只限延迟一次。 ONBUILD 的使用情景是在建立镜像时取得最新的源码 (搭配 RUN) 与限定系统框架。 ARG ARG是Docker1.9 版本才新加入的指令。 ARG 定义的变量只在建立 image 时有效,建立完成后变量就失效消失 LABEL 定义一个 image 标签 Owner,并赋值,其值为变量 Name 的值。(LABEL Owner=$Name ) ENTRYPOINT 是指定 Docker image 运行成 instance (也就是 Docker container) 时,要执行的命令或者文件。 但是一个Dockerfile中只能有一条ENTRYPOINT命令,如果多条,则只执行最后一条

    最新回复(0)