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部署应用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!