目录
1、安装docker并配置镜像加速
2、Dockerfile常用指令总结
3、基于centos制作tomcat镜像
4、利用桥接实现不同宿主机之间容器互联
5、Dockerfile编写技巧之ENTRYPOINT[x.sh]配合CMD
1、安装docker并配置镜像加速
即添加国内镜像源使得拉去镜像速度加快、如网易云、腾讯云、阿里云
2、Dockerfile常用指令总结阿里云可通过 容器镜像服务-镜像工具-镜像加速-获取自己专属的加速地址,将地址添加至 /etc/docker/daemon.json中即可
[root@master1 ~]# cat /etc/docker/daemon.json
{
"data-root": "/var/lib/docker",
"exec-opts": ["native.cgroupdriver=cgroupfs"],
"registry-mirrors": ["https://fivjgw66.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn", "http://hub-mirror.c.163.com"],
"insecure-registries": ["127.0.0.1/8"],
"max-concurrent-downloads": 10,
"live-restore": true,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "15m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
3、基于centos制作tomcat镜像
- FROM 基于哪个基础镜像制作的
- LABEL 标签一般说明作者邮箱等信息,也可是对Dockerfile镜像一些描述
- ADD 复制本地文件至镜像内
- COPY 复制以及解压文件至镜像内
- ENV 定义变量;变量可用于docker built以及docker run阶段
- RUN 执行命令
- EXPOSE 暴露端口,默认为TCP
- ENTRYPOINT 访问入口,优先级比CMD高,常配合CMD达到执行脚本+可持续执行命令的作用
- CMD 一般用于容器可持续执行的命令
1、思路 centos基础镜像-jdk环境镜像-tomcat基础镜像-tomcat业务镜像
添加环境变量->添加JDK包->添加Tomcat二进制包->执行run_tomcat.sh持续命令
2、将基础镜像制作成tomcat镜像,准备的文件有:
[root@master1 dockerfile]# tree .
.
├── README.md
├── system ### 系统镜像目录
│ ├── alpine
│ └── centos
│ ├── build.sh
│ └── Dockerfile ##基于centos镜像添加一些常用应用软件
└── web ### 业务镜像目录
├── jdk ## jdk环境镜像目录
│ ├── Dockerfile ##添加JAVA_HOME及PATH等环境变量
│ ├── jdk-8u301-linux-x64.tar.gz ##jdk的包
│ └── profile ##将环境变量添加的配置文件
├── nginx
└── tomcat ### tomcat镜像目录
├── apache-tomcat-8.5.72.tar.gz ## tomcat的包
├── Dockerfile ##定义tomcat环境基础变量及添加tomcat包
└── tomcat-app1 ### 业务tomcat镜像
├── Dockerfile ##添加主页、run_tomcat.sh持续运行脚本、用户目录属性、暴露端口等
├── index.jsp ##主页
├── run_tomcat.sh ##核心命令/apps/tomcat/bin/catalina.sh start
└── server.xml ##定义主页所在目录8 directories, 12 files
--- Dockerfile文件 ---------------------------------------- ## Centos基础镜像 [root@master1 dockerfile]# cat system/centos/Dockerfile FROM centos:centos7.9.2009 LABEL maintainer="yyy" ENV REFESH_DATA 2021-10-18 RUN yum -y install wget && rm -f /etc/yum.repos.d/* && wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/Centos-7.repo && yum -y install vim-enhanced tcpdump lrzsz tree telnet bash-completion net-tools && yum -y install gcc make glibc glibc-devel pcre-devel openssl-devel zlib-devel && yum clean all && rm -f /etc/localtime && ln -s ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN groupadd www -g 2021 && useradd www -u 2021 -g www ## jdk基础镜像 [root@master1 dockerfile]# cat web/jdk/Dockerfile FROM centos-base:v1 LABEL maintainer="yyy" ADD jdk-8u301-linux-x64.tar.gz /usr/local/src RUN ln -s /usr/local/src/jdk1.8.0_301 /usr/local/jdk ADD profile /etc/profile ENV JAVA_HOME /usr/local/jdk ENV JRE_HOME $JAVA_HOME/jre ENV CLASSPATH $JAVE_HOME/lib/:$JRE_HOME/lib/ ENV PATH $PATH:$JAVA_HOME/bin ## tomcat基础镜像 [root@master1 dockerfile]# cat web/tomcat/Dockerfile FROM centos-jdk:8u301 LABEL maintainer="yyy" ENV TZ "Asia/Shanghai" ENV LANG en_US.UTF-8 ENV TERM xterm ENV TOMCAT_MAJOR_VERSION 8 ENV TOMCAT_MINOR_VERSIOn 8.5.72 ENV APP_DIR ${CATALINA_HOME}/webapps ## tomcat业务镜像 [root@master1 dockerfile]# cat web/tomcat/tomcat-app1/Dockerfile FROM tomcat-base:v8.5.72 LABEL maintainer="yyy" ADD server.xml /apps/tomcat/conf/server.xml ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh ADD index.jsp /data/tomcat/webapps/app/ RUN chown -R www.www /apps/ /data/tomcat/ EXPOSE 8080 8009 CMD ["/apps/tomcat/bin/run_tomcat.sh] --- 变动文件细节 ---------------------------------------- ##jdk环境的/etc/profile文件 export JAVA_HOME=/usr/local/jdk export TOMCAT_HOME=/apps/tomcat export PATH=$JAVE_HOME/bin:$JAVA_HOME/jre/bin:$TOMCAT_HOME/bin:$PATH export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVE_HOME/jre/lib:$JAVE_HOME/lib/tools.jar ## tomcat业务镜像主页jsp文件 [root@master1 dockerfile]# cat web/tomcat/tomcat-app1/index.jsp Tomcat Page in app1 ## tomcat业务镜像server.xml修改appbase网页所在目录位置4、利用桥接实现不同宿主机之间容器互联## tomcat业务镜像CMD持续运行的脚本 [root@master1 dockerfile]# cat web/tomcat/tomcat-app1/run_tomcat.sh #!/bin/bash echo "namesever 180.76.76.76" > /etc/resolv.conf su - www -c "/apps/tomcat/bin/catalina.sh start" su - www -c "tail -f /etc/hosts"
5、Dockerfile编写技巧之ENTRYPOINT[x.sh]配合CMD1、容器两端默认网桥模式,各容器网段不同;先添加对端容器所在网段的路由、添加iptables规则修改FORWARD
- route add -net 192.168.1.0/24 gw 10.0.0.1
- iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT #实现NAT内网地址到外网
2、另外一种将宿主机网卡加入网桥中不常用也不推荐
3、使用Open vSwitch(GRE隧道原理)
通常要实现一段大部分的脚本或很多行命令集合执行在Dockerfile怎么实现,将脚本末尾添加“$@”这个
通过将.sh脚本后面添加 ,在Dockerfile配合ENTRYPOINT和CMD达到的效果为:
CMD的内容都将成为参数传入到ENRTYPOINT里的命令,且此时脚本末尾为$@,表示命令行中传参将追加替换至脚本末尾,实现脚本+可持续执行的命令的效果
1、达到该镜像能够持续运行不退出的效果【CMD命令】
2、能够将脚本于ENTRYPOINT和CMD融合,达到即执行了脚本又能持续执行CMD中命令的效果。
如下面Haproxy镜像Dockerfile文件的构造
Dockerfile: docker-entrypoint.sh: Haproxy镜像github:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)