docker部署应用的三种方式

 更新时间:2024年03月07日 09:26:34   作者:_小许_  
越来越多的前端团队选择用Docker部署前端项目,本文主要介绍了docker部署应用的三种方式,具有一定的参考价值,感兴趣的可以了解一下

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一键化部署的满足条件是:

  • 下载基础镜像和程序所需环境镜像
  • 配置参数、端口即数据卷等变量
  • 上传程序并下载程序所需要的库
  • 启动程序
# 下载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仓库下的代码了。

到此这篇关于docker部署应用的三种方式的文章就介绍到这了,更多相关docker部署应用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一次docker错误的耗时排查过程记录

    一次docker错误的耗时排查过程记录

    这篇文章主要给大家介绍了一次docker错误的耗时排查过程记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • docker在windows创建卷后本地找不到的完美解决方法

    docker在windows创建卷后本地找不到的完美解决方法

    这篇文章主要介绍了docker在windows创建卷后本地找不到的完美解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-02-02
  • 详解Docker 配置国内免费registry mirror

    详解Docker 配置国内免费registry mirror

    本篇文章主要介绍了 Docker 配置国内免费registry mirror,具有一定的参考价值,有兴趣的小伙伴们可以参考一下
    2017-07-07
  • docker实现重新打tag并删除原tag的镜像

    docker实现重新打tag并删除原tag的镜像

    这篇文章主要介绍了docker实现重新打tag并删除原tag的镜像,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 从零开始使用Dapr简化微服务的示例

    从零开始使用Dapr简化微服务的示例

    本文以net6和dapr1.5为基础,搭建一个dapr的简单使用示例。对Dapr简化微服务的简单使用感兴趣的朋友跟随小编一起学习下吧
    2021-11-11
  • docker安装使用xdebug的过程

    docker安装使用xdebug的过程

    这篇文章主要介绍了docker安装使用xdebug的过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Docker 配置阿里云容器服务操作

    Docker 配置阿里云容器服务操作

    这篇文章主要介绍了Docker 配置阿里云容器服务操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker使用的个人学习总结

    Docker使用的个人学习总结

    最近时不时会用到很多开发工具,无奈装了太多无用软件,所以不想安装太多开发软件在电脑上,所以想到了用docker容器来配置开发环境适应不同开发内容,这篇文章主要给大家总结了关于Docker使用的一些个人学习知识点,需要的朋友们下面来一起看看吧。
    2017-06-06
  • 一台虚拟机基于docker搭建大数据HDP集群的思路详解

    一台虚拟机基于docker搭建大数据HDP集群的思路详解

    这篇文章主要介绍了一台虚拟机基于docker搭建大数据HDP集群 ,本篇文章主要讲了大数据集群搭建的架构设计和实现思路部分,后面文章会探讨上层应用的构建,需要的朋友可以参考下
    2022-11-11
  • 详解docker中Dockerfile指令创建镜像

    详解docker中Dockerfile指令创建镜像

    这篇文章主要介绍了详解docker中Dockerfile指令创建镜像,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11

最新评论