欢迎大家关注我的以下主页,尤其是今日头条!!!谢谢🙏🙏🙏
csdn:雷园的csdn博客
个人博客:雷园的个人博客
简书:雷园的简书
今日头条:来自底层程序员的仰望
Docker Hub没有你想要的镜像?黑箱制作属于你自己的镜像
开头说几句
- 在前面的章节中,我们分别介绍了Docker镜像的使用以及一些基本操作。
- 在前面我们说的都是使用官方、开源作者提供的镜像。
- 这一章节中,我们就来说说Docker Images的制作——黑箱。
正式开始
为什么自己制作Docker镜像,官方不是很齐全吗?
- 确实官方的镜像仓库已经很齐全了,而且还有很多第三方的镜像仓库比如网易的镜像仓库。
- 但是——各方需求千奇百怪,而且根据系统架构的不同,以来服务的方式也有所不同。
- 所以多数时候,我们还是会使用自己制作的镜像。
为什么使用“黑箱”方式制作,有什么好处吗?
- 其实这是一种很不规矩的制作方法,如果硬要说有什么好处的话,那就是门槛低、操作简单。
- 同时无可避免的会有些不好的地方——“体积”大。
- 同样的镜像,黑箱制作的大小可能是dockerfile制作的大小两倍。
- 下个章节我们会介绍dockerfile的制作方式,相对需要学习和掌握的东西会稍多一些。
开始前的准备工作——找到自己熟悉的操作系统镜像
- 打开Docker Hub。
- 左侧Categories复选框中,选中Operating Systems以筛选操作系统镜像。
- 我们可以看到右边列出了许多发行版linux的系统镜像,有我们常用的Ubuntu、Centos、Debian等等。
- 这里我选择我常用的Centos镜像作为我们即将制作镜像的基础镜像。
- 在Tags中,我们可以看到镜像又根据版本分为多个标签(Tags),我直接选择latest版本,大家可以根据自己的需求选择不同标签。
- 选择好之后,直接复制拉取命令在本地拉取镜像即可。
- 如果有的小伙伴因为网络问题无法正常拉取,建议大家使用网易的镜像仓库进行拉取,速度会快很多。
对操作系统镜像做一些简单的操作
-
在操作linux系统的时候,我们都会有个习惯,那就是
yum -y update
。 -
为什么这么做呢?这样是为了避免安装的软件由于依赖服务版本不兼容导致异常。
-
所以对于我们的系统镜像,也需要执行,我建议将执行过更新操作的镜像保存起来,作为我们后续镜像制作的基础镜像,能和节省很多时间。
-
具体操作如下:
# 宿主机操作 $ docker pull centos $ docker -d --name centos centos $ docker exec -it centos bash # 容器伪终端操作,这步可能需要一点时间哦,耐心等待 $ yum -y update $ exit # 宿主机操作 ## $ docker commit -m "备注信息" -a "更新者" ${容器ID} ${镜像名称:镜像标签} $ docker commit -m "centos update" -a "LY" ${容器ID} centos_update:latest ## 查看镜像 $ docker images
Docker黑箱制作Tomcat镜像并通过环境变量配置运行端口
-
第一步我们运行刚才制作的centos_update:latest镜像。
-
第二步进入容器伪终端并且配置Java环境,并且安装tomcat。
-
第三步编写脚本进行字符替换、启动tomcat。
-
第四步保存容器为镜像,以备后用。
-
具体操作如下:
# 第一步 $ docker run -d -v ./jdk-8u151-linux-x64.tar.gz:/usr/local/java/jdk-8u151-linux-x64.tar.gz -v ./apache-tomcat-9.0.26.tar.gz:/app/software/apache-tomcat-9.0.26.tar.gz --name centos_update centos_update:latest # 第二步 ## 宿主机终端 $ docker exec -it centos_update bash ## 容器伪终端 $ tar -zxvf /usr/local/java/jdk-8u151-linux-x64.tar.gz -C /usr/local/java/ $ echo 'export JAVA_HOME=/usr/local/java/jdk1.8.0_151' >> /etc/profile $ echo 'export PATH=.:$JAVA_HOME/bin:$PATH' >> /etc/profile $ echo 'export TOMCAT_PORT=8080' >> /etc/profile $ echo 'export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> /etc/profile $ source /etc/profile $ tar -zxvf /app/software/apache-tomcat-9.0.26.tar.gz -C /app/software/ $ mv /app/software/apache-tomcat-9.0.26 /app/software/tomcat $ ln -s /app/software/tomcat /root/tomcat # 第三步 $ mkdir -p /app/software/bash $ touch /app/software/bash/start.sh $ vim /app/software/bash/start.sh ## start.sh脚本内容 Start{ #!/bin/bash ## author:来自底层程序员的仰望 sed -i 's/8080/'${TOMCAT_PORT}'/g' /app/software/tomcat/conf/server.xml /app/software/tomcat/bin/startup.sh tail -f /app/software/tomcat/logs/catalina.out ## }start.sh脚本内容 End $ exit # 第四步 $ docker commit -m "my tomcat image" -a "LY" ${容器ID} my_tomcat:latest
制作的镜像该如何使用?如何指定tomcat运行端口?如何部署项目?
-
与正常的镜像无异,只需在启动镜像时指定运行我们在镜像内的start.sh脚本即可。
-
若需指定tomcat运行端口,只需添加环境变量配置即可。
-
至于部署项目,我们只需要将我们的服务包(war)在容器启动时挂载至容器中即可,或者启动后copy进去也可以。
-
具体操作如下:
$ docker run -d -p 8080:9999 -v ./war/:/app/software/tomcat/webapps/ -e "TOMCAT_PORT=9999" --name tomcat my_tomcat:latest
最后说几句
- 今天我们简单的说了一下黑箱环境下的镜像制作。
- 虽不是很规矩的做法,但是有些复杂的软件镜像我觉得只能这样来制作。
- 下一章节中我们会讲解使用dockerfile的镜像制作方法。
- 黑箱的缺点特别的明显,至于有多明显,大家通过下章节的学习后可以使用两者制作的镜像做对比看看。
- 希望今天的文章可以给大家带来一定的收获,同时感谢大家支持和关注我。
- 年轻人们,一起努力吧!!!