博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
05_Dockerfile实战(上)
阅读量:5250 次
发布时间:2019-06-14

本文共 4401 字,大约阅读时间需要 14 分钟。

在上一章我们介绍了docker镜像的概念,并且介绍了构建镜像的两种方式

  1. 使用docker commit命令提交创建的容器。
  2. 使用Dockerfile文件和docker build命令,这种更为推荐和常见的方式构建docker镜像。

Dockerfile

  • 官方仓库虽然有数十万的镜像资源,但在绝大多数情况下都不符合我们的需求,通常我们都会自己构建镜像。Dockfile 是一种被 Docker 程序解释的脚本, Dockerfile 由一条一条的指令组成,每条指令对应 Linux 下面的一条命令。Docker 程序将这些 Dockerfile 指令翻译真正的Linux命令。Docker 程序将读取 Dockerfile,根据指令生成定制的 image。
  • 每一条指令就相当于给镜像加了一层,一共127层,务必惜字如金。
  • 常用命令如下:
options describe
FROM 基于哪个镜像构建新镜像
LABEL maintainer 镜像维护者信息
RUN 构建镜像时运行的Shell命令
COPY 拷贝文件或目录到镜像中
CMD 运行容器时执行,如果有多个CMD指令,最后一个生效
ENTRYPOINT 运行容器时执行,如果有多个CMD指令,最后一个生效。可单独使用,也可与CMD配合使用
USER 为RUN、CMD、ENTRYPOINT执行指令指定运行用户
EXPOSE 声明容器运行的服务端口
WORKDIR 为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录
VOLUME 指定挂载点,使容器中的一个目录具有持久化存储数据的功能
ENV 设置环境变量

注意的是:

  1. 一次 RUN 指令形成新的一层,进程让shell命令都写在一行,减少镜像层,一个镜像是不能超过 127 层的,在使用 RUN 指令时,可以在每条 shell 命令的结尾用转义换行 ""。
  2. 一次 RUN 形成新的一层,如果没有在同一层删除,无论文件是否最后删除,都会带到下一层,所以要在每一层清理对应的残留数据,减少镜像大小。比如 yum 之后,清一下缓存。

一、构建部署Nginx

$ tree web/web/├── base│?? └── Dockerfile_nginx└── project    ├── Dockerfile_nginx    └── nginx.conf
  • base文件夹下的Dockerfile_nginx如下:(构建通用的nginx镜像)
FROM centos:latestLABEL maintainer="jhzhang 
"RUN yum install -y gcc gcc-c++ make \ openssl-devel pcre-devel gd-devel libxslt-devel \ iproute net-tools telnet wget curl && \ yum clean all && \ rm -rf /var/cache/yum/* RUN wget http://nginx.org/download/nginx-1.14.0.tar.gz && \ tar -zxf nginx-1.14.0.tar.gz && \ cd nginx-1.14.0 && \ ./configure --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_image_filter_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_secure_link_module \ --with-http_stub_status_module \ --with-stream \ --with-stream_ssl_module && \ make -j $(grep processor /proc/cpuinfo | wc -l) && make install && \ cd / && rm -rf nginx-1.14.0* ENV PATH $PATH:/usr/local/nginx/sbinWORKDIR /usr/local/nginxEXPOSE 80CMD ["nginx", "-g", "daemon off;"]
  • 构建镜像
docker build -t nginx1.14 -f Dockerfile_nginx ./
  • 进入项目project文件夹
    project文件夹下的nginx.conf如下:(构建通用的nginx镜像)
user  nobody;worker_processes  1;error_log  logs/error.log  info;events {    worker_connections  4096;}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"';    sendfile        on;    keepalive_timeout  65;    server {        listen       80;        server_name  localhost;        charset utf-8;        access_log  logs/host.access.log  main;        location / {            root   html;            index  index.html index.htm;        }     }}

project文件夹下的Dockerfile_nginx如下:(构建通用的nginx镜像)

FROM nginx1.14COPY nginx.conf /usr/local/nginx/conf/
  • 构建项目镜像
    docker build -t nginx:v1 -f Dockerfile_nginx ./
  • 启动容器
docker network create webdocker volume create wwwrootdocker container run -d --name web_nginx -p 88:80 --network lnmp -v wwwroot:/usr/local/nginx/html nginx:v1
  • 浏览器访问127.0.0.1:80

二、构建部署Tomcat

  • Java 程序依赖于 JDK 环境,我们可以把 JDK 放在宿主机上,容器以挂载形式使用,减少镜像大小及提高性能。
tar -zxf jdk-8u91-linux-x64.tar.gzsudo mv jdk1.8.0_91/ /usr/local/jdk1.8
  • 文件结构
tree java/java/├── apache-tomcat-8.5.16.tar.gz└── Dockerfile0 directories, 2 files
  • java文件夹下的Dockerfile内容
FROM centos:latestLABEL maintainer="jhzhang 
" ENV VERSION=8.5.35ENV JAVA_HOME=/usr/local/jdk RUN yum install wget curl unzip iproute net-tools glibc.i686 -y && \ yum clean all && \ rm -rf /var/cache/yum/* COPY . / RUN tar zxf apache-tomcat-${VERSION}.tar.gz && \ mv apache-tomcat-${VERSION} /usr/local/tomcat && \ rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \ mkdir /usr/local/tomcat/webapps/ROOT && \ echo '

Hello,Tomcat!

' > /usr/local/tomcat/webapps/ROOT/status.html && \ sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/tomcat/bin/catalina.sh && \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ENV PATH $PATH:/usr/local/tomcat/binENV PATH $PATH:/usr/local/jdk/binWORKDIR /usr/local/tomcatEXPOSE 8080CMD ["catalina.sh", "run"]
  • 构建镜像
    $ docker build -t tomcat8:latest ./
  • 启动容器
    docker container run -d --name tomcat_srv -p 89:8080 -v /usr/local/jdk1.8/:/usr/local/jdk tomcat8:latest
  • 浏览器打开127.0.0.1:89/status.html

参考

转载于:https://www.cnblogs.com/jarl/p/10105836.html

你可能感兴趣的文章
JAVA跨域CORS
查看>>
正确的在循环list的时候删除list里面的元素
查看>>
ERP渠道文档详细和修改(二十五)
查看>>
C#正则Groups高级使用方法
查看>>
ecshop安装常见问题及解决办法
查看>>
解决windows系统的oracle数据库不能启动ora-00119和ora-00130的问题
查看>>
ip相关问题解答
查看>>
第九周作业
查看>>
Postman—添加断言和检查点
查看>>
网络文件下载
查看>>
Mixing Milk
查看>>
iOS下移除按钮原生样式
查看>>
如何保存图片
查看>>
js中严格模式
查看>>
win2003远程超出最大连接数解决办法
查看>>
内存堆和栈的区别
查看>>
MetaWeblog API Test
查看>>
数组方法
查看>>
ACM学习历程—HDU 5073 Galaxy(数学)
查看>>
反弹SHELL
查看>>