我学啥你就学啥Docker(1)No.125

2024-05-15 08:32
文章标签 docker 我学 就学 no.125

本文主要是介绍我学啥你就学啥Docker(1)No.125,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Docker安装

一般项目Dokcer 的安装比较简单,直接 brew install Docker  就可以了,不会安装的自己谷哥或者度娘去去去去。

容器历史

凡事先聊聊历史,其实在 Docker 出现之前,也出现过很多很多其他的容器技术,比如 chroot、 FreeBSD Jails、Linux VServer、 Solaris容器 等等。至于为什么会出现容器技术,大概是因为各种软件的运行环境千差万别,而规模化需要我们实现两个核心内容   标准化和隔离。

标准化怎么做呢?做Java的基本都懂,就是面向接口,抽象出核心接口层就ok了,至于里边的实现和运行态,管理层不管,只要接口一致就好了。隔离怎么做呢?一般来说要么就是物理隔离,要么就是逻辑 namespacce 隔离。

Docker 镜像

不扯那么多犊子了,今天实战跟大家分享一个Docker的一个核心概念,镜像。镜像是一个比较让人舒坦的发明,解决了一个核心问题,就是各个地方运行环境不一致的问题。

运营: "你这破应用部署不上去啊,大蕉你看看"

大蕉: "不可能我本地试了一下,是好的吖"

现在我们有了镜像,把所有的  "运行时环境"  都定义好了,以 Dockerfile 的形式保存下来,那么无论在哪个地方跑,运行时环境都是一样的。那又有人要说了,为什么不把整个镜像文件打包起来吖?屁,一个镜像小的几百M,大的几个G,每次打包上传可不等死人了,所以都会以 Dockerfile 的形式先保存。

那么运行的时候去是怎么跑的呢,就是 Docker Engine 按照Dockerfile 的格式进行一行命令一行命令执行,构建出一个跟我们本地一样的环境。

Docker 基础镜像

问题又来了,那我搞一个 python 环境可不搞死我了?我不单单要关注自己的应用,还要先下载 linux文件、编译打包、安装linux系统、 node 、npm、python、pydev ,这么一大批工程随便来哪个人写起来都要废。根据我多年的软件开发经验,如果有什么问题解决不了的,我们抽象一层。嗯  Docker 为我们准备了一个概念,就是基础镜像,我们可以在 Dockerfile 的第一行先 FROM 一下,把它继承下来,再进行我们自己的构建。

比如使用 python 的官方 Docker 基础镜像是这样的

#Use an official Python runtime as a parent image

FROM python:2.7-slim

我们现在整一个 Java 应用

现在假设我们打包好一个 Java 的 SpringBoot 应用了,非常开心地,我们理论上应该只需要跑这一行就完事了。

java -jar BananaApplication.war

但是很绝望,服务器上并没有 JDK ,所以这肯定是跑不起来的,咋整?按照我们之前将的基础环境搭建的套路,我们有两个选择。一是可以先装 linux、下载OpenJDK,配置JAVA环境变量,当然也可以  直接 FROM 一下,JDK7 环境就有啦。

FROM = 从基础镜像继承 = extends(Java)

FROM openjdk:7

ARG = 变量 

如果我们要通用点,我们要定义一个变量 APP_NAME ,从命令行传过来,作为我们的应用名称以及目录,我们要怎么做呢?答案是ARG,定义完之后我们在命令行中指定的 APP_NAME=BananaApplication 就会直接透传到环境中,如果不传,就用我们预先定义的默认值 appName。

ARG APP_NAME=appName

ENV = 环境变量 = PATH(Linux)

好了,我们运行时有一段程序使用了系统变量的形式读取了某个值,报错了又,咋整?那我们需要有一个环境变量,我们要怎么办?答案是用 ENV

ENV BANANA_PARAM=banana

COPY=拷贝文件 = cp(Linux)

一切都搞定了,常见一个目录,并把文件拷贝到我们想要的目录  /home/admin/aplication 好了。

RUN mkdir /home/application/{APP_NAME}/bin && mkdir /home/admin/application/${APP_NAME}/pros

COPY banana.properties /home/admin/application/${APP_NAME}/pros

COPY start.sh  /home/application/{APP_NAME}/bin

WORKDIR = 切换文件 = cd(Linux)

再把当前目录切换到工作目录下 

WORKDIR banana.properties /home/admin/application/bin

RUN = 跑脚本 = sh(Linux)

改一下启动脚本的权限

RUN chmod a+x  /home/admin/application/bin/start.sh

启动应用,bingo。

RUN  /home/admin/application/bin/start.sh

完整Dockerfile 是酱紫的

# This file is handwrite by big banana.

# the base image

FROM openjdk:7


#APP_NAME argument

ARG APP_NAME=appName


#SET THE  ENVIRONMENT VARIABLES

ENV BANANA_PARAM=banana


#create the directory that the application needs

RUN mkdir /home/application/{APP_NAME}/bin && mkdir /home/admin/application/${APP_NAME}/pros


#COPY THE PROPERTIES FILES

COPY banana.properties /home/admin/application/${APP_NAME}/pros


#COPY THE START UP SHELL

COPY start.sh  /home/application/{APP_NAME}/bin


#change the working directory to what you want

WORKDIR banana.properties /home/application/bin


#change the authority of the shell that you want run.

RUN chmod a+x  /home/application/{APP_NAME}/bin/start.sh


#then run it 

RUN  /home/application/${APP_NAME}/bin/start.sh

目录是酱紫的

640?wx_fmt=png

拜拜~~

这篇关于我学啥你就学啥Docker(1)No.125的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/991328

相关文章

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

关于Docker Desktop的WSL报错问题解决办法

《关于DockerDesktop的WSL报错问题解决办法》:本文主要介绍关于DockerDesktop的WSL报错问题解决办法的相关资料,排查发现是因清理%temp%文件夹误删关键WSL文件,... 目录发现问题排查过程:解决方法其实很简单:重装之后再看就能够查到了:最后分享几个排查这类问题的小www.cp

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

解读docker运行时-itd参数是什么意思

《解读docker运行时-itd参数是什么意思》在Docker中,-itd参数组合用于在后台运行一个交互式容器,同时保持标准输入和分配伪终端,这种方式适合需要在后台运行容器并保持交互能力的场景... 目录docker运行时-itd参数是什么意思1. -i(或 --interactive)2. -t(或 --

Docker部署Jenkins持续集成(CI)工具的实现

《Docker部署Jenkins持续集成(CI)工具的实现》Jenkins是一个流行的开源自动化工具,广泛应用于持续集成(CI)和持续交付(CD)的环境中,本文介绍了使用Docker部署Jenkins... 目录前言一、准备工作二、设置变量和目录结构三、配置 docker 权限和网络四、启动 Jenkins

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

docker如何删除悬空镜像

《docker如何删除悬空镜像》文章介绍了如何使用Docker命令删除悬空镜像,以提高服务器空间利用率,通过使用dockerimage命令结合filter和awk工具,可以过滤出没有Tag的镜像,并将... 目录docChina编程ker删除悬空镜像前言悬空镜像docker官方提供的方式自定义方式总结docker