自定義容器背景
由于最近產(chǎn)品開發(fā)的需要,寫了一個包含下載和上傳的項目淳梦,可以支持.shp格式的文件析砸。因為我們用的postgresql 數(shù)據(jù)庫,需要編譯postgis爆袍,這個過程是有些復(fù)雜的首繁,需要配置編譯一些其他的插件,如果需要用到一個新的服務(wù)器上陨囊,就需要重新配置一遍弦疮,費時費力。為了能夠避免這一問題蜘醋,就想到了用docker配置胁塞,即插即用,節(jié)省時間和精力。
一般來說Debian作為適合于服務(wù)器的操作系統(tǒng)闲先,它比Ubuntu要穩(wěn)定得多状土。可以說穩(wěn)定得無與倫比了伺糠。debian整個系統(tǒng)蒙谓,只要應(yīng)用層面不出現(xiàn)邏輯缺陷,基本上固若金湯训桶,是個常年不需要重啟的系統(tǒng)(當(dāng)然累驮,這是夸張了點,但并沒有夸大其穩(wěn)定性)舵揭。debian整個系統(tǒng)基礎(chǔ)核心非常小谤专,不僅穩(wěn)定,而且占用硬盤空間小午绳,占用內(nèi)存小置侍。相對debian來說,CentOS略顯體積大一點拦焚。128M的VPS即可以流暢運行Debian蜡坊,而CentOS則會略顯吃力。所以我們選擇了debian鏡像來配置容器赎败。
docker安裝的文檔網(wǎng)上很多秕衙,這里就不在進行贅述了,可以看這個網(wǎng)站僵刮,個人覺得寫的很詳細据忘。非常全,明了易懂搞糕,對新手也很友好勇吊。
docker 啟動之后,就需要獲取鏡像了寞宫。
## 拉取debian鏡像
docker pull debian:10
## 查看是否拉取debian鏡像成功
docker images 或 docker image ls
在一個目錄下萧福,新建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射亏,還是會重復(fù)下載,很費時間,建議現(xiàn)在服務(wù)器上準備好需要的安裝包智润,用COPY指令復(fù)制進容器及舍。*
3:由于Dockerfile內(nèi)容較長,建議新手一段內(nèi)容一段內(nèi)容進行配置窟绷,可以避免不必要的坑锯玛。
在Dockerfile文件所在目錄,執(zhí)行文件
$ docker build -t debian .
最后一行出現(xiàn) 一下代碼兼蜈,表示配置成功
Successfully built <44aa4490ce2c>
$ docker run -it? debian /bin/bash
$ su postgres
可以進入postgres用戶就表示配置成功了攘残。
docker save -o debian.tar debian
生成一個tar包,就可以拿到任何環(huán)境下使用
docker load -i debian.tar
載入成功之后为狸,就可以使用鏡像了歼郭。
推薦一個非常好用的坐標系轉(zhuǎn)換的函數(shù), 基于PG+PostGIS轉(zhuǎn)換坐標系函數(shù)辐棒。支持各種坐標系病曾,點線面各類型轉(zhuǎn)換