Dokcer-Dockerfile案例(二)

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:

Docker基本情况

Docker基本命令

Dockerfile(本小节属于)

Docker镜像

Docker仓库

Docker原理

Docker网络&存储&日志

Docker-Compose

Docker番外篇

我们上小节这个Dockerfile,模拟了一个需求,今天我们将模拟另外一个需求,这些需求在实际上的运维当中,可能和现在的需求都不一样,但是作为理解这个Dockerfile还是没问题的。

需求

1.基础镜像使用centos:7。

2.环境需要安装基础环境openjdk1.8。

3.这个openjdk环境还需要经常变化。

4.然后要使用这个基础环境安装部署java软件zookeeper。

拆解需求

1.基础镜像,这个没什么好说,根据业务或者技术需求自己选合适的即可。

2.环境需要安装一个openjdk版本,而且还需要经常变,我们怎么来实现这个变化呢?我们是不是可以把这个需求拆分:基础镜像+openjdk=openjdk1.8镜像;基础镜像+openjdk11=openjdk11镜像,及其他版本,然后把这个openjdk:1.8镜像作为应用程序的基础镜像,甚至应用程序还可以进行拆分。

3.安装测试应用程序zookeeper。

实操

openjkd1.8镜像

bash 复制代码
FROM centos:7
RUN rm -rf /etc/yum.repos.d/*.repo && \
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && \
    yum -y install java-1.8.0-openjdk 



#也可以根据自己的需要,定义自己的tag
docker build -t openjdk:1.8

openjdk11镜像

bash 复制代码
FROM centos:7
RUN rm -rf /etc/yum.repos.d/*.repo && \
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && \
    yum -y install java-11-openjdk

#也可以根据自己的需要,定义自己的tag
docker build -t openjdk:11

zookeeper镜像

bash 复制代码
FROM openjdk:1.8
ENV ZOOKEEPER_VERSION=3.7.2 \
    ZOOKEEPER_HOME=/opt/zookeeper \
    ZOOKEEPER_BINARY=apache-zookeeper-3.7.2-bin.tar.gz
RUN mkdir -p ${ZOOKEEPER_HOME} && \
    cd /tmp && \
    curl -O https://dlcdn.apache.org/zookeeper/zookeeper-${ZOOKEEPER_VERSION}/${ZOOKEEPER_BINARY} && \
    tar -xzf ${ZOOKEEPER_BINARY} -C ${ZOOKEEPER_HOME} --strip-components=1 && \
    rm /tmp/${ZOOKEEPER_BINARY} && \
    cd ${ZOOKEEPER_HOME} && \
    mv ./conf/zoo_sample.cfg ./conf/zoo.cfg 
WORKDIR ${ZOOKEEPER_HOME}
EXPOSE 2181
CMD ["bin/zkServer.sh", "start-foreground"]

总结

1.这里的核心是让你理解我们和合理利用镜像的分层功能(至于是什么分层,如何分层,我们将在下一小节讲解),不需要所有操作都从最基础的镜像做。这样我们后面需要升级jdk版本的时候,只要把FROM更换成openjdk11即可。

2.这样做可以让我们构建的速度更快,同时上传下载镜像速度也会更快。

3.而且我们如果有修改,只需要修改变更部分即可,不需要全局修改。

4.还有一个做镜像的经验(这里还是以centos7为例):

首先就是基于centos7创建一个容器,然后根据需要在容器里面完成所有安装部署工作。

其次就是基于刚才在容器里面操作命令写成Dockerfile,这样避免凭空写出来的Dockerfile错误,而进行频繁的修改和调试。比如我在构建这个zookeeper的镜像的时候,就多次构建,而我用的下载地址是国外的,每次光下载镜像就需要5分钟以上。这样就导致我们的工作效率降低。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

相关推荐
码思途远几秒前
NXP i.MX8系列平台开发讲解 - 5.3 调试篇(二) - 掌握Dynamic debug调试
linux·nxp·i.mx8·i.mx8m
xybDIY21 分钟前
【亚马逊云】基于Amazon EC2实例部署 NextCloud 云网盘并使用 Docker-compose 搭建 ONLYOFFICE 企业在线办公应用软件
运维·docker·容器·aws
wanhengidc1 小时前
高防服务器在网络游戏中起着哪些作用?
运维·服务器
我是阿呆同学2 小时前
Linux平台下实现的小程序-进度条
linux·小程序
我明天再来学Web渗透2 小时前
【2024年-11月-23日-开源社区openEuler实践记录】KubeOS:云原生时代操作系统的革新力量
运维·开发语言·云原生·开源·云计算·openstack
猿人启示录2 小时前
Keepalived + LVS 搭建高可用负载均衡及支持 Websocket 长连接
运维·负载均衡·lvs
天地人-神君2 小时前
centos双网卡不能上网
linux·运维·centos
rgrgrwfe2 小时前
httpslocalhostindex 配置的nginx,一刷新就报404了
运维·nginx
码韵2 小时前
【Ubuntu使用技巧】Ubuntu22.04无人值守Crontab工具实战详解
linux·运维·ubuntu
Acaibird.3 小时前
macos 远程开发,实现文件自动同步
linux·macos·ssh·远程开发