我学啥你就学啥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

相关文章

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

禅道Docker安装包发布

禅道Docker安装包发布 大家好, 禅道Docker安装包发布。 一、下载地址 禅道开源版:   /dl/zentao/docker/docker_zentao.zip  备用下载地址:https://download.csdn.net/download/u013490585/16271485 数据库用户名: root,默认密码: 123456。运行时,可以设置 MYSQL_ROOT_P

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

docker-compose安装和简单使用

本文介绍docker-compose的安装和使用 新版docker已经默认安装了docker-compose 可以使用docker-compose -v 查看docker-compose版本 如果没有的话可以使用以下命令直接安装 sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-c

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4

Windows与linux中docker的安装与使用

windos中安装使用docker 下载Docker_Desktop 安装包进入docker官网下载Docker_Desktop: https://www.docker.com/ 启用wsl 我们搜索“启用或关闭Windows功能”,打开后勾选适用于Linux的Windows 子系统 Docker_Desktop设置 出现Docker Engine stopped的解决

docker学习系列(四)制作基础的base项目镜像--jdk+tomcat

前面已经完成了docker的安装以及使用,现在我们要将自己的javaweb项目与docker结合 1.1准备jdk+tomcat软件 ​​我下载了apache-tomcat-7.0.68.tar.gz和jdk-7u79-linux-x64.tar.gz,存储于Linux机器的本地目录/usr/ect/wt/下(利用xshell上传)。利用linux命令 tar -zxvf apache-tom

docker学习系列(三)docker使用

紧接着之前的博客,这一篇主要写如何使用docker 系列1:docker简介:http://blog.csdn.net/u013469562/article/details/72864323 系列2: docker安装:http://blog.csdn.net/u013469562/article/details/72865167 一、docker镜像的获取 1.1搜索可用镜像

docker学习系列(二)docker安装

接着之前的博客http://blog.csdn.net/u013469562/article/details/72864323,今天写一下docker的安装和使用 1.1docker的安装前置需求 首先docker目前的版本已经到了v17.03 本文采用centos6.6版本安装docker,其他操作系统可以参考其他博客,首先docker对于centos的需求如下 C

docker学习系列(一)初识docker

在第一版本上线之后公司,我们决定将之前使用的开源api文档项目转移到本公司的服务器之上,之前用的是showdoc,showdoc利用的是php技术,作为java程序员表示需要快速部署php环境以及apach容器都需要时间,所以采用第二种方法,即利用docker进行快速部署(虽然学习成本也不比php少)。 一、docker简介 docker的官网是https://www.docker.com,