赞
踩
通过用dockerfile来制作一个自定义的镜像,基础镜像是centos7,然后里面安装jdk8,安装nginx,启动的后端jar包,以及前端打包的静态文件,将这些放到一个docker容器里面,然后启动容器访问项目。
这里我将测试需要的文件都放在了/opt/wrapper/test目录下面。
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name 192.168.5.43;#填写你的宿主机ip #charset koi8-r; #access_log logs/host.access.log main; location / { root /usr/local/project/5gsignplay-web; index index.html; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } }
FROM centos:7 # 描述作者和邮箱,可只写其中一个,也可二个都写 MAINTAINER test test@163.com # 时区与字符设置UTF-8并配置环境 ENV TZ=Asia/Shanghai ENV LANG=C.UTF-8 # 在容器里面创建一个java目录,用来放拷贝过来的文件,RUN用来执行linux命令 RUN mkdir /usr/local/java # 在容器内创建一个project目录和子目录5gsignplay-web,用来存放后端jar包和前端打包好的静态页面 RUN mkdir -p /usr/local/project/5gsignplay-web # 把jdk-8u172-linux-x64.tar.gz添加到容器中,文件必须要和你的Dockerfile在同一级目录里面,ADD命令会自动将.gz文件拷贝到容器里面并自动解压 ADD jdk-8u172-linux-x64.tar.gz /usr/local/java/ # 配置java环境变量 ENV JAVA_HOME /usr/local/java/jdk1.8.0_172 ENV JRE_HOME $JAVA_HOME/jre ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH ENV PATH $JAVA_HOME/bin:$PATH #将后端jar包复制到容器里面的project COPY 5gsignplay-consumer-0.0.1.jar /usr/local/project #将前端打包好的静态文件复制到容器里面的5gsignplay-web目录下面,COPY复制不了文件本身,只能复制文件里面的内容,所以要提前在容器里面创建一个前端目录 COPY 5gsignplay-web /usr/local/project/5gsignplay-web #配置nginx,将nginx搬到容器里面自动解压 ADD nginx-1.18.0.tar.gz /usr/local/java/ #进入/usr/local/java/nginx-1.18.0目录进行安装和编译 WORKDIR /usr/local/java/nginx-1.18.0 #安装nginx的四个依赖 RUN yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel #配置环境,考虑到后续安装ssl证书 添加两个模块 RUN ./configure --with-http_stub_status_module --with-http_ssl_module #make编译,make install安装,make && makeinstall的意思就是执行make如果没有发生错误就执行make install RUN make && make install #将nginx.conf拷贝到容器里面nginx安装后的目录,make install安装成功后,/usr/local下面会多出一个nginx目录,所以这里需要将nginx.conf拷贝到/usr/local/nginx文件目录里面 COPY nginx.conf /usr/local/nginx/conf/nginx.conf #将启动脚本拷贝到容器里面的/usr/local/project下面 COPY run.sh /usr/local/project #给run.sh可执行权限 RUN chmod 777 /usr/local/project/run.sh #对外暴露80,8880端口,暴不暴露端口没有什么影响,重要的是要在启动的时候使用-p映射宿主机端口:容器端口,暴露端口你也得使用-p映射端口 #EXPOSE 80 8880 #通过脚本同时启动后端jar包和nginx CMD ["sh","/usr/local/project/run.sh"]
#!/bin/bash
# 启动nginx服务
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#启动后端jar包,日志打印不额外存储
nohup java -jar /usr/local/project/5gsignplay-consumer-0.0.1.jar >/dev/null 2>& 1 &
#使这个脚本一直处于运行状态,如果不这样,当这个脚本命令执行结束后,docker容器会立即停止运行,所以这里需要让这个脚本一直运行,使docker容器一直处于运行状态
while [[ true ]];do
sleep 1
done
然后docker build -t 5gsignplay . 开始制作镜像,这里的.表示dockerfile文件的当前位置,
-t 是给自己制作的镜像取名。
然后用docker images查看自己的镜像文件
使用docker run -d -p 80:80 -p 8880:8880 --name 5gsignplay 5gsignplay启动镜像,
-d表示后台启动,-p是映射宿主机端口:容器端口,–name 第一个5gsinplay是给容器起名叫5gsignplay,第二个5gsignplay是镜像名称。
然后通过docker ps查看正在运行的docker容器,发现容器在正常运行。
docker ps -a可用来查看历史运行过的容器。
如果你想进入运行中的容器,可以使用docker exec -it 6652c30befd3 /bin/bash就能进入5gsignplay容器里面:
查看容器里面的nginx和jar包是否启动:
发现都是正常启动
退出容器输入exit即可退出容器。
因为你的容器里面的nginx监听端口是80,然后这里又将容器的80端口映射给了宿主机的端口,所以本地浏览器访问前端页面地址就是访问你宿主机的ip即可。
如:http://192.168.5.43/即可访问到页面
好了我的docker学习自定义镜像打包先记录到这里。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。