查看镜像的DockerFile
关键字 | 作用 |
---|---|
FROM | 基础镜像,当前新镜像是基于哪个镜像的 |
MAINTAINER | 镜像维护者的姓名混合邮箱地址 |
RUN | 容器构建时需要运行的命令 |
EXPOSE | 当前容器对外暴露的端口 |
WORKDIR | 指定在创建容器后,终端默认登录的进来工作目录 |
ENV | 用来在构建镜像过程中设置环境变量 |
ADD | 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包 |
COPY | 类似ADD,拷贝文件和目录到镜像中! |
VOLUME | 容器数据卷,用于数据保存和持久化工作 |
CMD | 指定一个容器启动时要运行的命令,dockerFile中可以有多个CMD指令,但只有后一个生效! |
ENTRYPOINT | 指定一个容器启动时要运行的命令!和CMD一样 |
ONBUILD | 当构建一个被继承的DockerFile时运行命令,父镜像在被子镜像继承后,父镜像的ONBUILD被触发 |
DockerFile菜鸟教程
Docker Hub 中99% 的镜像都是通过在base镜像(Scratch)中安装和配置需要的软件构建出来的
1、查看下官方默认的CentOS的情况:
docker run -it --name centos001 centos /bin/bash
目的:
使我们自己的镜像具备如下:登陆后的默认路径、vim编辑器、查看网络配置ifconfig支持
2、在宿主机的home目录下,创建 mydockerfile-test文件夹,新建dockerfile-centos文件
FROM centos
MAINTAINER hou<1658951186@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
3、通过 dockerfile-centos文件,生成镜像
当前宿主机中的镜像列表信息
-- 生成镜像
-f dockerfile地址
-t 新镜像名字:版本号
. 表示当前目录位置
docker build -f dockerfile-centos -t hou-centos:1.0 .
运行过程
[root@localhost dockerfile-test]# docker build -f dockerfile-centos -t hou-centos:1.0 .
Sending build context to Docker daemon 2.048kB
Step 1/10 : FROM centos
---> 5d0da3dc9764
Step 2/10 : MAINTAINER hou<1658951186@qq.com>
---> Running in 464d6efaf018
Removing intermediate container 464d6efaf018
---> 1b6e84821098
Step 3/10 : ENV MYPATH /usr/local
---> Running in e823f2263d02
Removing intermediate container e823f2263d02
---> 685794482262
Step 4/10 : WORKDIR $MYPATH
---> Running in 6f2a64534b44
Removing intermediate container 6f2a64534b44
---> c127563bb763
Step 5/10 : RUN yum -y install vim
---> Running in baa5b8015dc2
CentOS Linux 8 - AppStream 1.9 MB/s | 8.4 MB 00:04
CentOS Linux 8 - BaseOS 3.4 MB/s | 4.6 MB 00:01
CentOS Linux 8 - Extras 19 kB/s | 10 kB 00:00
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-16.el8 appstream 1.4 M
Installing dependencies:
gpm-libs x86_64 1.20.7-17.el8 appstream 39 k
vim-common x86_64 2:8.0.1763-16.el8 appstream 6.3 M
vim-filesystem noarch 2:8.0.1763-16.el8 appstream 49 k
which x86_64 2.21-16.el8 baseos 49 k
Transaction Summary
================================================================================
Install 5 Packages
Total download size: 7.8 M
Installed size: 30 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-17.el8.x86_64.rpm 152 kB/s | 39 kB 00:00
(2/5): vim-filesystem-8.0.1763-16.el8.noarch.rp 1.4 MB/s | 49 kB 00:00
(3/5): vim-enhanced-8.0.1763-16.el8.x86_64.rpm 2.7 MB/s | 1.4 MB 00:00
(4/5): which-2.21-16.el8.x86_64.rpm 192 kB/s | 49 kB 00:00
(5/5): vim-common-8.0.1763-16.el8.x86_64.rpm 7.1 MB/s | 6.3 MB 00:00
--------------------------------------------------------------------------------
Total 4.7 MB/s | 7.8 MB 00:01
warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-17.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS Linux 8 - AppStream 499 kB/s | 1.6 kB 00:00
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) "
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : which-2.21-16.el8.x86_64 1/5
Installing : vim-filesystem-2:8.0.1763-16.el8.noarch 2/5
Installing : vim-common-2:8.0.1763-16.el8.x86_64 3/5
Installing : gpm-libs-1.20.7-17.el8.x86_64 4/5
Running scriptlet: gpm-libs-1.20.7-17.el8.x86_64 4/5
Installing : vim-enhanced-2:8.0.1763-16.el8.x86_64 5/5
Running scriptlet: vim-enhanced-2:8.0.1763-16.el8.x86_64 5/5
Running scriptlet: vim-common-2:8.0.1763-16.el8.x86_64 5/5
Verifying : gpm-libs-1.20.7-17.el8.x86_64 1/5
Verifying : vim-common-2:8.0.1763-16.el8.x86_64 2/5
Verifying : vim-enhanced-2:8.0.1763-16.el8.x86_64 3/5
Verifying : vim-filesystem-2:8.0.1763-16.el8.noarch 4/5
Verifying : which-2.21-16.el8.x86_64 5/5
Installed:
gpm-libs-1.20.7-17.el8.x86_64 vim-common-2:8.0.1763-16.el8.x86_64
vim-enhanced-2:8.0.1763-16.el8.x86_64 vim-filesystem-2:8.0.1763-16.el8.noarch
which-2.21-16.el8.x86_64
Complete!
Removing intermediate container baa5b8015dc2
---> d9587c88dbaf
Step 6/10 : RUN yum -y install net-tools
---> Running in b9aacd14dd40
Last metadata expiration check: 0:00:10 ago on Thu Jan 6 14:48:41 2022.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
net-tools x86_64 2.0-0.52.20160912git.el8 baseos 322 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 322 k
Installed size: 942 k
Downloading Packages:
net-tools-2.0-0.52.20160912git.el8.x86_64.rpm 2.5 MB/s | 322 kB 00:00
--------------------------------------------------------------------------------
Total 662 kB/s | 322 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : net-tools-2.0-0.52.20160912git.el8.x86_64 1/1
Running scriptlet: net-tools-2.0-0.52.20160912git.el8.x86_64 1/1
Verifying : net-tools-2.0-0.52.20160912git.el8.x86_64 1/1
Installed:
net-tools-2.0-0.52.20160912git.el8.x86_64
Complete!
Removing intermediate container b9aacd14dd40
---> 34905ae822a5
Step 7/10 : EXPOSE 80
---> Running in a1b476e1c698
Removing intermediate container a1b476e1c698
---> c1dee8f8843a
Step 8/10 : CMD echo $MYPATH
---> Running in 2fdaef7a94e6
Removing intermediate container 2fdaef7a94e6
---> 151167473545
Step 9/10 : CMD echo "-------------------------end------------------------"
---> Running in 19a99b23e9b9
Removing intermediate container 19a99b23e9b9
---> 1782e00525b2
Step 10/10 : CMD /bin/bash
---> Running in e80c8a8d48b3
Removing intermediate container e80c8a8d48b3
---> 25ad1dfbbb2f
Successfully built 25ad1dfbbb2f
Successfully tagged hou-centos:1.0
4、查看生成的镜像
5、运行生成的centos镜像测试
-- 要加版本号哈,不然就会先去搜索下载镜像再运行
docker run -it --name centos001 hou-centos:1.0 /bin/bash
6、列出镜像地的变更历史
--docker history 镜像名称或镜像ID
docker history 25ad1dfbbb2f
测试CMD命令
1、新建 dockerfile-cmd文件
-- 启动容器后,打印当前目录下所有的文件列表信息
FROM centos
CMD ["ls","-a"]
2、build dockerfile-centos文件,生成镜像
docker build -f dockerfile-cmd -t centos-cmd:1.0 .
3、启动容器测试
docker run -it centos-cmd:1.0
4、如果我们希望用 -l 列表展示信息,我们就需要加上 -l参数
docker run -it centos-cmd:1.0 -l
问题:
我们可以看到可执行文件找不到的报错,executable file not found。
跟在镜像名后面的是 command,运行时会替换 CMD 的默认值。
因此这里的 -l 替换了原来的 CMD,而不是添加在原来的 ls -a 后面。
而 -l 根本不是命令,所以自然找不到。
如果我们希望加入 -l 这参数,我们就必须重新完整的输入这个命令:
run -it centos-cmd:1.0 ls -la
测试ENTRYPOINT命令
1、新建 dockerfile-entrypoint文件
-- 启动容器后,打印当前目录下所有的文件列表信息
FROM centos
ENTRYPOINT ["ls","-a"]
2、build dockerfile-entrypoint文件,生成镜像
docker build -f dockerfile-entrypoint -t centos-entrypoint:1.0 .
3、启动容器测试
docker run -it centos-entrypoint:1.0
4、测试-l参数,发现可以直接使用,这里就是一种追加,
我们可以明显的知道 CMD 和ENTRYPOINT 的区别了
docker run -it centos-entrypoint:1.0 -l
1、准备工作
1、在宿主机home目录下新建tomcat文件夹
2、将apache-tomcat-8.5.73.tar.gz和jdk-linux-x64.tar.gz拷贝到 /home/tomcat目录下
3、在 /home/tomcat目录下,新建个Dockerfile文件(Dockerfile这个名称,在 docker build 时,就不用加 -f 选项了)
Tomcat8.5.73下载地址
JDK1.8.0_131下载地址
2、创建 Dockerfile文件
FROM centos
MAINTAINER hou<1658981186@qq.com>
#把宿主机当前上下文的read.txt拷贝到容器/usr/local/路径下
COPY read.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.73.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_131
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.73
ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.73
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat并动态打印日志信息
CMD /usr/local/apache-tomcat-8.5.73/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.73/bin/logs/catalina.out
3、docker build Dockerfile文件,生成镜像
docker build -t hou-tomcat:1.0 .
-- 运行过程
[root@localhost tomcat]# docker build -t hou-tomcat:1.0 .
Sending build context to Docker daemon 196.1MB
Step 1/15 : FROM centos
---> 5d0da3dc9764
Step 2/15 : MAINTAINER hou<1658981186@qq.com>
---> Running in dddc2af70a27
Removing intermediate container dddc2af70a27
---> 8d3b9475b6c3
Step 3/15 : COPY read.txt /usr/local/cincontainer.txt
---> aabb697f2f9a
Step 4/15 : ADD jdk-linux-x64.tar.gz /usr/local/
---> fb7fa22145b1
Step 5/15 : ADD apache-tomcat-8.5.73.tar.gz /usr/local/
---> 951bb5657195
Step 6/15 : RUN yum -y install vim
---> Running in f593431621b5
CentOS Linux 8 - AppStream 56 kB/s | 8.4 MB 02:34
CentOS Linux 8 - BaseOS 611 kB/s | 4.6 MB 00:07
CentOS Linux 8 - Extras 14 kB/s | 10 kB 00:00
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-16.el8 appstream 1.4 M
Installing dependencies:
gpm-libs x86_64 1.20.7-17.el8 appstream 39 k
vim-common x86_64 2:8.0.1763-16.el8 appstream 6.3 M
vim-filesystem noarch 2:8.0.1763-16.el8 appstream 49 k
which x86_64 2.21-16.el8 baseos 49 k
Transaction Summary
================================================================================
Install 5 Packages
Total download size: 7.8 M
Installed size: 30 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-17.el8.x86_64.rpm 38 kB/s | 39 kB 00:01
(2/5): vim-filesystem-8.0.1763-16.el8.noarch.rp 18 kB/s | 49 kB 00:02
(3/5): which-2.21-16.el8.x86_64.rpm 6.3 kB/s | 49 kB 00:07
(4/5): vim-enhanced-8.0.1763-16.el8.x86_64.rpm 32 kB/s | 1.4 MB 00:43
(5/5): vim-common-8.0.1763-16.el8.x86_64.rpm 31 kB/s | 6.3 MB 03:28
--------------------------------------------------------------------------------
Total 38 kB/s | 7.8 MB 03:30
warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-17.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS Linux 8 - AppStream 1.6 MB/s | 1.6 kB 00:00
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) "
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : which-2.21-16.el8.x86_64 1/5
Installing : vim-filesystem-2:8.0.1763-16.el8.noarch 2/5
Installing : vim-common-2:8.0.1763-16.el8.x86_64 3/5
Installing : gpm-libs-1.20.7-17.el8.x86_64 4/5
Running scriptlet: gpm-libs-1.20.7-17.el8.x86_64 4/5
Installing : vim-enhanced-2:8.0.1763-16.el8.x86_64 5/5
Running scriptlet: vim-enhanced-2:8.0.1763-16.el8.x86_64 5/5
Running scriptlet: vim-common-2:8.0.1763-16.el8.x86_64 5/5
Verifying : gpm-libs-1.20.7-17.el8.x86_64 1/5
Verifying : vim-common-2:8.0.1763-16.el8.x86_64 2/5
Verifying : vim-enhanced-2:8.0.1763-16.el8.x86_64 3/5
Verifying : vim-filesystem-2:8.0.1763-16.el8.noarch 4/5
Verifying : which-2.21-16.el8.x86_64 5/5
Installed:
gpm-libs-1.20.7-17.el8.x86_64 vim-common-2:8.0.1763-16.el8.x86_64
vim-enhanced-2:8.0.1763-16.el8.x86_64 vim-filesystem-2:8.0.1763-16.el8.noarch
which-2.21-16.el8.x86_64
Complete!
Removing intermediate container f593431621b5
---> ccc640109fd3
Step 7/15 : ENV MYPATH /usr/local
---> Running in d6260b3bda47
Removing intermediate container d6260b3bda47
---> 36d5d0b5ef33
Step 8/15 : WORKDIR $MYPATH
---> Running in 6284727f4c3b
Removing intermediate container 6284727f4c3b
---> e9d7a2395eb2
Step 9/15 : ENV JAVA_HOME /usr/local/jdk1.8.0_131
---> Running in bdca27b8e1ce
Removing intermediate container bdca27b8e1ce
---> 4899302c4ebb
Step 10/15 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
---> Running in d13f4ab88cbe
Removing intermediate container d13f4ab88cbe
---> 234f0403b019
Step 11/15 : ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.73
---> Running in 732c5ac41e60
Removing intermediate container 732c5ac41e60
---> 6186375490d8
Step 12/15 : ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.73
---> Running in 570c7a15339b
Removing intermediate container 570c7a15339b
---> 0a16f2385ec2
Step 13/15 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
---> Running in df7eebe8078e
Removing intermediate container df7eebe8078e
---> 3ea0b91d7c81
Step 14/15 : EXPOSE 8080
---> Running in 8a4872c8e9c3
Removing intermediate container 8a4872c8e9c3
---> 67d4955ad68f
Step 15/15 : CMD /usr/local/apache-tomcat-8.5.73/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.73/bin/logs/catalina.out
---> Running in 827c14df6be7
Removing intermediate container 827c14df6be7
---> 466012b31894
Successfully built 466012b31894
Successfully tagged hou-tomcat:1.0
4、查看生成的镜像
5、启动容器
备注:
Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可
docker run -d -p 9090:8080 --name tomcat001 -v /home/tomcat/test:/usr/local/apache-tomcat-8.5.73/webapps/test -v /home/tomcat/tomcat_logs:/usr/local/apache-tomcat-8.5.73/logs --privileged=true hou-tomcat:1.0
6、验证测试访问
curl localhost:9090
7、发布项目测试
1、在 /home/tomcat/test 目录下,新建 WEB-INF文件
2、在 /home/tomcat/test/WEB-INF目录下,新建 web.xml启动文件
3、在 /home/tomcat/test 目录下,新建 test.jsp文件
web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>test</display-name>
</web-app>
test.jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>heiheihei</title>
</head>
<body>
-----------welcome------------
<%=" my docker tomcat"%>
<br>
<br>
<% System.out.println("-------my docker tomcat-------");%>
</body>
</html>
8、再次访问测试
curl localhost:9090/test/test.jsp
9、查看日志
tail -f catalina.out
注册dockerhub ,需要有一个账号
1、登录 dockerhub
docker login -u 用户名
2、发布镜像
docker push 用户名/镜像名:版本号
显示带有标记的图像不存在于本地
-- 执行下面这条命令
docker tag 镜像ID 用户名/镜像名:版本号
再次 docker push
成功后,是这样的
可能是因为我用的虚拟机上传镜像,我的仓库里没有
这是跟着大佬学习做的笔记,大家也可以去看看哈
【狂神说Java】Docker最新超详细版教程通俗易懂