Dockerfile 是用来构建docker镜像的文件,由一行一行的命令组成,它的本质是命令参数脚本
构建步骤:
- 编写一个dockerfile文件
- Docker build 构建成一个镜像
- Docker run 运行镜像
- Docker push 发布镜像(Docker Hub、阿里云镜像仓库)
1、DockerFile构建过程
基础知识
-
每个保留关键字(指令)都必须是大写
-
执行从上到下
-
# 表示注释
-
每个指令都会创建提交一个新的镜像层,并提交
DockerFile是面向开发的,我们以后发布项目,做镜像,就需要编写Dockerfile文件,不用担心,这个文件十分简单
Docker镜像逐渐成为企业交付的标准,必须掌握
步骤:开发,部署,运维
- DockerFile:构建文件,定义了一切步骤,源代码
- DockerImages:通过DokerFile构建生成的镜像,最终发布和运行的产品
- Docker容器:容器就是镜像运行起来提供服务器
2、DockerFile的指令
以前的话我们就是使用别人的镜像,现在我们可以自己写一个镜像
参数说明
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤:tomcat镜像,这个tomcat压缩包|添加内容
WORKDIR # 镜像工作目录
VOLUME # 挂载到的目录位置
EXPOSE # 暴露端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会剩下,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD 的指令,触发指令
COPY # 类似ADD,将我们文件拷贝到镜像中
ENV # 构建的时候需要设置的环境变量
3、实战测试
创建一个自己的centos
# 1、构建dockerfile文件
[root@iZbp12zsvvo3kfr5wvnm4lZ dockerfile]# vim mydockerfile-centos
[root@iZbp12zsvvo3kfr5wvnm4lZ dockerfile]# cat mydockerfile-centos
FROM centos
MAINTAINER minami<1643433638@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash
# 2、通过build命令构建镜像
# 命令 docker build -f dockerfile文件路径 -t 镜像名:[tag]
Successfully built 1e8d644ece07
Successfully tagged mycentos:0.1
# 3、测试
# 命令 docker run -it mycentos:0.1
我们可以通过 docker history 镜像id
来查看镜像的历史变更
# 构建dockerfile文件
[root@iZbp12zsvvo3kfr5wvnm4lZ dockerfile]# vim dockerfile-cmd-test
FROM centos
CMD ["ls","-a"]
# 生成镜像
[root@iZbp12zsvvo3kfr5wvnm4lZ dockerfile]# docker build -f dockerfile-cmd-test -t cmdtest .
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM centos
---> 5d0da3dc9764
Step 2/2 : CMD ["ls","-a"]
---> Running in 18b0dc71faaa
Removing intermediate container 18b0dc71faaa
---> e24fd8b97a95
Successfully built e24fd8b97a95
Successfully tagged cmdtest:latest
# 运行容器
[root@iZbp12zsvvo3kfr5wvnm4lZ dockerfile]# docker run cmdtest
4、实战:Tomcat镜像
步骤:
1、准备镜像文件
2、编写DockerFile
FROM centos
MAINTAINET minami<1643433638@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u241-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.53.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORK $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_241
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.53
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.53
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.53/bin/startup.sh && tail -F /url/local/apache-tomcat-9.0.53/bin/logs/catalina.out
3、构建镜像
docker build -t mytomcat:1.0
4、启动镜像
docker run -it -p 8080:8080 --name mytomcat mytomcat:1.0
5、访问测试
这里访问自己的ip地址加端口号:
http://192.168.40.106:8080/
如果出现了tomcat引导页面,即访问成功
6、发布项目(由于做了卷挂载,我们直接在本地编写项目就可以发布了)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
</web-app>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
Hello World!<br/>
<%
System.out.println("------my test web logs------");
%>
</body>
</html>
发现:项目部署成功,可以直接访问ok
我们以后开发的步骤:需要掌握Dockerfile的编写,我们之后的一切都是使用docker镜像来发布运行
5、发布自己的镜像
DockerHub
-
地址:
https://hub.docker.com/
注册账号 -
确定这个账号可以登录
-
在我们服务器上提交自己的镜像
[root@iZbp12zsvvo3kfr5wvnm4lZ tomcat]# docker login -u minamizh Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
-
登录完毕后就可以提交镜像了,就是一步,docker push
[root@iZbp12zsvvo3kfr5wvnm4lZ tomcat]# docker push diytomcat:1.0 The push refers to repository [docker.io/library/diytomcat] 50407e5bb6ba: Preparing 8b1daebed8ff: Preparing 357a9d5c59ff: Preparing 0b55622edce5: Preparing 74ddd0ec08fa: Preparing # 一定要带版本号
提交也是按照层级来进行提交的
阿里云镜像服务
- 找到阿里云
- 找到镜像服务
- 创建命名空间
- 创建容器镜像
小结