关于dockerfile:docker-build-报错解决
问题应用jenkins构建我的项目时,docker build过程中报错 -t, --tag" flag: invalid reference format: repository name must be lowercase如图所示: 解决排查且也通过试验,呈现该问题的起因是docker镜像命名谬误,存在大写字母 解决将镜像名全副改为小写 well-history-web 就能够了
问题应用jenkins构建我的项目时,docker build过程中报错 -t, --tag" flag: invalid reference format: repository name must be lowercase如图所示: 解决排查且也通过试验,呈现该问题的起因是docker镜像命名谬误,存在大写字母 解决将镜像名全副改为小写 well-history-web 就能够了
应用Dockerfile部署我的项目以Nginx部署我的项目为例Docker装置及Docker公有仓库部署流程 Harbor在arm架构下亲测编译胜利 Linux装置Harbor亲测胜利功 制作根底镜像以公有仓库192.168.1.182:5000/centos为根底镜像,构建一个nginx根底镜像,其余环境都依赖这个根底镜像做出相应镜像 留神:dockerfile外面的装置命令尽量在一行实现,最初删除不必要的组件,以放大体积,放慢启动速度 cat Dockerfile-base ############################################# version : nginx-withssl-v1# desc : 装置nginx-1.10.2.tar.gz############################################# 设置继承镜像FROM 192.168.1.182:5000/centos# 上面是一些创建者的根本信息MAINTAINER liang "liang@xxx.com"# 设置环境变量ENV NGINX_VERSION 1.10.2 20220224RUN mkdir -p /data/apps/nginx-main && mkdir -p /data/logs/nginx-main && mkdir -p /data/temps/nginx-mainRUN yum -y install make wget zlib zlib-devel gcc-c++ libtool openssl openssl-devel && \ mkdir -p /data/software && \ cd /data/software && \ wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz && \ tar zxvf pcre-8.35.tar.gz && \ cd pcre-8.35 && \ ./configure && \ make && make install && \ pcre-config --version && \ wget -O /data/software/nginx-1.10.2.tar.gz http://nginx.org/download/nginx-1.10.2.tar.gz && \ cd /data/software && \ tar -zxvf nginx-1.10.2.tar.gz && \ cd /data/software/nginx-1.10.2 && \ ./configure --prefix=/data/apps/nginx-main \ --pid-path=/data/logs/nginx-main/nginx.pid \ --lock-path=/data/apps/nginx-main/nginx.lock \ --error-log-path=/data/logs/nginx-main/error.log \ --http-log-path=/data/logs/nginx-main/access.log \ --http-client-body-temp-path=/data/temps/nginx-main/client_body_temp \ --http-proxy-temp-path=/data/temps/nginx-main/proxy_temp \ --http-fastcgi-temp-path=/data/temps/nginx-main/fastcgi_temp \ --http-uwsgi-temp-path=/data/temps/nginx-main/uwsgi_temp \ --http-scgi-temp-path=/data/temps/nginx-main/scgi_temp \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-http_realip_module \ --with-pcre=/data/software/pcre-8.35 && \ make && \ make install && \ rm -rf /pcre-8.35.tar.gz /nginx-1.10.2.tar.gz /pcre-8.35 /nginx-1.10.2 && \ yum -y remove wget git gcc-c++ libtool openssl-devel zlib-devel && \ yum clean allEXPOSE 443 80创立nginxbase 镜像$ docker build -f Dockerfile-base -t 192.168.1.182:5000/nginx-main-base .$ docker push 192.168.1.182:5000/nginx-main-base比方开发环境或者测试环境须要搭建nginx, 以nginx-main-base为根底镜像 ...
什么是dockerfileDockerfile的作用与docker-compose相似,也同样是为了配置环境而存在的,那么docker-file有什么非凡之dockerFile官网文档处呢? 就目前所知,docker-compose咱们在应用时需配置image项也就是咱们须要的环境项例如咱们须要mysql环境就配置为mysql:XXX,其余同理。 咱们想要配置什么样的环境就须要在docker-hub官网网址中寻找相应的配置项,并按其示例进行配置,换句话说如果咱们所需的环境在docker-hub官网网址中不存在咱们就不能只应用docker-compose来进行配置。 比方咱们想要一键配置好运行angular单元测试的环境,咱们就无奈在docker-hub官网网址中找到对应的环境。 这时候咱们就须要本人配置镜像(image)通过Dockerfile并上传到阿里云-容器镜像服务中,从而能够在近程间接通过其公网地址加版本号(例:registry.cn-beijing.aliyuncs.com/mengyunzhi_li/node_ding_push:14.16.2)进行调用咱们自定义的image。 如何编写简略的dockerfile明确了dockerfile的性能,下一步就是要理解dockerfile如何编写dockerFile官网文档首先咱们要晓得一些根底指令1: FROM:用于指定根底镜像,在咱们自定义的镜像须要以某个镜像为根底时进行配置 例如: FROM node:14.16.0-stretch2:RUN:有多种应用形式,集体了解为在image构建时执行的命令 例如:RUN "command" "param1" "param2"留神:构建时执行指在拉取环境到本地创立容器时不会执行,因为image早曾经在阿里云镜像服务中构建完了。 3:CMD:与RUN相似,区别是其中的命令会在启动容器时执行 例如:CMD "command" "param1" "param2"留神:1、CMD在Dockerfile中只能呈现一次,有多个,只有最初一个会无效。2、其作用是在启动容器的时候提供一个默认的命令项。如果用户执行docker run的时候提供了命令项,就会笼罩掉这个命令。没提供就会应用构建时的命令。 4:COPY:复制本机文件或目录或近程文件,增加到指定的容器目录 COPY ./send-ding.sh /注:下面咱们将本地的send-ding.sh上传到了容器中,这使得咱们能够在dockerFile容器中调用此脚本docker --Dockerfile --send-ding.sh 理论问题上面我的指标是创立一个image,能够让它在被调用时主动执行指定脚本。 FROM node:14.16.0-stretchRUN apt-get updateRUN apt install -y curlRUN apt-get cleanCOPY ./send-ding.sh /RUN sh send-ding.sh -a 1ab5179dd94ed62de026d96ba61b41b1dda42357fdf79a787f11c7708449a06d -t markdown -c pipeine运行失败 -T "tiT,,le"CMD ["sh", "send-ding.sh", "-a","1ab5179dd94ed62de026d96ba61b41b1dda42357fdf79a787f11c7708449a06d", "-t", "markdown", "-c", "pipeine运行失败", "-T", "'tiT,,le'"]注:RUN 和 CMD后的指令为两种模式,理论应用时都能够 本地测试1、本地创立image sudo docker build . -t=ding-file:1.22、查看咱们创立的image sudo docker image ls3、依据image创立容器 ...
原文开始这是一篇手把手的教程,教你如何在制作nestjs镜像时,可能编写出一个优化生产依赖的Dockerfile有了这个Dockerfile,无论是在本地开发环境,还是在容器环境都能很轻松实现部署P.S 如果你想间接复制最终的Dockerfile,请间接跳到文章开端开始编写Dockerfile每个镜像都能够视为一个独自的软件包,你能够通过编写Dockerfile通知docker如何来打包镜像让咱们开始编写吧,首先,先创立一个空的文件touch Dockerfile复制代码而后把咱们的指令增加到Dockerfile外面,并且正文每一步是干什么 根底镜像FROM node:18 创立一个利用目录WORKDIR /usr/src/app 这个星号通配符意思是复制package.json和package-lock.json,复制到以后利用目录COPY package*.json ./ 装置利用依赖RUN npm install 装置结束后复制当前目录所有文件到镜像目录外面COPY . . 执行npm run build 后生成dist目录RUN npm run build 应用打包后的镜像CMD ["node","dist/main.js"]复制代码同样的,创立.gitignore文件,咱们能够把那些不须要通过docker打包的文件给疏忽掉touch .dockerignore复制代码把一下文件给排除疏忽掉Dockerfile.dockerignorenode_modulesnpm-debug.logdist复制代码在本地测试下如果你在本地装置了docker,能够在本地进行打包测试,让咱们来瞧瞧是否如预期中那样打包镜像在命令行中执行以下命令,当然,你也能够把nest-app-demo换成你想要的镜像名,须要留神的是,不要遗记前面的.号!docker build -t nest-app-demo .复制代码接着你能够在你本机执行以下命令,查看是否曾经胜利打包了镜像docker images复制代码噢,感谢上帝,曾经胜利打包成镜像了,能够看到咱们的命名nest-app-demo就像只肥硕的土拨鼠静静的躺在镜像列表外面docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnest-app-demo latest 004f7f222139 31 seconds ago 1.24GB 复制代码紧接着让咱们来把镜像给跑起来,映射到本机80端口,如果端口被占用能够应用其余端口docker run -p 80:3000 nest-app-demo复制代码这时候你就在浏览器中输出http://localhost进行拜访,能够看到容器失常启动。如果你想删除那些正在运行的容器,能够应用以下命令进行删除docker rm -f $(docker ps -aq)复制代码Dockerfile 生产环境优化好了,当初咱们对镜像包进行压缩了,因为能够看到,目前镜像大小是1.24G,噢,上帝,真是太大了!让咱们来看看之前编写的Dockerfile,看如何对它进行优化应用Alpine node镜像强烈推荐应用node:18-alpine 而不是node:18,应用alpine的镜像能够间接把镜像体积从1.24g缩小到466MB!增加 NODE_ENV 环境变量很多依赖包会依据以后的NODE_ENV环境变量而进行判断是否优化压缩,所以咱们能够在Dockerfile外面把环境变量加进去,设置为productionENV NODE_ENV production复制代码顺便提一句,如果你不晓得如何在Nestjs外面通过配置文件进行环境变量设置的话,能够看下这篇入门文章www.tomray.dev/nestjs-conf…应用npm ci 而不是npm installnpm 比拟举荐应用npm ci 而不是npm install 来打包镜像,至于起因能够点击这里查看docs.npmjs.com/cli/v8/comm… "npm ci与npm install很类似,除了当它用于自动化时,如测试平台,继续集成和部署————或者任何你想确保能有一个洁净的依赖装置环境" ...
前言好忘性不如烂笔头,边学边记,学完根底语法后,起码你能看得懂一个 Dockfile 干了哪些事儿。折腾起来。 作用Dockfile 是一个用来构建镜像的文本文件,在一个我的项目中如果有此文件,语法正确,就能够应用命令(docker build -t name:tag .)来构建一个镜像了. 1.FROM语法: FROM <image>eg: FROM node:14.17.0 // 指定node 14.17.0 版本解释: 指定一个构建镜像的根底源镜像,如果本地没有就会从公共仓库中拉取,没有指定镜像的标签会应用默认的latest 标签。 必须有。 2.WORKDIR语法: WORKDIR <工作目录门路>eg: WORKDIR /usr/src/app解释:指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创立好的)。 docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创立的目录才会始终存在。 3.MAINTAINER语法: MATAINER <name> <email>eg: MATAINER test test@163解释:形容镜像的创建者,名称和邮箱。不是必须的。 4.RUN用法: RUN "command" "param1" "param2"eg: RUN yarn install形容:运行一个命令,比方依赖的装置,脚本的执行等。RUN 命令能够有多个,然而能够用 && 连贯多个命令来缩小层级。例如 RUN npm install && cd /app && mkdir logs留神: Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像收缩过大。所以多个 RUN 能够应用 && 连贯。 ...
大家好,我是陈泽锋,我在云效负责Flow流水线编排、任务调度引擎相干的工作。在云效的产品体系下,咱们服务了各种研发规模、技术深度的的企业用户,收到了十分多的用户反馈。对于应用 Flow 进行云上构建的用户来说,构建速度是大家广泛关怀的要害因素,在深入分析用户案例的过程中,咱们发现了许多通用问题,只须要批改优化本人的我的项目或工程配置,就能够大大晋升构建的性能,从而进一步减速 CICD 的效率。明天咱们会以容器镜像构建作为切入点,总结一些在理论工程中,十分实用的优化技巧。 云原生时代下软件的构建和部署离不开容器技术。提到容器,简直大家下意识都会联想到 Docker 。而 Docker 中有两个十分重要的概念,一个是Image(镜像),一个是Container(容器)。前者是一个动态视图,打包了利用的目录构造、运行环境等;后者是一个动静视图(过程),展现的是程序的运行状态(cpu、memory、storage)等信息。接下来的文章次要分享的是如何编写能使 Dockerfile 构建过程更疾速、构建镜像更小的技巧。 镜像定义首先咱们先来理解一下 Docker 镜像,它由多个只读层重叠到一起,每一层是上一层的增量批改。基于镜像创立新容器时,将在根底层的顶部增加一个新的可写层。该层通常称为“容器层”。下图展现了一个基于 docker.io/centos 根底镜像构建的利用镜像,创立出容器时的视图。 从图中咱们能够看到镜像构建、容器启动的过程。 首先是拉取根底镜像 docker.io/centos;基于 docker.io/centos 来启动一个容器,运行指令 yum update 后进行 docker commit 提交出一个新的只读层 v1(能够了解为生成了一个新的长期镜像 A,只不过用户并不会间接援用到它);基于长期镜像A启动新的容器,运行装置和配置 http server等软件后,提交出一个新的只读层 v2,也生成了这里最终被开发者援用的镜像版本 B;基于镜像版本B运行的容器,会再追加一层读写层(对容器的文件创建、批改、删除等操作,都在这一层失效);镜像起源镜像次要是 Docker 通过读取、运行 Dockerfile 的指令来生成。举官网上的一个 Dockerfile 例子: FROM ubuntu:18.04COPY . /appRUN make /appCMD python /app/app.py它的外围逻辑是定义援用的根底镜像 base image,执行如 COPY 指令从上下文 context 里复制文件到容器中,运行 RUN 执行用户自定义构建脚本,最初定义容器启动的 CMD 或 ENTRYPOINT。构建更高效的镜像也要围绕上述波及到的概念进行优化。 Dockerfile 优化技巧应用国内的根底镜像Flow 作为云上构建产品,每次构建都会给用户提供全新的构建环境,以防止环境污染导致带来过高运维老本。正因为如此,Flow 每次构建都会从新去下载 Dockerfile 中指定的根底镜像。 如果 Dockerfile 中指定根底镜像来源于 Docker Hub,则有可能因为网络延时问题导致下载迟缓,比方: ...
进入容器报错: Docker OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caus解决办法: docker exec -it 1e33b26152e1 /bin/sh或docker exec -it 1e33b26152e1 bash或docker exec -it 1e33b26152e1 sh
根底镜像 : debian:buster-slimnginx : 1.16.1nginx tar包自行网上下载# 第一行先定义根底镜像,示意以后镜像文件是基于哪个进行编辑的.FROM debian:buster-slim# 指定镜像维护者的信息.MAINTAINER @Owen 975706304@qq.com# 先备份原源配置文件RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak# 而后将debian的apt源改成中科大源RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.listRUN sed -i 's|security.debian.org/debian-security|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.listRUN apt clean && apt update -y# 初始版的nginx须要的依赖:gcc zlib1g zlib1g-dev openssl libssl-dev libpcre3 libpcre3-dev# libgd-dev和libexif-dev为ngx_http_image_filter_module须要的依赖RUN apt -y install gccRUN apt -y install zlib1g zlib1g-devRUN apt -y install openssl libssl-devRUN apt -y install libpcre3 libpcre3-devRUN apt -y install libgd-devRUN apt -y install libexif-devRUN apt -y install make# 将dockerfile上下文目录中的ngx_http_image_filter_module.tar.gz文件拷贝进容器根目录并解压COPY ngx_http_image_filter_module.tar.gz /ngx_http_image_filter_module.tar.gzRUN tar zxf ngx_http_image_filter_module.tar.gz# 将dockerfile上下文目录中的nginx-1.16.1.tar.gz文件拷贝进容器根目录并解压COPY nginx-1.16.1.tar.gz /nginx-1.16.1.tar.gzRUN tar zxf nginx-1.16.1.tar.gz# 创立nginx用户,yum形式装置无需做此步骤,因为默认yum装置会主动创立nginx用户# 咱们上面命令以nginx用户运行,因而咱们须要在容器中创立nginx用户# -M(不创立主目录) -s(不容许登录)RUN useradd -M -s /sbin/nologin nginx# 切换至nginx目录WORKDIR /nginx-1.16.1# 编译装置nginx# --with-http_stub_status_module -> Nginx性能统计模块# --with-http_ssl_module -> ssl加密模块# --add-module=/ngx_http_image_filter_module -> 图片裁剪模块RUN ./configure \--prefix=/usr/local/nginx \--user=nginx \--group=nginx \--sbin-path=/usr/local/nginx/sbin/nginx \--modules-path=/usr/local/nginx/modules \--conf-path=/usr/local/nginx/conf/nginx.conf \--error-log-path=/usr/local/nginx/logs/error.log \--http-log-path=/usr/local/nginx/logs/access.log \--pid-path=/usr/local/nginx/logs/nginx.pid \--lock-path=/usr/local/nginx/logs/nginx.lock \--with-http_stub_status_module \--with-http_ssl_module \--add-module=/ngx_http_image_filter_moduleRUN make && make install# 将access.log日志重定向到docker的规范输入# 将error.log日志重定向到docker的规范谬误,这样docker logs 的时候就能够看到日志了# ln -sf a b 示意 b链接向aRUN ln -sf /dev/stdout /usr/local/nginx/logs/access.log && ln -sf /dev/stderr /usr/local/nginx/logs/error.logRUN mkdir -p /usr/local/nginx/conf.dWORKDIR /# 删除装置应用的文件和文件夹RUN rm -rf ngx_http_image_filter_module.tar.gzRUN rm -rf nginx-1.16.1.tar.gzRUN rm -rf ngx_http_image_filter_moduleRUN rm -rf nginx-1.16.1# 定义向外裸露的端口号,多个端口用空格做距离,启动容器时便于应用-p将此端口向宿主机端口映射EXPOSE 80/tcp 443/tcp# 解释 -> '-g' 'daemon off'# nginx默认是当前台模式启动的,Docker未执行自定义的CMD之前,nginx的pid是1,# 执行到CMD之后,nginx就在后盾运行,bash或sh脚本的pid变成了1,# 所以一旦执行完自定义CMD,nginx容器也就退出了,为了放弃nginx的容器不退出,应该敞开nginx后盾运行CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
FROM openresty/openresty:1.13.6.2-2-centosARG RESTY_YUM_REPO="http://mirrors.aliyun.com/repo/Centos-7.repo"ARG WORK_DIR="/usr/local/openresty/nginx"ARG USER=rootRUN sed -i 's/plugins=1/plugins=0/' /etc/yum.confRUN sed -i 's/enabled=1/enabled=0/' /etc/yum/pluginconf.d/fastestmirror.confRUN rm -rf /etc/yum.repos.d/CentOS*RUN yum clean all && yum-config-manager --add-repo ${RESTY_YUM_REPO} && yum makecache && rpm --rebuilddb && yum install -y vim net-tools iproute && yum groupinstall -y 'Development Tools'RUN luarocks --tree=${WORK_DIR}/luarocks install lua-cjson && luarocks --tree=${WORK_DIR}/luarocks install penlight && luarocks --tree=${WORK_DIR}/luarocks install version && luarocks --tree=${WORK_DIR}/luarocks install lua-resty-http && luarocks --tree=${WORK_DIR}/luarocks install luaunit && luarocks --tree=${WORK_DIR}/luarocks install ldoc && luarocks --tree=${WORK_DIR}/luarocks install lua-discount && luarocks --tree=${WORK_DIR}/luarocks install serpent && luarocks --tree=${WORK_DIR}/luarocks install luacov && luarocks --tree=${WORK_DIR}/luarocks install cluacov && luarocks --tree=${WORK_DIR}/luarocks install mmdblua && luarocks --tree=${WORK_DIR}/luarocks install lua-resty-jit-uuid && luarocks --tree=${WORK_DIR}/luarocks install luasocket FROM openresty/openresty:1.13.6.2-2-centosARG WORK_DIR="/usr/local/openresty/nginx"ARG USER=rootCOPY --from=0 ${WORK_DIR}/luarocks ${WORK_DIR}/luarocksENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${WORK_DIR}/c_libADD nginx/lib ${WORK_DIR}/libADD nginx/c_lib ${WORK_DIR}/c_libADD bin/go-dnsmasq /usr/local/bin/go-dnsmasqADD nginx/conf/nginx.conf.template ${WORK_DIR}/conf/nginx.conf.templateADD nginx/conf/vhosts ${WORK_DIR}/conf/vhostsADD nginx/lua ${WORK_DIR}/luaWORKDIR ${WORK_DIR}ADD entrypoint.sh /entrypoint.shENTRYPOINT /entrypoint.sh
Dockerfile <code>### base imagesFROM node:10.15-alpine# Create docker /home/nodejs directory, and run command in this pathWORKDIR /home/nodejs# Install app dependencies# copy local directory to docker /home/nodejs directoryCOPY . /home/nodejs# Install node dependencies from /home/nodejs/package.jsonRUN npm install# If you are building your code for production# RUN npm ci --only=production# expose the portEXPOSE 8080# docker start commandCMD [ "node", “index.js" ]</code>
问题形容:当应用Dockerfile从蕴含cuda的镜像建设新的image的时候,显示以下bug: Step 7/8 : RUN apt-get update && DEBIAN_FRONTEND="noninteractive" apt-get install -y -q libcudnn6=$CUDNN_VERSION-1+cuda8.0 libcudnn6-dev=$CUDNN_VERSION-1+cuda8.0 && rm -rf /var/lib/apt/lists/* ---> Running in 94b890e74e5aGet:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]Ign:2 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 InReleaseGet:3 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]Ign:4 http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64 InReleaseGet:5 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 Release [564 B]Get:6 http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64 Release [564 B]Get:7 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 Release.gpg [801 B]Get:8 http://security.ubuntu.com/ubuntu xenial-security/universe Sources [73.2 kB]Get:9 http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64 Release.gpg [801 B]Get:10 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 Packages [98.4 kB]Get:11 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [589 kB]Get:12 http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64 Packages [17.9 kB]Err:12 http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64 Packages Hash Sum mismatchGet:13 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]Get:14 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB]Get:15 http://archive.ubuntu.com/ubuntu xenial/universe Sources [9,802 kB]Get:16 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.7 kB]Get:17 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [406 kB]Get:18 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [3,486 B]Get:19 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1,558 kB]Get:20 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB]Get:21 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9,827 kB]Get:22 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB]Get:23 http://archive.ubuntu.com/ubuntu xenial-updates/universe Sources [242 kB]Get:24 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [957 kB]Get:25 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.1 kB]Get:26 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [766 kB]Get:27 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [18.5 kB]Get:28 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [5,153 B]Get:29 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [7,705 B]Fetched 25.1 MB in 9s (2,576 kB/s)Reading package lists...E: Failed to fetch http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/Packages.gz Hash Sum mismatchE: Some index files failed to download. They have been ignored, or old ones used instead.解决方案在Dockerfile 运行这行代码 ...
筹备工作一个打包好的我的项目jar包一个编写好的Dockerfile文件当然打包成docker环境就必须有一个docker环境了,这里我的docker环境是放在centos中的我的项目打jar包这里我用的是idea,所以我这里说idea的我的项目打包办法在 mvn clean package # 应用Maven打包我的项目这里我打好的jar包被我重命名为gclient.jar 编写Dockerfile文件这里我是这样编写的 # 基于哪个镜像,须要用一个已有的镜像做载体来创立,这里我应用的java8镜像,如果大家的docker镜像中没有java8,它就会主动去下载FROM java:8# 将本地文件夹挂载到以后容器,指定/tmp目录并长久化到Docker数据文件夹,因为Spring Boot应用的内嵌Tomcat容器默认应用/tmp作为工作目录VOLUME /tmp# 增加本人的我的项目到 app.jar中 这里我是取了app.jar的名字,这个名字能够轻易取的,只有前面几行名字和这个对立就好了ADD gclient.jar app.jar# 这一行我还是不太分明啥意思 等我懂了我再补上RUN bash -c 'touch /app.jar'# 凋谢8761端口EXPOSE 8761# ENTRYPOINT指定容器运行后默认执行的命令ENTRYPOINT ["java","-jar","/app.jar"]#"-Djava.security.egd=file:/dev/./urandom" 这个我不晓得是啥意思,这里我就去掉了好Dockerfile编写也实现了 把Dockerfile和gclient.jar放在同一个目录上面这里我把这两个文件都放在了我的虚拟机上面的rpa文件夹下 创立镜像在这个目录下运行命令 docker build -t gclient .这里留神,gclient只是我要起的一个名字,大家创立的时候名字能够轻易写的好吧,下面的.我没有写错啊和创立的镜像的名字有一个空格的间隔。创立好的截图如上 运行容器下面的Dockerfile中我写了我要凋谢的端口8761,然而我这个我的项目启动的时候要拜访8080端口,所以我要运行这个容器就要这样写 docker run -p 8761:8080 gclient启动胜利