Docker部署ngnix静态网站10bet

来源:http://www.chinese-glasses.com 作者:Web前端 人气:91 发布时间:2020-04-15
摘要:时间: 2019-10-02阅读: 190标签: DockerHello World 两天前小希和大家分享了《用容器定义 Java虚拟化部署》,估计有些小伙伴早已按耐不住着急的心情了吧。今天希云就和大家分享在容器里部署

时间: 2019-10-02阅读: 190标签: DockerHello World

两天前小希和大家分享了《用容器定义 Java 虚拟化部署》,估计有些小伙伴早已按耐不住着急的心情了吧。今天希云就和大家分享在容器里部署 Java 应用的实战案例。

首先获取ngnix镜像(默认的是最新版)

Dockerfiles

docker pull nginx

Dockerfile 包含了一系列指令,告诉容器如何去构建一个镜像,它指定了镜像的基点,以及配置镜像的每个细节。以下是一个 Dockerfile 示例,是 CentOS 镜像的 Dockerfile 。

先来编写一个最简单的Dockerfile,一个Dockerfile修改该Nginx镜像的首页

代码清单 1. CentOS Dockerfile

Dockerfile是一个文本文件,其中包含了若干条指令,指令描述了构建镜像的细节。

sh FROM scratch

1、新建文件夹/ngnix,在该目录下新建一个名为Dockerfile的文件,在里面增加如下内容:

MAINTAINER The CentOS Project <cloud-ops@centos.org> - ami_creator

#从本地的镜像仓库里拉取ngxin的docker镜像 FROM nginx #修改ngxin的docker镜像的首页内容RUN echo ‘Hello World‘  /usr/share/nginx/html/index.html 

ADD centos-7-20150616_1752-docker.tar.xz /

2、在Dockerfile所在路径执行以下命令构建我们自己的ngxin镜像,构建完可用docker images命令查看

Volumes for systemd

docker build -t nginx:rogn.

VOLUME ["/run", "/tmp"]

其中,-t指定镜像名字,命令最后的点(.)表示Dockerfile文件所在路径

Environment for systemd

3、执行以下命令,即可使用该镜像启动一个 Docker容器

ENV container=docker

docker run -d -p 92:80 nginx:rogn

For systemd usage this changes to /usr/sbin/init

4、访问localhost:92就能看到"Hello World"

Keeping it as /bin/bash for compatibility with previous

一个网页

CMD ["/bin/bash"]

首先,获取源码:地址

大部分内容是注释,主要有四句命令:

在前面的基础上,修改Dockerfile,源码的文件结构如下,

``

将文件逐一COPY到/usr/share/nginx/html 文件夹下。

FROM scratch:所有 Dockerfile 都要从一个基础镜像继承,在这个例子中,CentOS 镜像是继承于" scratch "镜像,这个镜像是所有镜像的根。这个配置是固定的,表明了这个是容器的根镜像之一。

#从本地的镜像仓库里拉取ngxin的docker镜像FROM nginx #修改ngxin的docker镜像的首页内容#RUN echo ‘This is Rogn Nginx!!!‘  /usr/share/nginx/html/index.html COPY index.html /usr/share/nginx/html/index.html COPY home.html /usr/share/nginx/html/home.html COPY navigation.html /usr/share/nginx/html/navigation.html COPY css /usr/share/nginx/html/cssCOPY font /usr/share/nginx/html/fontCOPY images /usr/share/nginx/html/imagesCOPY js /usr/share/nginx/html/js

MAINTAINER ...MAINTAINER指令指明了镜像的所有者,这个例子中所有者是 CentOS Project。

保存,重新构建镜像,启动容器(如果前面的未停止需先停止再启动)。

ADD centos...tar.xzADD指令告诉容器把指定文件上传到镜像中,如果文件是压缩过的,会把它解压到指定路径。这个例子中,容器会上传一个 CentOS 操作系统的 Gzip 包,并解压到系统的根目录。

CMD ["/bin/bash"]:最后,CMD指令告诉容器要执行什么命令,这个例子中,最后会进入 Bourne Again Shell (bash) 终端。

10bet 1

这个架构未必如你想象中那么简单,但我们接下来会慢慢学习它,其实它是非常有逻辑的。上边已经提过所有 Dockerfile 的根是 scratch,接下来指定的是 debian:jessie 镜像,这个官方镜像是基于标准镜像构建的,容器不需要重复发明轮子,每次都创建一个新镜像了,只要基于一个稳定的镜像来继续构建新镜像即可,在这个例子中, debian:jessie 是一个官方 Debian Linux 镜像,就像上边的 CentOS 一样,它只有三行指令。

代码清单 2. debian:jessie Dockerfile

sh FROM scratch

ADD rootfs.tar.xz /

CMD ["/bin/bash"]

在上图中我们还见到有安装两个额外的镜像,CURL 和 Source Code Management,镜像buildpack-deps:jessie-curl的Dockerfile 如清单 3 所示。

代码清单 3. buildpack-deps:jessie-curl Dockerfile

sh FROM debian:jessie

RUN apt-get update && apt-get install -y --no-install-recommends

ca-certificates

curl

wget

&& rm -rf /var/lib/apt/lists/*

这个 Dockerfile 中使用 apt-get 去安装 curlwget,使这个镜像能从其他服务器下载软件。RUN 指令让Docker在运行的实例中执行具体的命令,这个例子中,它会更新所有库 (apt-get update),然后执行 apt-get install 去安装 curlwget

buildpack-deps:jessie-scp 的 Dockerfile 如清单 4 所示。

代码清单 4. buildpack-deps:jessie-scp Dockerfile

sh FROM buildpack-deps:jessie-curl

RUN apt-get update && apt-get install -y --no-install-recommends

bzr

git

mercurial

openssh-client

subversion

10bet,&& rm -rf /var/lib/apt/lists/*

这个Dockerfile会安装源码管理工具,例如 Git,Mercurial,和 Subversion。

Java 的Dockerfile会更加复杂些,如清单 5 所示。

代码清单 5. Java Dockerfile

sh FROM buildpack-deps:jessie-scm

A few problems with compiling Java from source:

  1. Oracle. Licensing prevents us from redistributing the official JDK.

  2. Compiling OpenJDK also requires the JDK to be installed, and it gets

really hairy.

RUN apt-get update && apt-get install -y unzip && rm -rf /var/lib/apt/lists/*

RUN echo 'deb http://httpredir.debian.org/debian jessie-backports main' > /etc/apt/sources.list.d/jessie-backports.list

Default to UTF-8 file.encoding

ENV LANG C.UTF-8

ENV JAVA_VERSION 8u66

ENV JAVA_DEBIAN_VERSION 8u66-b01-1~bpo8+1

see https://bugs.debian.org/775775

and https://github.com/docker-libr ... 46872

ENV CA_CERTIFICATES_JAVA_VERSION 20140324

RUN set -x

&& apt-get update

&& apt-get install -y

openjdk-8-jdk="$JAVA_DEBIAN_VERSION"

ca-certificates-java="$CA_CERTIFICATES_JAVA_VERSION"

&& rm -rf /var/lib/apt/lists/*

see CA_CERTIFICATES_JAVA_VERSION notes above

RUN /var/lib/dpkg/info/ca-certificates-java.postinst configure

If you're reading this and have any feedback on how this image could be

improved, please open an issue or a pull request so we can discuss it!

简单来说,这个 Dockerfile 使用了安全参数去执行 apt-get install -y openjdk-8-jdk 去下载安装 Java,而 ENV 指令配置系统的环境变量。

最后,清单 6 是 Tomcat 的Dockerfile

代码清单 6. Tomcat Dockerfile

sh FROM java:7-jre

ENV CATALINA_HOME /usr/local/tomcat

ENV PATH $CATALINA_HOME/bin:$PATH

RUN mkdir -p "$CATALINA_HOME"

WORKDIR $CATALINA_HOME

see https://www.apache.org/dist/tomcat/tomcat-8/KEYS

RUN gpg --keyserver pool.sks-keyservers.net --recv-keys

05AB33110949707C93A279E3D3EFE6B686867BA6

07E48665A34DCAFAE522E5E6266191C37C037D42

47309207D818FFD8DCD3F83F1931D684307A10A5

541FBE7D8F78B25E055DDEE13C370389288584E7

61B832AC2F1C5A90F0F9B00A1C506407564C17A3

79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED

9BA44C2621385CB966EBA586F72C284D731FABEE

A27677289986DB50844682F8ACB77FC2E86E29AC

A9C5DF4D22E99998D9875A5110C01C5A2F6059E7

DCFD35E0BF8CA7344752DE8B6FB21E8933C60243

F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE

F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23

ENV TOMCAT_MAJOR 8

ENV TOMCAT_VERSION 8.0.26

ENV TOMCAT_TGZ_URL https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz

RUN set -x

&& curl -fSL "$TOMCAT_TGZ_URL" -o tomcat.tar.gz

&& curl -fSL "$TOMCAT_TGZ_URL.asc" -o tomcat.tar.gz.asc

&& gpg --verify tomcat.tar.gz.asc

&& tar -xvf tomcat.tar.gz --strip-components=1

&& rm bin/*.bat

&& rm tomcat.tar.gz*

EXPOSE 8080

CMD ["catalina.sh", "run"]

严格来说,Tomcat使用了Java 7的父级Dockerfile(默认的最新Java版本是8)。这个Dockerfile设置了CATALINA_HOMEPATH环境变量,然后用mkdir命令新建了CATALINA_HOME目录,WORKDIR指令把当前工作路径更改为CATALINA_HOME,然后RUN指令执行了同一行中一系列的命令:

下载Tomcat压缩包。

下载文件校验码。

验证下载的文件正确。

解压Tomcat压缩包。

删除所有批处理文件(我们是在Linux上运行)。

删除压缩包文件。

把这些命令写在同一行,对应容器来说就是一条命令,最后容器会把执行的结果缓存起来,容器有个策略是检测镜像何时需要重建,以及验证构建过程中的指令是否正确。当一条指令会使镜像更改,容器会把每个步的结果缓存起来,容器能把最上一个正确指令产生的镜像启动起来。

EXPOSE 指令会让容器启动一个容器时暴露指定的端口,正如之前我们启动时那样,我们需要告诉容器哪个物理端口会被映射到容器上(-p 参数),EXPOSE 的作用就是这个定义容器端口。最后 Dockerfile 使用 catalina.sh 脚本启动 Tomcat。

简单回顾

用 Dockerfile 从头开始构建 Tomcat 是一个漫长的过程,我们总结一下目前为止的步骤:

安装 Debian Linux。

安装 curl 和 wget。

安装源码管理工具。

下载并安装 Java。

下载并安装Tomcat。

暴露容器实例的 8080 端口。

用 catalina.sh 启动 Tomcat。

本文由10bet发布于Web前端,转载请注明出处:Docker部署ngnix静态网站10bet

关键词:

上一篇:HTML5 History 模式

下一篇:没有了

频道精选

最火资讯