小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

docker部署应用的三种方式——最后一种直接使用shell脚本一键化部署

SHARE,# docker,docker,容器,运维 额外说明

收录于:17天前

docker命令部署

拉取ubuntu的基础镜像

docker pull ubuntu

注意,基础镜像是压缩版本,仅保证项目运行最基本的条件。许多命令不可用。如果您在使用过程中需要这些命令,则需要提前安装。

安装openjdk

sudo apt install openjdk-11-jdk

在这里插入图片描述

安装mysql

sudo apt-get install mysql-server 

在这里插入图片描述

若安装失败更新一下源sudo apt-get update

上传源码,构建容器,挂载数据卷。

源代码就不粘贴了,就是查询如下数据库内容:

在这里插入图片描述

启动容器将数据卷挂载到源码目录:

docker run -it -p 8080:8080 -v /home/xwh/java:/usr/local/java --name javaweb ubuntu

进入容器并切换到源码目录:

java -jar demo-0.0.1-SNAPSHOT.jar


在这里插入图片描述

dockerfile部署

上一节中,使用docker来部署应用程序。图像的每一层都需要配置。这些可以通过 Dockerfile 构建。 Docker可以搭建一个虚拟机,根据虚拟机依次配置好程序所需的环境,然后将源代码上传到虚拟机上。

FROM ubuntu:20.04
MAINTAINER gancy "xiaoxu@163.com"
#刷新包缓存,安装wget工具
RUN apt-get update

#安装并配置java环境

ADD jdk-8u101-linux-x64.tar.gz /usr/local/java

#配置环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_101
ENV PATH $JAVA_HOME/bin;$PATH
ENV CLASSPATH .:$JAVA_HOME/lib

#配置运行环境
ENV LANG C.UTF-8

#配置Tomcat
ADD apache-tomcat-8.5.11.tar.gz /usr/local/tomcat/
RUN chmod +x /usr/local/tomcat/apache-tomcat-8.5.11/bin/*.sh
EXPOSE 8080
ENTRYPOINT /usr/local/tomcat/apache-tomcat-8.5.11/bin/startup.sh && /bin/bash

# Install MySQL.
RUN \
  apt-get update && \
  DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server && \
  rm -rf /var/lib/apt/lists/* && \
  sed -i 's/^\(bind-address\s.*\)/# \1/' /etc/mysql/my.cnf && \
  sed -i 's/^\(log_error\s.*\)/# \1/' /etc/mysql/my.cnf && \
  echo "mysqld_safe &" > /tmp/config && \
  echo "mysqladmin --silent --wait=30 ping || exit 1" >> /tmp/config && \
  echo "mysql -e 'GRANT ALL PRIVILEGES ON *.* TO \"root\"@\"%\" WITH GRANT OPTION;'" >> /tmp/config && \
  bash /tmp/config && \
  rm -f /tmp/config

# Define mountable directories.
VOLUME ["/etc/mysql", "/var/lib/mysql"]

# Define working directory.
WORKDIR /data

# Define default command.
CMD ["mysqld_safe"]

# Expose ports.
EXPOSE 3306

直接安装jdk和mysql,使用VOLUME设置数据卷

VOLUME["/home/java","/usr/local/java"]

最后通过镜像构建容器,进入容器对应目录下启动服务。当然也可以通过ENTREYPOINT启动服务。

shell脚本使用Dockerfile一键化部署

通过上一步的Dockerfile部署已经感受到了Dockerfile的强大,在上一节构建完程序需要的环境后,需要进行上传源代码,打包,启动程序的步骤。然而这些程序都是可以通过Dockerfile一键化完成的。

一键部署Dockerfile的条件是:

  1. 下载程序所需的基础镜像和环境镜像
  2. 配置参数、端口、数据量和其他变量
  3. 上传程序并下载程序所需的库
  4. 启动程序
# 下载python3.7镜像
FROM python

# 创建工作目录

WORKDIR /usr/local/python

# 引入外部参数
ARG gitaddr
ARG path

# 暴露端口
EXPOSE 5000

# git克隆仓库
RUN git clone ${gitaddr} share

# 安装pip
RUN apt update
RUN apt install -y python3-pip

# 通过requirements安装环境
RUN pip install -r ./share/requirements.txt


# 执行命令
ENTRYPOINT ["cd","share"]
ENTRYPOINT ["ls"]
ENTRYPOINT ["python3","share/app.py"]

上面的Dockerfile中,搭建了python所需的环境;设置工作目录、参数端口等信息;源代码是通过克隆获得的,当然也可以COPY上传并进入代码目录;最后启动程序。

现在运行程序的基本要素都在Dockerfile中,根据Dockerfile对镜像进行打包,如下

docker build --build-arg gitaddr="https://gitee.com/fireapproval/share.git" --build-arg path="share" -t flask-test:1.0 .

通过--build-arg传递参数git仓库地址,-t设置镜像名称和标签,.设置Docker所在目录。

在这里插入图片描述

flask-test即为刚刚构建的镜像。以该镜像构建容器:

 docker run -it -p 5000:5000 --name falsk-app flask-test:18

在这里插入图片描述

在这里插入图片描述

需要注意的是监听的host一定要是0.0.0.0,不然会出现只能在容器内部访问,在主机上访问不了的情况。

在这里插入图片描述
5000端口已经被占用了。浏览器也成功访问

在这里插入图片描述

这里还没有实现一键部署,因为还需要手动调用两个命令:

# 构建镜像的命令
docker build --build-arg gitaddr="https://gitee.com/fireapproval/share.git" --build-arg path="share" -t flask-test:1.0 .
# 运行容器的命令
docker run -it -p 5000:5000 --name falsk-app flask-test:18

这两个命令也可以通过shell脚本实现,如下所示

#通过Dockerfile构建镜像在同一目录下
# 参数 git地址 
`docker build --build-arg gitaddr=$1 -t tmp-img:1.0 .`;

#通过镜像启动容器
# 参数容器名称 
`docker run -it -p 5000:5000 --name $2 tmp-img:1.0`;

$1用于传递git地址,需是公开的,$2是启动容器名称。那么运行脚本的命令就是:

bash ./build.sh https://gitee.com/fireapproval/share.git flask-test2

在这里插入图片描述
目录文件如下所示:
在这里插入图片描述
那么启动脚本就会自动调用上述两条命令,分别构建一个镜像,并根据镜像构建容器,并启动容器。

在这里插入图片描述
容器被我名称成了tmp-img当然也可以修改为其他任意名称。那么在任意代码中只要调用该shell脚本就能启动git仓库下的代码了。

. . .

相关推荐

额外说明

Qt 6.Ui中其他类调用控件

1. 把主类指针this传给其他类,tcpClientSocket = new TcpClient(this); //ex2.cpp #include "ex2.h" #include "ui_ex2.h" Ex2::Ex2(QWidget *pare

额外说明

编译原理(龙书):第六章部分题目参考答案

目录 6.1.1 6.1.2 6.2.1 (1) (3) 6.3.1 6.4.1 6.4.2 6.4.3 6.4.6 6.5.1 6.6.1 (2) 6.6.2 6.6.4 6.7.1 6.7.2 6.7.3 6.1.1 6.1.2 6.2.1 (1)

额外说明

C#中类的对象、封装、继承和多态

目录 一、类的对象的创建及使用 1、对象的创建 2、访问对象的属性和行为 3、对象的引用 4、对象的销毁 5、this关键字 6、类与对象的关系 二、类的封装 三、类的继承 四、类的多态 一、类的对象的创建及使用         C#是一门面向对象的程序

额外说明

Spring 源码解析 - Bean资源加载注册过程

一、Spring Bean资源加载注册过程 在使用 Spring 时,一般有两种方式,一种是使用 Xml 的形式定义 Bean 信息,另一种是使用注解的方式,本篇文章带领大家一起解析下当使用 Xml 的方式下,Spring 是如何加载资源并进行注册的。

额外说明

【Go 基础篇】Go语言基本数据类型转换:字符串、整数、浮点数、字符与布尔类型的转换

介绍 在计算机编程中,不同的数据类型用于表示不同种类的数据。在Go语言(Golang)中,基本数据类型包括字符串、整数、浮点数、字符和布尔类型。在实际开发中,经常需要进行不同数据类型之间的转换,以满足不同需求和计算。本篇博客将深入探讨Go语言中基本数据类

额外说明

大数据讲课笔记6.5 ZooKeeper的Shell操作

文章目录 零、学习目标 一、导入新课 二、新课讲解 (一)ZooKeeper Shell概述 (二)通过Shell命令操作ZooKeeper 1、显示所有操作命令 2、查看当前ZK内容 3、查看当前节点详情 4、创建节点 5、获取节点 6、修改节点 7、

额外说明

C语言实现十进制转化为十六进制-------数组,switch语句,while循环语句

内容目录 十进制如何转化为十六进制 思路解析 运用知识点 代码实现 1.十进制如何转化为十六进制 十六进制每位数上从大到小是0123456789ABCDEF 十进制转化为十六进制与十进制转化为八进制一样求法,就是求余。例如十进制数181的十六进制为B5

额外说明

前端学习1——HTML5

前端学习1——HTML5 0、HTML注释 <!--这是一段注释。注释不会在浏览器中显示。--> 1、基本标签 1.1、文档类型 <!DOCTYPE html> 1.2、文档信息 <head> 文档头部 </head> 1.3、文档元信息 <m

额外说明

ldp rsvp_适用于您网站的7个最佳WordPress RSVP插件

ldprsvp 您是否正在寻找适用于 WordPress 的 RSVP 插件? RSVP 插件允许您直接在网站上接受对邀请的回复,以便您可以更好地管理您的活动。在本文中,我们精心挑选了一些适用于 WordPress 的最佳 RSVP 插件,它们将使您的活

ads via 小工具