dockerfile

Dockerfile

简介

Dockerfile是用来构建docker镜像的文件。简单来说就是命令参数脚本

构建步骤:

  1. 编写一个Dockerfile文件
  2. docker build构建成为一个镜像
  3. docker run 运行命令
  4. docker push 发布镜像(DockerHub、阿里云镜像仓库)

示例

以centos为例

https://github.com/CentOS/sig-cloud-instance-images/blob/f2788ce41161326a18420913b0195d1c6cfa1581/docker/Dockerfile

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、每个指令都会创建提交一个新的镜像层,并提交

image-20201023230606442

dockerfile是面向开发的,我们以后需要发布项目,作镜像,就需要编写dockerfile文件,这个文件十分重要。

Dockerfile:构建文件,定义了一切的步骤,相当于java源代码

DockerImages:通过DockerFile构建生成的镜像。这个就是我们最终要发布和运行的东西。就相当于我们用maven项目是打的jar包

Docker容器:容器就是镜像运行起来提供服务的

DockerFile指令

image-20201023230937838

image-20201023231002005

FROM               	#基础镜像,一切从这里开始构建
MAINTAINER		   	#镜像维护人员,作者		姓名+邮箱
RUN					#镜像构建的时候需要运行的命令
ADD					#COPY文件,会自动解压
WORKDIR				#设置当前镜像的工作目录
VOLUME				#设置卷,挂载主机目录
EXPOSE				#指定对外的端口
CMD					#指定容器启动的时候要运行的命令,只有最后一个CMD命令会生效,可被替代 例: cmd echo
ENTRYPOINT			#指定容器启动的时候要运行的命令,可以追加命令
ONBUILD				#当构建一个呗继承Dockerfile 这个时候就会运行ONBUILD指令。触发指令
COPY				#类似ADD,将我们的文件拷贝到镜像中
ENV					#构建的时候这是环境变量

实战——构建自己的CentOS

Docker Hub中99%都是从``scratch`这个基础镜像来的,然后配置我们需要的软件和配置来进行的构建

image-20201023232324540

创建一个自己的CentOS

1、编写Dockerfile文件

image-20201023233341039

[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 .

构建成功

image-20201023234052184

查看docker镜像

image-20201023234254011

3、测试运行

运行命令

docker run -it lin_centos:0.1

image-20201023234640395

image-20201023234815818

可以看出,这里是直接进入了我们设置的工作目录/usr/local,ifconfig命令也能用,vim命令也能用。

查看Docker镜像变更历史

docker history 镜像id

image-20201023235135944

实战-tomcat

1、准备镜像文件 tomcat 压缩包,jdk的压缩包

用xftp上传到/home/mytomcat

image-20201024000637309

image-20201024000700913

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

image-20201024004111084

5、访问测试

http://192.168.31.131:8080/

image-20201024005255618

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/

image-20201024010917224

image-20201024011048690

发布镜像到Docker hub

1、在https://hub.docker.com/上注册一个账号

2、确定这个账号可以用

3、在我们服务器上提交自己的镜像

​ 要先登录

docker login -u lin1995 -p xxxxxxxxx

image-20201024012040166

4、执行下面命令

# docker tag 当前镜像名  docker地址
docker tag lintomcat lin1995/tomcat:1.0
#docker push 当前镜像名
docker push lintomcat

image-20201024013611103

到hub.docker.com上查看:

image-20201024013809466

到此发布完成

发布镜像到阿里云镜像

1、登录阿里云

2、找到镜像服务https://cr.console.aliyun.com/cn-hangzhou/instances/namespaces

3、创建命名空间

image-20201024014237079

4、创建镜像仓库

image-20201024014432149

image-20201024014447416

image-20201024014511042

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

image-20201024014905777

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

image-20201024015719807

查看

image-20201024015839315

posted @ 2021-10-26 22:46  程序员清风  阅读(532)  评论(0编辑  收藏  举报