RUN apt-get update
RUN apt-get install -y maven
WORKDIR /code//这里就是我们运行spark给本机配置的一个程序
Prepare by downloading dependencies
ADD pom.xml /code/pom.xml//添加当前目录的pom.xml到docker中的/code文件夹下,名字一样
RUN [“mvn”, “dependency:resolve”]//运行命令,就类似于在终端上运行命令“,”表示终端中的空格
RUN [“mvn”, “verify”]
Adding source, compile and package into a fat jar
ADD src /code/src//添加一个文件夹
RUN [“mvn”, “package”]
EXPOSE 4567//打开端口
CMD [“/usr/lib/jvm/java-8-openjdk-amd64/bin/java”, “-jar”, “target/sparkexample-jar-with-dependencies.jar”]//配置这条命令是每次打开容器,启动容器的时候都会运行这条命令,而上面的run就只会在创建的时候运行一次而已
当你用docker build -t xzj/spark:01 . (参照docker中保存镜像的格式,注意还有一个点)的时候,你就会发现,在 为容器下载maven的时候,运行好久都没过,很纠结。这时,是你被墙,不是你的代码又问题。
我的由于我已经清楚了Dockerfile的应用,
所以我直接用docker命令下载已经配置后的官网的镜像
命令:docker pull giantswarm/sparkexample
下载了官网上的镜像,接下来我要做的就是在容器里配置mysql以及ssh,方便登陆接口进入容器中直接配置。
接下来我的Dockerfile为
FROM giantswarm/sparkexample 从官网上容器里面继承
WORKDIR /code
WORKDIR /code
Prepare by downloading dependencies
ADD pom.xml /code/pom.xml
RUN [“mvn”, “dependency:resolve”]
RUN [“mvn”, “verify”]
Adding source, compile and package into a fat jar
ADD src /code/src
RUN [“mvn”, “package”]
注意这里要更改系统的时区设置,因为在 web 应用中经常会用到时区这个系统变量,默认的 ubuntu 会让你的应用程序发生不可思议的效果哦
ENV DEBIAN_FRONTEND noninteractive
清空ubuntu更新包
RUN sudo rm -rf /var/lib/apt/lists/*
一次性安装vim,wget,curl,ssh server等必备软件
RUN echo “deb http://archive.ubuntu.com/ubuntu precise main universe”> /etc/apt/sources.list
RUN sudo apt-get update
RUN sudo apt-get install -y vim wget curl openssh-server sudo
RUN sudo mkdir -p /var/run/sshd
将sshd的UsePAM参数设置成no
RUN sed -i ‘s/UsePAM yes/UsePAM no/g’ /etc/ssh/sshd_config
添加测试用户admin,密码admin,并且将此用户添加到sudoers里
RUN useradd admin
RUN echo “admin:admin” | chpasswd
RUN echo “admin ALL=(ALL) ALL” >> /etc/sudoers
#为admin用户赋予sudo权限
把admin用户的shell改成bash,否则SSH登录Ubuntu服务器,命令行不显示用户名和目录
RUN usermod -s /bin/bash admin
安装supervisor工具
RUN sudo apt-get install -y supervisor
RUN sudo mkdir -p /var/log/supervisor
添加 supervisord 的配置文件,并复制配置文件到对应目录下面。(supervisord.conf文件和Dockerfile文件在同一路径)
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
容器需要开放SSH 22端口
EXPOSE 22
容器需要开放SSH 4567端口
EXPOSE 4567
执行supervisord来同时执行多个命令,使用 supervisord 的可执行路径启动服务。
CMD [“/usr/bin/supervisord”]