实验环境
# 机器 51 52 都有harbor 仓库 好传镜像
系统:centos7.9 ---注意换源
docker版本:1.20
dockerfile的原理
1、dockerfile 每个指令都会创造一个新的镜像层(注意: 是一个临时的容器) 执行完之后不在存在
再往后就重新进行创建和操作
2、镜像层将被缓存和利用(后续的镜像将基于前面的一层,每一层下面都有基层缓存)换言之,重新下载速度会比第一次快也是这个原因
3、dockerfile的指令更改之后,复制文件变化或者构建镜像指定变量不同,会影响到原先前面的镜像层
发生改变的行为,对应的镜像层缓存就会销毁
4、某一层的镜像缓存失效之后,他之后的缓存也都会消失
就像地基一样
5、容器修改不会影响到镜像,如果在某一层中添加一个文件,会在下一层删除它
镜像中仍然会包含该文件
dockerfile的操作指令
这些较为基础,可以看截图理解
dockerfile实战
nginx
我们尝试写一个nginx的dockerfile 来看看 实际操作下 dockerfcile 如何构建镜像的
mkdir /dockerfiles
cd /dockerfiles
mkdir /nginx-example
cd /root/dockerfiles/nginx-example
vim index.html 在里面写一个 nginx test is ok
## 因为下面我们的dockerfile中写了 COPY index.html 所以文件夹里面需要有这个index.html文件的
vim dockerfile-nginx-v1
------------------
FROM alpine:latest
MAINTAINER jichao
RUN apk add --update nginx \
&& rm -rf /var/cache/apk/* \
&& echo "daemon off;" >> /etc/nginx/nginx.conf
&& chown -R nginx:www-data /var/lib/nginx
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx"]
-------------
docker build -t nginx:v1 -f dockerfile-nginx-v1 .
也可以试试另一个
cd /root/docker-file-example/docker-file-nginx-example
vim docker-file-nginx
------------------------
FROM quay.io/centos/centos:stream9
RUN yum -q -y update && yum -q -y upgrade \
&& yum install -y tzdata vim less ncurses telnet wget zip unzip traceroute procps net-tools iproute tcpdump nginx \
&& ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& yum clean all \
&& echo "alias ls='ls --color'" >> ~/.bashrc \
&& echo "alias ll='ls -l'" >> ~/.bashrc \
&& echo "daemon off;" >> /etc/nginx/nginx.conf
EXPOSE 80
ENTRYPOINT ["nginx"]
CMD ["-c","/etc/nginx/nginx.conf"]
-------------------
## 这快的
FROM quay.io/centos/centos:stream9 最好用武功机器去下载好镜像然后推送到仓库 接着让 第二台机器
去拉取这个镜像,在进行构建 或者两台机器都可以武功,这样还省事了
docker build -t nginx:v2 -f docker-file-nginx .
docker run -itd --name nginx:v2-test -p 80:80 nginx:v2
---------------
# 可以先出门把这个镜像拉下来
mkdir nginx
wget -P nginx/ http://nginx.org/download/nginx-1.15.2.tar.gz
cd /root/nginx
FROM centos:7.6.1810
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.huaweicloud.com/repository/conf/CentOS-7-anon.repo
RUN yum -y install gcc make pcre-devel zlib-devel tar zlib
ADD nginx-1.15.2.tar.gz /usr/src/
RUN cd /usr/src/nginx-1.15.2 \
&& mkdir /usr/local/nginx \
&& ./configure --prefix=/usr/local/nginx && make && make install \
&& ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
RUN rm -rf /usr/src/nginx-1.15.2
EXPOSE 80
EXPOSE 443
CMD ["nginx","-g","daemon off;"]
docker run -d -P nginx:v1
构建tomcat镜像
这个实验少个包
FROM centos:7.6.1810
MAINTAINER flyfish
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.huaweicloud.com/repository/conf/CentOS-7-anon.repo
ADD jdk1.8.0_201.tar.gz /usr/local/
ADD apache-tomcat-8.0.47.tar.gz /usr/local/
RUN yum -y install vim lrzsz git subversion gpm unzip net-tools
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA HOME /usr/local/idk1.8.0_201
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.0.47
ENV CATALINA_BASH /usr/local/apache-tomcat-8.0.47
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.0.47/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.0.47/bin/logs/catalina.out
FROM tomcat:v1
MAINTAINER flyfish
ADD helloworld_war.war /usr/local/apache-tomcat-8.0.47/webapps/
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/idk1.8.0_201
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:aaaaaaaaaaaaaaa$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.0.47
ENV CATALINA_BASH /usr/local/apache-tomcat-8.0.47
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
###暴露端口
CMD /usr/local/apache-tomcat-8.0.47/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.0.47/bin/logs/catalina.out
docker run -itd --name tomcat-test -p 8080:8080 tomcat:v1
在根据这个镜像写个helloworld
vim helloworld-dockerfile
FROM tomcat:v1
MAINTAINER flyfish.
ADD helloworld_war.war/usr/local/apache-tomcat-8.0.47/webapps/
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_201
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.0.47
ENV CATALINA_BASH /usr/local/apache-tomcat-8.0.47
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
###暴露端口
CMD /usr/local/apache-tomcat-8.0.47/bin/startup.sh&& tail -F /usr/local/apache-tomcat-8.0.47/bin/logs/catalina.out
docker build -t helloworld:v1 -f helloworld-dockerfile .
hadoop
mkdir -p /root/dockerfiles/hadoop
vim dockerfile-hadoop-v1
ls
# 使用基础镜像
FROM centos:7.6.1810
MAINTAINER jc
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.huaweicloud.com/repository/conf/CentOS-7-anon.repo
RUN yum install lrzsz git subversion gpm unzip zip net-tools wget vim curl epel-release -y && \
yum install -y gcc gcc-c++ make gd-devel libxml2-devel \
libcurl-devel libjpeg-devel libpng-devel openssl-devel \
libmcrypt-devel libxslt-devel libtidy-devel autoconf \
iproute net-tools telnet wget curl && \
yum clean all && \
rm -rf /var/cache/yum/*
RUN mkdir -p /opt/bigdata
# 安装jdk
ADD jdk1.8.0_201.tar.gz /opt/bigdata
RUN mv /opt/bigdata/jdk1.8.0_201 /opt/bigdata/jdk
ENV JAVA_HOME /opt/bigdata/jdk
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
## 安装hadoop
ADD hadoop-3.3.1.tar.gz /opt/bigdata/
RUN mv /opt/bigdata/hadoop-3.3.1 /opt/bigdata/hadoop
ENV HADOOP_HOME /opt/bigdata/hadoop
ENV HADOOP_MAPRED_HOME /opt/bigdata/hadoop
ENV PATH $PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 配置 Hadoop
COPY hadoopfiles/core-site.xml /opt/bigdata/hadoop/etc/hadoop/
COPY hadoopfiles/hdfs-site.xml /opt/bigdata/hadoop/etc/hadoop/
COPY hadoopfiles/mapred-site.xml /opt/bigdata/hadoop/etc/hadoop/
COPY hadoopfiles/yarn-site.xml /opt/bigdata/hadoop/etc/hadoop/
COPY hadoopfiles/hadoop-env.sh /opt/bigdata/hadoop/etc/hadoop/
WORKDIR /opt/bigdata/hadoop
RUN hdfs namenode -format
# 暴露端口
EXPOSE 8088 9870 50070
docker build -t hadoop:v1 -f dockerfile-hadoop-v1 .
# 创建容器
docker run -itd --name hadoop-test -h flink01 -h flink01 -p 8088:8088 -p 9870:9870 -p 50070:50070 hadoop:v1
# 进入容器
docker exec -it hadoop-test /bin/bash
cd /opt/bigdata/hadoop/etc/hadoop/
vim hadoop-env.sh
vim mapred-env.sh
vim yarn-env.sh
# 都添加 export JAVA_HOME=/opt/bigdata/jdk
cd ..
cd ..
bin/hdfs namenode -format # 格式化
sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start datanode
hdfs dfs -mkdir /test
hdfs dfs -put README.txt /test
# 启动Hadoop的yarn
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
# 访问8088接口
vim file1
hadoop spark
hue oozie
ds airflow
hadoop spark
oozie ds
hdfs dfs -put file1 /input
cd share/hadoop/mapreduce
yarn jar hadoop-mapreduce-examples-3.3.1.jar wordcount /input /output
# 成功之后测试一下
hdfs dfs -get /output