持续化部署教程(七)构建基础容器

配置一个基础容器,并生成镜像

  • 1.什么是基础镜像?
  • 2.构建镜像
    • 2.1下载并运行容器
    • 2.2进入已存在的容器
    • 2.3 部署应用
      • 2.3.1 前期准备
      • 2.3.2 从宿主机拷贝文件到容器
      • 2.3.3安装JDK
      • 2.3.4安装Tomcat
    • 2.4 推送镜像
  • 3.部署应用
  • 4.小结

在上几个章节,我们介绍了Docker的各项基础知识,通过上面的学习,我们可以基本完成对Docker的各项操作。本章节,主要介绍如果我们想把自己的java项目通过容器发布,我们需要做的准备工作有哪些。

1.什么是基础镜像?

基础镜像不是一种概念,而是一种技巧。
比如我们计划在Linux系统上部署java项目,那么我们都需要准备什么呢?大概能列举的出来如JDK环境、Tomcat等等。如果我们是通过Docker发布,那这些前置环境我们需要怎么安装、安装大概需要多长时间、安装后的位置在哪里,小朋友你是否有一堆的问号?
我们在开发中常常会使用这样一种技巧,在项目中创建一个base类,其他类都继承这个base类,这样的好处就是当我们需要扩展某些基础功能的时候,只需要扩展base类,那么继承于它的类都会响应。我们今天构建的基础镜像同样是要实现这样的功能,我们会预先部署我们运行应用时需要的环境,当我们发布应用时,只需要关注当前容器部署应用的情况,而不会再考虑基础环境的配置,如果我们的运行环境发生了变化,我们也只需调整基础镜像的相关参数,重新发布应用即可。

2.构建镜像

2.1下载并运行容器

运行命令,构建容器,如图所示:

docker run  -p 50016:50016  --name ubuntu18_base -it  ubuntu:18.10 /bin/bash    

持续化部署教程(七)构建基础容器_第1张图片
如上图,我们已经运行了一个以ubuntu:18.10为操作系统的容器,并映射容器的端口50016到宿主机的50016端口。
因为我们传入了 -it 参数,所以当前容器的运行模式为前台模式,直接进入容器中。
退出容器返回到宿主机有两种模式:

  1. 输入exit会直接退出容器,返回到宿主机命令行。
  2. 使用组合键 ctrl+q+p会将容器设置为后台运行,返回到宿主机命令行。

执行 docker ps -a 可以查看本地容器列表
执行 docker images 可以查看本地镜像列表。
持续化部署教程(七)构建基础容器_第2张图片

2.2进入已存在的容器

docker服务重启或者docker容器退出后,本地容器就处于停止状态,如果想进入本地容器需执行一下命令。
如上图所示,docker容器的id为 a56380be0877
启动容器

docker restart a56380be0877

进入容器

docker attach a56380be0877 

这样我们就进入了一个本地已停止的容器。
如果容器是在后台运行中的,则执行 docker attach a56380be0877 即可直接进入容器。
持续化部署教程(七)构建基础容器_第3张图片

2.3 部署应用

2.3.1 前期准备

刚刚加载的容器我们可以视为一个刚做完系统的新服务器,所以我们对它进行简单的环境配置。
具体内容请参考前面的章节《持续化部署教程(二) 配置Ubuntu服务器》
刷新容器系统的软件安装源

apt-get update
apt-get upgrade 

安装文本编译工具

apt-get install vim  

持续化部署教程(七)构建基础容器_第4张图片

2.3.2 从宿主机拷贝文件到容器

首先,在容器中创建一个文件夹,命名为java
持续化部署教程(七)构建基础容器_第5张图片
退出当前容器,通过执行docker cp 命令 将 Tomcatjdk1.8文件夹 (如何获取相应文件,见文末) 拷贝到 java文件夹中,并进入容器通过ls命令进行验证。
docker cp 基本语法为:

docker cp ["宿主机目录"] ["容器ID"] ["容器目录"]

持续化部署教程(七)构建基础容器_第6张图片

2.3.3安装JDK

执行 vim /etc/profile 命令,对profile文件进行编译,并在文件最后增加以下内容。

export JAVA_HOME=/java/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export PATH=.:${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH 

持续化部署教程(七)构建基础容器_第7张图片
文件保存退出后,执行命令,

source /etc/profile

让配置文件立即生效,执行 java -version 返回如下图所示,证明安装成功。
在这里插入图片描述

2.3.4安装Tomcat

执行 vim /java/tomcat7/bin/setclasspath.sh,对setclasspath.sh进行编辑,加入如下内容,如图:

export JAVA_HOME=/java/jdk1.8
export JRE_HOME=/java/jdk1.8/jre

持续化部署教程(七)构建基础容器_第8张图片
保存退出后,进入bin文件夹执行如下命令,会报如下图所示错误:

./catalina.sh run

在这里插入图片描述
这是因为执行sh脚本是需要授权的,执行如下命令,即可解决此问题。

chmod u+x *.sh 

再次执行 ./catalina.sh run命令,运行成功。
持续化部署教程(七)构建基础容器_第9张图片

2.4 推送镜像

推送镜像的方式,请参考《持续化部署教程(四)docker基础命令》中的第四章节,此处就不在赘述了。

3.部署应用

上面的章节,我们完成了基础镜像的构建和推送,接下来我们通过镜像来部署我们的应用了。
创建个DockerFile文件,粘贴如下内容,如果想了解细节,见《持续化部署教程(六)自定义脚本-DockerFile》。

#本地打包 推镜像脚本
#20200507 castle
#=======================begin===========================
#执行镜像(1)
FROM 192.168.1.100:9001/base_docker/base_pro:1.0
#作者信息
MAINTAINER caslte "[email protected]"
# 拷贝文件到指定目录
RUN echo "Asia/Shanghai" > /etc/timezone
# 将war包(2)
ADD war/web-server.war /java/tomcat7/webapps/
ENV LANG C.UTF-8
# 执行tomcat
CMD ["/java/tomcat7/bin/catalina.sh","run"]
# 开放端口
EXPOSE 80

(1)这里的镜像,就是我们构建的基础镜像,镜像内已经具备了JDK环境和Tomcat容器。
(2)在要发布的war包拷贝到DockerFile文件同目录的war文件夹下,通过docker命令就可以拷贝文件到容器的Tomcat指定目录中。

4.小结

文章中提到的Tomcat和jdk文件包我都已经上传到百度云盘中,大家可以直接下载。
百度云盘地址:https://pan.baidu.com/s/1sPlQpRn14NlTeIoBf3hb1g 提取码:ick1
本章节中我有几处都是让大家去读以前的章节,而不是重复之前已经讲过的内容。这套教程通过循序渐进的方式,一层一层的来讲解Docker的相关技巧,不是为了堆积字数而去堆积字数,所以希望大家能按照章节顺序来阅读相关知识,最后,祝大家学习愉快,如果能对你后续的学习提供些许帮助,那就是我最大的快乐。
2020-05-07夜。

你可能感兴趣的:(docker)