DockerFile基于debian容器,配置postgis

自定义容器背景

由于最近产品开发的需要,写了一个包含下载和上传的项目,可以支持.shp格式的文件。因为我们用的postgresql 数据库,需要编译postgis,这个过程是有些复杂的,需要配置编译一些其他的插件,如果需要用到一个新的服务器上,就需要重新配置一遍,费时费力。为了能够避免这一问题,就想到了用docker配置,即插即用,节省时间和精力。

为什么用debian配置容器

一般来说Debian作为适合于服务器的操作系统,它比Ubuntu要稳定得多。可以说稳定得无与伦比了。debian整个系统,只要应用层面不出现逻辑缺陷,基本上固若金汤,是个常年不需要重启的系统(当然,这是夸张了点,但并没有夸大其稳定性)。debian整个系统基础核心非常小,不仅稳定,而且占用硬盘空间小,占用内存小。相对debian来说,CentOS略显体积大一点。128M的VPS即可以流畅运行Debian,而CentOS则会略显吃力。所以我们选择了debian镜像来配置容器。

安装docker

docker安装的文档网上很多,这里就不在进行赘述了,可以看这个网站,个人觉得写的很详细。非常全,明了易懂,对新手也很友好。

docker–教程

获取镜像

docker 启动之后,就需要获取镜像了。

## 拉取debian镜像

docker pull debian:10

## 查看是否拉取debian镜像成功

docker images 或 docker image ls

配置DockerFile文件

在一个目录下,新建Dockerfile文件

$ mkdir dockerFolder

$ cd dockerFolder

$ touch Dockerfile

$ vim Dockerfile

编辑Dockerfile,把下面代码放进Dockerfile中

FROM debian

RUN set -x; buildDeps='gcc libc6-dev make wget' \

  && apt-get update \

  && apt-get install -y $buildDeps \

  && apt-get install -y xz-utils \

  && cd /usr/local \

  && wget https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.xz \

  && tar xf node-v14.16.0-linux-x64.tar.xz \

  && ln -sf /usr/local/node-v14.16.0-linux-x64/bin/npm  /usr/local/bin/npm \

  && ln -sf /usr/local/node-v14.16.0-linux-x64/bin/node  /usr/local/bin/node

COPY  gdal-2.3.1.tar.gz /usr/local/

COPY  geos-3.6.2.tar.bz2 /usr/local/

COPY  json-c-0.13.1.tar.gz /usr/local/

COPY  postgis-3.0.1.tar.gz /usr/local/

COPY  postgresql-12.0.tar.gz /usr/local/

COPY  proj-5.1.0.tar.gz /usr/local/

COPY  protobuf-c-1.3.3.tar.gz /usr/local/

COPY  protobuf-v3.5.0.tar.gz /usr/local/

RUN cd /usr/local \

    && tar -zxvf postgresql-12.0.tar.gz \

    && cd postgresql-12.0 \

    && apt-get install -y  libreadline-dev \  ## centos为:yum -y install readline-devel

    && apt-get install zlib1g.dev \

    && ./configure --prefix=/usr/local/pgsql \ 

    && make \

    && make install \

RUN cd /usr/local \

    && apt-get install -y bzip2 \

    && apt-get install g++

    && tar -jxvf geos-3.6.2.tar.bz2  \

    && cd geos-3.6.2 \

    && ./configure --prefix=/usr/local/geos \ 

    && make \

    && make install \

RUN cd /usr/local \

    && tar -zxvf proj-5.1.0.tar.gz  \

    && cd proj-5.1.0 \

    && ./configure --prefix=/usr/local/proj \ 

    && make \

    && make install \

RUN cd /usr/local \

    && tar -zxvf json-c-0.13.1.tar.gz  \

    && cd json-c-0.13.1 \

    && apt-get install -y autoconf automake libtool \

    && ./configure --prefix=/usr/local/json-c \ 

    && make \

    && make install \ 

RUN cd /usr/local \

    && tar -zxvf gdal-2.3.1.tar.gz  \

    && cd gdal-2.3.1 \

    && ./configure --prefix=/usr/local/gdal \ 

    && make \

    && make install \ 

RUN cd /usr/local \

    && tar -zxvf protobuf-v3.5.0.tar.gz  \

    && cd protobuf-3.5.0 \

    && apt-get install -y autoconf automake libtool \

    && apt-get install -y curl \

    && apt-get install -y unzip \

    && sh ./autogen.sh \

    && ./configure --prefix=/usr/local/protobuf \ 

    && make \

    && make install \ 

RUN cd /usr/local \

    && tar -zxvf protobuf-c-1.3.3.tar.gz  \

    && cd protobuf-c-1.3.3 \

    && apt-get install -y  pkg-config \

    && export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig \

    && ./configure --prefix=/usr/local/protobuf-c \

    && make \

    && make install \


RUN cd /usr/local \

    && tar -zxvf postgis-3.0.1.tar.gz  \

    && cd postgis-3.0.1 \

    && apt-get install -y libxml2-dev \

    && ./configure --with-pgconfig=/usr/local/pgsql/bin/pg_config --with-geosconfig=/usr/local/geos/bin/geos-config --with-projdir=/usr/local/proj --with-gdalconfig=/usr/local/gdal/bin/gdal-config --with-protobufdir=/usr/local/protobuf-c --with-jsondir=/usr/local/json-c \

    && make \

    && make install \

    /usr/local/pgsql/bin

RUN ln -sf /usr/local/pgsql/bin/initdb /usr/bin/initdb \

    && ln -sf /usr/local/geos/lib/libgeos_c.so.1 /usr/local/pgsql/lib/ \

    && adduser postgres \

    && mkdir /usr/local/pgsql/data \

    && chown postgres /usr/local/pgsql/data


1:我们的项目是用的egg.js框架,所以第一部分配置了node,其他语言请自行配置。

2:第二部分我用了COPY指令把压缩包放到容器中,也可以直接用RUN 指令用wget的方法直接下载,但是这个下载的过程有点慢,而且报错得话,再次运行Dockerfile,还是会重复下载,很费时间,建议现在服务器上准备好需要的安装包,用COPY指令复制进容器。*

3:由于Dockerfile内容较长,建议新手一段内容一段内容进行配置,可以避免不必要的坑。

运行DockerFile文件

在Dockerfile文件所在目录,执行文件

$ docker build -t debian .

最后一行出现 一下代码,表示配置成功

Successfully built <44aa4490ce2c>

进入debian容器

$ docker run -it  debian /bin/bash

$ su postgres

可以进入postgres用户就表示配置成功了。

打包debian容器

docker save -o debian.tar debian

生成一个tar包,就可以拿到任何环境下使用

在新的环境载入镜像

docker load -i debian.tar

载入成功之后,就可以使用镜像了。

推荐一个非常好用的坐标系转换的函数, 基于PG+PostGIS转换坐标系函数。支持各种坐标系,点线面各类型转换

坐标系转换函数

你可能感兴趣的:(DockerFile基于debian容器,配置postgis)