centos7上docker 打包 部署的方法

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
                            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命令,如果多条,则只执行最后一条

你可能感兴趣的:(操作系统,Linux/Unix,docker)