DockerFile 是用来构建Docker镜像的构建文件,是由一些列命令和参数构成的脚本。
构建步骤: 1、编写Dockerfile文件 2、docker build 3、docker run
Dockerfile内容基础知识
1:每条保留字指令都必须为答谢字母且后面要跟随至少一个参数
2:指令按照从上到下,顺序执行
3:#表示注释
4:每条指令都会创建一个新的镜像层,并对镜像进行提交
github docker centos构建文件
FROM scratch ADD centos-7-x86_64-docker.tar.xz / LABEL \ org.label-schema.schema-version="1.0" \ org.label-schema.name="CentOS Base Image" \ org.label-schema.vendor="CentOS" \ org.label-schema.license="GPLv2" \ org.label-schema.build-date="20201113" \ org.opencontainers.image.title="CentOS Base Image" \ org.opencontainers.image.vendor="CentOS" \ org.opencontainers.image.licenses="GPL-2.0-only" \ org.opencontainers.image.created="2020-11-13 00:00:00+00:00" CMD ["/bin/bash"]
Docker执行Dockerfile大大概流程
1:docker从基础镜像运行一个容器
2:执行一条执行并对容器作出修改
3:执行类似docker commit的操作提交一个新的镜像层
4:docker再基于于刚提交的镜像运行一个新容器
5:执行dockerfile中的下一条执行知道所有指令都执行完成
Dockfile保留字指令
Dockerfile(保留字指令):
FROM 基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER 镜像维护者的姓名和 邮箱地址 zzyy<chinaidc@cc.com>
RUN 容器构建是需要运行的命令
EXPOSE 当前容器对外暴露的端口号
WORKDIR 指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
ENV 用来在构建镜像过程中设置环境变量
ADD 宿主机目录下文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY 类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层镜像内的<目标路径>位置
VOLUME 容器数据卷,用于保存数据和持久化工作
CMD 指定一个容器启动是要运行的命令。Dockerfile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run 之后的参替换
ENTRYPOINT 同上,但ENTRYPOINT会被docker run 之后的参数追加
ONBUILD 当构建一个被继承的dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
实例
1、编写 Dockerfile1
FROM centos MAINTAINER wxp<chinaidc@cc.com> ENV MYPATH /tmp WORKDIR $MYPATH RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD /bin/bash
2、构建镜像wxp/centos:1.3 镜像名:TAG
docker build -f /mydocker/Dockerfile1 -t wxp/centos:1.3 .
3、运行镜像
docker run -it wxp/centos:1.3
CMD和ENTRYPOINT区别
docker 本地镜像导入和保存的方法
docker save -o rocketmq.tar rocketmq ##-o:指定保存的镜像的名字;rocketmq.tar:保存到本地的镜像名称;rocketmq:镜像名字
docker save -o hello-world.tar hello-world
docker load --input rocketmq.tar 或 docker load < rocketmq.tar
docker rmi -f bf756fb1ae65
docker load < hello-w.tar
docker rmi -f bf756fb1ae65
docker load --input hello-w.tar
centos7 docker搭建tomcat 问题解决方法
1、创建linux宿主机文件夹用于存储tomcat容器中复制出来的配置文件。
mkdir -pv /www/tomcat
cd /www/tomcat
复制tomcat容器配置文件
docker exec -it 容器名字(或容器container id) bash
docker cp 98ef9a0b5e52:/usr/local/tomcat/conf/tomcat-users.xml tomcat-users.xml docker cp 98ef9a0b5e52:/usr/local/tomcat/webapps.dist webapps
tree -if -L 2 /www/tomcat #目录结构如下
/www/tomcat
├── tomcat-users.xml
└── webapps
├── docs
├── examples
├── host-manager
├── manager
└── ROOT
2、修改复制出来的文件 tomcat-users.xml配置权限,webapps/manager/META-INF/context.xml 配置访问地址和端口等。
编辑tomcat-usrs.xml,底部</tomcat-users>以内添加如下内容,其中授权访问账号为:tomcat,密码为:tomcat.2019
<role rolename="manager-gui" /> <role rolename="manager-script" /> <role rolename="manager-status" /> <role rolename="manager-jmx" /> <user username="tomcat" password="tomcat.2019" roles="manager-gui,manager-script,manager-status,manager-jmx" />
切进/webapps/manager/META-INF文件夹,编辑里面的context.xml文件,将以下内容注释掉。
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
3、重新运行一个tomcat容器,并挂载本地的配置文件到容器对应文件。
docker run -dit --name my_tomcat -p 7777:8080 --restart=always -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime:ro -v /www/tomcat/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml -v /www/tomcat/webapps:/usr/local/tomcat/webapps tomcat
参数解析:
-d 后台运行容器,并返回容器ID;
--name 为容器起一个容易区分且容易书写的名字
-p 映射宿主机端口到容器端口,宿主机端口:容器端口
--restart=always 机器重启时自动启动容器
-e 设定一些必须的环境变量。本例子中 -e TZ="Asia/Shanghai" 设定时区为上海,强烈建议国内设定,否则容器内打印的所有日志时间都会差8小时。
-v 挂载宿主机文件到容器。本例三个分别为:
-v /etc/localtime:/etc/localtime:ro 挂载宿主机时间,保持容器时间正确。
-v /www/tomcat/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml 挂载宿主机配置文件到容器。
-v /www/tomcat/webapps:/usr/local/tomcat/webapps 挂载宿主机/webapps到容器。
4、重新访问ip:7777,便可以访问页面
小总结