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
查看