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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM