镜像仓库
# 拉取镜像仓库
docker pull registry
# 启动镜像仓库
docker run -id --name=registry -p 5000:5000 registry
# 修改docker的配置文件
vim /etc/docker/daemon.json
# 添加以下内容
{
"registry-mirrors": ["https://1yub28r4.mirror.aliyuncs.com"],
"insecure-registries": ["10.112.229.252:5000"]
}
# 重启docker使配置文件生效
systemctl restart docker
# 前置条件:本地和服务器安装docker,并且已经修改daemon配置文件
# 镜像仓库常用命令(要上传镜像仓库需要修改tag名)
docker tag 镜像名:lastest 10.112.229.252:5000/镜像名:lastest
# 推送到远程仓库
docker push 10.112.229.252:5000/镜像名:lastest
# 服务器拉取镜像仓库
docker pull 10.112.229.252:5000/镜像名:lastest
# 修改服务器tag(这步可以不加,为了镜像名好看)
docker tag 10.112.229.252:5000/镜像名:lastest 镜像名:lastest
失败,docker hub里的不能用
FROM osgeo/gdal:ubuntu-small-3.4.0
ADD jdk-8u172-linux-x64.tar.gz /usr/local/
ENV JAVA_HOME /usr/local/jdk1.8.0_172
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
VOLUME /tmp
COPY target/sawc-calculate-biz-1.0-SNAPSHOT.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
# 容器中服务使用的端口号,和yml文件中server.port保持一致
EXPOSE 8016
去dockerHub找一个合适的linux镜像,本次选了centos7
# docker拉取镜像
docker pull centos:centos7
centos镜像仓库地址
创建dockerfile文件,用下的linux镜像作为基础为镜像安装java8
FROM centos:centos7
# 添加java8的jdk
ADD jdk-8u172-linux-x64.tar.gz /usr/local/
ENV JAVA_HOME /usr/local/jdk1.8.0_172
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
执行dockerfile文件
# 构建docker镜像centos-java:lastest
docker build -t centos-java:lastest .
首先创建容器并进入容器
gdal下载地址
proj下载地址
yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
# 安装 sqlite-devel
yum install sqlite-devel
# 将电脑中的proj拷贝到容器中/usr/local目录下(heuristic_elbakyan为容器名)
docker cp /Users/xxx/Downloads/proj-6.2.1.tar.gz makegdal:/usr/local
# 解压文件夹
tar -zxvf proj-6.2.1.tar.gz
# 进入文件夹编译
cd proj-6.2.1
./configure
make
make install
# 安装 swig
yum install -y swig
# 将电脑中的gdal拷贝到容器中/usr/local目录下(heuristic_elbakyan为容器名)
docker cp /Users/xxx/Downloads/gdal-3.0.4.tar.gz makegdal:/usr/local
tar -zxvf gdal-3.0.4.tar.gz
cd gdal-3.0.4
./configure --prefix="/usr/local"
make
make install
vi ~/.bashrc
export PATH=$PATH:/usr/local/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
gdalinfo --version
ant官网
# 将本地目录中的ant压缩包复制进容器
docker cp /Users/xxx/Downloads/apache-ant-1.10.12-bin.tar.gz 容器名:/usr/local
# 进入到容器目录解压
tar -zxvf apache-ant-1.10.12-bin.tar.gz
# 安装vim编辑器
yum -y install vim
# 打开配置文件
vim /etc/profile
# 在文件最后添加ant环境
export ANT_HOME=/usr/local/apache-ant-1.10.12
# 并把ant环境添加到path中
export PATH=$PATH:$JAVA_HOME/bin:${ANT_HOME}/bin
# 刷新配置文件
source /etc/profile
# 测试
[root@eureka src]# ant -version
Apache Ant(TM) version 1.10.12 compiled on April 12 2021 \
# 使用 gdal 进行 java 的转换需修改 swig 对应的文件
# 修改文件:gdal 根目录 /swig/java/java.opt,添加 JAVA_HOME 的值为 java 的根目录。
vim /usr/local/gdal-3.0.4/swig/java/java.opt
# 在文件的最后添加
JAVA_HOME=/usr/local/jdk1.8.0_172
# 在路径:gdal 根目录 /swig/java 中执行
# 安装3.4.0这步报错
make && make install
# 把 gdal 根目录 /swig/java 中生成的 gdal.jar 文件复制到 $JAVA_HOME/jre/lib/ext 下
cp gdal.jar /usr/local/jdk1.8.0_172/jre/lib/ext/
# 把.so、.lo、.o、.la、*.a复制到自己方便的文件夹下,一般是 $JAVA_HOME/jre/lib/amd64/server(*.a没有报错)
cp *.so *.lo *.o *.la /usr/local/jdk1.8.0_172/jre/lib/amd64/server
# vim /etc/profile 然后在/etc/profile中添加
export LD_LIBRARY_PATH=.:$JAVA_HOME/jre/lib/amd64/server
# 最后
source /etc/profile
d03d3eb38b50为容器id
# 在容器修改后不能保存到镜像,需要重新自己创建镜像
docker commit 容器名 镜像名:lastest
# gdal测试文件复制到容器
docker cp /Users/xxx/Downloads/l.tif magical_napier:/usr/local
docker cp /Users/xxx/Downloads/test1\(1\).jar magical_napier:/usr/local
docker每次重新启动都需要重新执行source /etc/profile,网上的方法都失败了
解决方案:编写dockerfile重新创建镜像,文件中加环境变量
# 基础镜像
FROM gdal-env-1:lastest
# dockerfile添加环境变量
ENV PATH $PATH:/usr/local/bin
ENV LD_LIBRARY_PATH $LD_LIBRARY_PATH:/usr/local/lib
ENV ANT_HOME /usr/local/apache-ant-1.10.12
ENV PATH $PATH:$JAVA_HOME/bin:${ANT_HOME}/bin
ENV LD_LIBRARY_PATH .:$JAVA_HOME/jre/lib/amd64/server
输出日志中文问题
# dockerfile添加环境变量
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:UTF-8
ENV LC_ALL en_US.UTF-8
执行命令
docker build -t gdal-3.0.4:lastest .
# 镜像重命名
docker tag gdal-3.0.4:lastest 10.112.229.252:5000/gdal-3.0.4:lastest
# 推送到镜像仓库
docker push 10.112.229.252:5000/gdal-3.0.4:lastest
# 从镜像仓库拉取
docker pull 10.112.229.252:5000/gdal-3.0.4:lastest
# 镜像tag重命名
docker tag 10.112.229.252:5000/gdal-3.0.4:lastest gdal-3.0.4:lastest
# 对于没有进程的docker容器启动后会自动停止,可以开命令行让他不停止
docker run -dit --name gdal-3.0.4 gdal-3.0.4:lastest /bin/bash
# 进入命令行
docker exec -it gdal-3.0.4 /bin/sh
# sawc-calucate启动命令
docker rmi 10.112.229.252:5000/sawc-calculate:lastest
docker rmi sawc-calculate:lastest
docker pull 10.112.229.252:5000/sawc-calculate:lastest
docker tag 10.112.229.252:5000/sawc-calculate:lastest sawc-calculate:lastest
docker run -d --name sawc-calculate -p 8016:8016 sawc-calculate:lastest
# 非容器启动jar包命令
nohup java -jar sawc-calculate1.jar > nohup.out 2>&1 &
# 非容器启动jar包带参数
nohup java -jar -Xms1024m -Xmx25600m -XX:ParallelGCThreads=8 -DBLOCK_MAX_SIZE=1000000 -DTP_CALCULATE_SIZE=1 sawc-calculate.jar > nohup.out 2>&1 &