dockerfile
Dockerfile
简介
Dockerfile是用来构建docker镜像的文件。简单来说就是命令参数脚本
构建步骤:
- 编写一个Dockerfile文件
- docker build构建成为一个镜像
- docker run 运行命令
- docker push 发布镜像(DockerHub、阿里云镜像仓库)
示例
以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="20200809" \
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-08-09 00:00:00+01:00"
CMD ["/bin/bash"]
官方的镜像都是基础包,很多命令都没有,需要我们自己安装。
官方既然可以制作镜像,我们也可以!
DockerFile构建过程
基础知识
1、保留关键字(指令)都必须是大写的。
2、执行顺序从上到下顺序执行
3、#
表示注释
4、每个指令都会创建提交一个新的镜像层,并提交
dockerfile是面向开发的,我们以后需要发布项目,作镜像,就需要编写dockerfile文件,这个文件十分重要。
Dockerfile:构建文件,定义了一切的步骤,相当于java源代码
DockerImages:通过DockerFile构建生成的镜像。这个就是我们最终要发布和运行的东西。就相当于我们用maven项目是打的jar包
Docker容器:容器就是镜像运行起来提供服务的
DockerFile指令
FROM #基础镜像,一切从这里开始构建
MAINTAINER #镜像维护人员,作者 姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #COPY文件,会自动解压
WORKDIR #设置当前镜像的工作目录
VOLUME #设置卷,挂载主机目录
EXPOSE #指定对外的端口
CMD #指定容器启动的时候要运行的命令,只有最后一个CMD命令会生效,可被替代 例: cmd echo
ENTRYPOINT #指定容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个呗继承Dockerfile 这个时候就会运行ONBUILD指令。触发指令
COPY #类似ADD,将我们的文件拷贝到镜像中
ENV #构建的时候这是环境变量
实战——构建自己的CentOS
Docker Hub中99%都是从``scratch`这个基础镜像来的,然后配置我们需要的软件和配置来进行的构建
创建一个自己的CentOS
1、编写Dockerfile文件
[root@aubin my_centos]# cat Dockerfile
FROM centos
MAINTAINER lin<839269938@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、通过Dockerfile文件构建镜像
# -f 表示指定Dockerfile文件的路径,我们这里是在当前目录下
# -t 表示指定tag 就是镜像的名字 注意后面有个.
# docker build -f dockerfile文件路径 -t 镜像名:[tag] .
# 构建命令
docker build -f Dockerfile -t lin_centos:0.1 .
构建成功
查看docker镜像
3、测试运行
运行命令
docker run -it lin_centos:0.1
可以看出,这里是直接进入了我们设置的工作目录/usr/local
,ifconfig
命令也能用,vim命令
也能用。
查看Docker镜像变更历史
docker history 镜像id
实战-tomcat
1、准备镜像文件 tomcat 压缩包,jdk的压缩包
用xftp上传到/home/mytomcat
下
2、编写dockerfile文件
FROM centos
MAINTAINER lin<839269938@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u271-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.39.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_271
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.39
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.39
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.39/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.39/bin/logs/catalina.out
3、构建镜像
docker build -t lintomcat .
构建成功
Successfully built ab84437f99e8
Successfully tagged lintomcat:latest
4、运行容器
命令:
docker run -d -p 8080:8080 -v /home/mytomcat/test:/usr/local/apache-tomcat-9.0.39/webapps/test -v /home/mytomcat/logs:/usr/local/apache-tomcat-9.0.39/logs lintomcat
5、访问测试
6、发布项目
由于做了卷挂载,我们直接在本地编写项目就可以了
mkdir WEB-INF
在WEB-INF下创建web.xml文件
<?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_3_1.xsd"
version="3.1">
</web-app>
然后返回上级目录,创建index.jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>ni hao a ,welcome!!!</title>
</head>
<body>
ni hao<br/>
<%
out.println("你的 IP 地址 " + request.getRemoteAddr());
%>
</body>
</html>
访问:http://192.168.31.131:8080/test/
发布镜像到Docker hub
1、在https://hub.docker.com/上注册一个账号
2、确定这个账号可以用
3、在我们服务器上提交自己的镜像
要先登录
docker login -u lin1995 -p xxxxxxxxx
4、执行下面命令
# docker tag 当前镜像名 docker地址
docker tag lintomcat lin1995/tomcat:1.0
#docker push 当前镜像名
docker push lintomcat
到hub.docker.com上查看:
到此发布完成
发布镜像到阿里云镜像
1、登录阿里云
2、找到镜像服务https://cr.console.aliyun.com/cn-hangzhou/instances/namespaces
3、创建命名空间
4、创建镜像仓库
5、发布
先到https://cr.console.aliyun.com/repository/cn-hangzhou/lin1995/lin_test/details地址去看具体的操作
6、登录
sudo docker login --username=839269938@qq.com registry.cn-hangzhou.aliyuncs.com
7、镜像生成版本号
# docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/lin1995/lin_test:[镜像版本号]
docker tag lintomcat registry.cn-hangzhou.aliyuncs.com/lin1995/lintomct:1.0
已经生成过了,就不再生成版本号了
8、push到阿里云
# docker push registry.cn-hangzhou.aliyuncs.com/lin1995/lin_test:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/lin1995/lintomct:1.0
查看