当前位置: 首页 > 工具软件 > jekyll-docker > 使用案例 >

使用docker构架服务 jekyll 和 java应用程序

伊铭
2023-12-01

使用Jeky11框架自定义网站,主要流程如下:
1 构建Jekyll Dockerfile和镜像
mkdir jekyll
cd jekyll
vi Dockerfile,内容如下:
FROM ubuntu:14.04
MAINTAINER mazhen "mz@example.com"
ENV REFRESHED_AT 2014-06-01
RUN apt-get -yqq update
RUN apt-get -yqq install ruby ruby-dev make nodejs
RUN gem install --no-rdoc --no-ri jeky11 -v 2.5.3
VOLUME /data
VOLUME /var/www/html
WORKDIR /data
ENTRYPOINT ["jeky11", "build", "--destination=/var/www/html"]
说明:
使用VOLUME指令创建了以下两个卷
/data/ 存放网站的源代码
/var/www/html/ 存放编译后的Jekyll网站码
然后将工作目录设置为/data
通过ENTRYPOINT命令将/data中所有的Jeky11网站代码构建到/var/www/html/目录中。

构建docker镜像
docker build -t mazhen/jekyll .

docker image inspect ubuntu:latest|grep -i version
遇到如下问题:
 => [3/5] RUN apt-get -yqq install ruby ruby-dev make nodejs                                                                         58.2s
 => ERROR [4/5] RUN gem install --no-rdoc --no-ri jeky11 -v 2.5.3                                                                    15.4s 
------                                                                                                                                     
 > [4/5] RUN gem install --no-rdoc --no-ri jeky11 -v 2.5.3:                                                                                
#7 7.735 ERROR:  Could not find a valid gem 'jeky11' (= 2.5.3) in any repository                                                           
#7 15.25 ERROR:  Possible alternatives: jekyll                                                                                             
------                                                                                                                                     
failed to solve with frontend dockerfile.v0: failed to build LLB: executor failed running [/bin/sh -c gem install --no-rdoc --no-ri jeky11 -v 2.5.3]: runc did not terminate sucessfully

即ruby版本不太对,修改ruby版本后继续执行,即修改为 
RUN apt-get -yqq install ruby -v 2.4.2
RUN gem install --no-rdoc --no-ri jekyll -v 2.5.3

又碰见 #9 0.281 /bin/sh: 1: gem: not found
最终也没解决上面问题。。。。

2 Apache的dockerfile和镜像
mkdir apache
cd apache
vi Dockerfile,内容如下
FROM ubuntu:14.04
MAINTAINER mazhen "mz@example.com"
ENV REFRESHED_AT 2014-06-02
RUN apt-get -yqq update
RUN apt-get -yqq install apache2
VOLUME ["/var/www/html"]
WORKDIR /var/www/html
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
RUN mkdir -p $APACHE_PID_FILE $APACHE_LOG_DIR $APACHE_RUN_DIR $APACHE_LOCK_DIR
EXPOSE 80
ENTRYPOINT ["/usr/sbin/apache2"]
CMD ["-D", "FOREGGROUP"]

构建镜像
docker build -t mazhen/apache2 .

启动Jekyll网站
cd /home/james
git clone https://github.com/jamtur01/james_blog.git

通过镜像启动容器
docker run -v /home/james/james_blog:/data/  --name james_blog mazhen/jekyll
启动james_blog的容器,把本地james_blog目录作为/data/卷挂载到容器中。容器拿到网站的源代码,并且将其构建到已编译的网站,存放到/var/www/html

如果新的容器需要使用上面卷中编译好的资源,可以创建一个连接直接使用
docker run -d -P --volume-from james_blog mazhen/apache
--volume-from:把指定让其里的所有卷都加入新建的容器中。

更新网站
通过编辑james_blog/_config.yml文件修改博客的名字
vi james_blog/_config.yml
更新网站,只需要再次使用docker start 命令启动docker容器
docker start james_blog
docker logs james_blog 可以看到对应的更新

卷备份
由于卷可以挂在到任一容器,通过将卷添加到新建的容器,即可备份。
docker run --rm --volumes-from james_blog -v /home/james:/backup ubuntu
tar cvf /backup/james_blog_backup.tar /var/www/html

docker构建Java应用服务
目标:获取tomcat服务器上的war文件,并运行一个java应用程序。
1)一个镜像从URL拉去指定的war文件并将其保存到卷里
2)一个含有tomcat服务器的镜像运行下载的war文件

1 构建获取war文件的镜像
mkdir fetcher
cd fetcher
vi Dockerfile 内容如下:
FROM ubuntu:14.04
MAINTAINER mazhen "mz@example.com"
ENV REFRESHED_AT 2014-06-02
RUN apt-get -yqq update
RUN apt-get -yqq install wget
VOLUME ["/var/lib/tomcat7/webapps"]
WORKDIR /var/lib/tomcat7/webapps
ENTRYPOINT ["wget"]
CMD ["-?"]
说明:使用wget从指定url获取文件并保存在/var/lib/tomcat7/webapps
CMD的内容会被run后面的内容覆盖,所以如果run后面带了url,实际执行内容为 wget url

构建镜像
docker build -t mazhen/fetcher .

2 获取war文件
docker run -t -i --name sample mazhen/fetcher https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/sample.war
说明:实际执行内容为wget https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/sample.war
wget是entrypoint指定的,url是run的内容替换了cmd内容的结果
此时,war文件会被保存到/var/lib/tomcat7/webapps目录下。

3 构建tomcat应用服务器
cd $HOME
mkdir tomcat7
cd tomcat7
vi Dockerfile,内容如下:
FROM ubuntu:14.04
MAINTAINER mazhen "mz@example.com"
ENV REFRESHED_AT 2014-06-02
RUN apt-get -yqq update
RUN apt-get -yqq install tomcat7 default-jdk
ENV CATALINA_HOME /usr/share/tomcat7
ENV CATALINA_BASE /var/lib/tomcat7
ENV CATALINA_PID /var/run/tomcat7.pid
ENV CATALINA_SH /usr/share/tomcat7/bin/catalina.sh
ENV CATALINA_TMPDIR /tmp/tomcat7-tomcat7-tmp
RUN mkdir -p $CATALINA_TMPDIR
VOLUME ["/var/lib/tomcat7/webapps"]
EXPOSE 8080
ENTRYPOINT ["/usr/share/tomcat7/bin/catalina.sh", "run"]

构建:
docker build -t mazhen/tomcat7 .

4 运行war文件
docker run --name sample-app --volumes-from sample -d -P mazhen/tomcat7

5 获取port并访问
docker port sample_app 8080
结果:8080/tcp -> 0.0.0.0:32775
说明容器的8080端口绑定到宿主机的32775端口上了,所以通过如下url访问:
http://localhost:32775/sample/

 类似资料: