【Docker】008
【Docker】008
八、Dockerfile制作镜像1、概述Dockerfile是用来构建镜像的文件;构建步骤 编写dockerfile文件;
docker build 构建成为一个镜像;
docker run 运行镜像;
docker push 发布镜像(DockerHub,阿里云镜像仓库);
Centos的Dockerfile很多官方镜像都是基础包,仅包含基础功能,我们通常会
【Docker】008
1、概述
Dockerfile是用来构建镜像的文件;
构建步骤
- 编写dockerfile文件;
- docker build 构建成为一个镜像;
- docker run 运行镜像;
- docker push 发布镜像(DockerHub,阿里云镜像仓库);
Centos的Dockerfile
很多官方镜像都是基础包,仅包含基础功能,我们通常会搭建自己的镜像;
下面的90%是99%!
2、Dockerfile构建过程
基础知识
- 每一个保留关键字(指令)都必须大写;
- 指令按从上到下的顺序执行;
- #表示注释;
- 每一行命令都会创建并提交一个新的镜像层;
dockerfile是面向开发的,我们以后要发布项目,做镜像,需要编写dockerfile文件,这很简单!
Dockerfile逐渐成为企业交付的标准,必须要掌握!
步骤:开发、部署、运维,缺一不可!
Dockerfile:构建文件,定义了一切的步骤,源代码;
DockerImages:通过Dockerfile文件生成的镜像,最终要发布和运行的产品;
Docker容器:容器就是镜像运行起来提供服务的;
、Dockerfile的指令
参考
补充
代码语言:javascript代码运行次数:0运行复制CMD # 指定容器启动的时候要运行的命令,多个CMD,只有最后一个会生效
ETRYPOIT # 指定容器启动的时候要运行的命令,可以追加命令
OBUILD # 当构建一个被继承 Dockerfile 的时候,这个时候会运行 OBUILD 指令
COPY # 类似ADD,将我们的文件拷贝到镜像中
EV # 构建的时候设置环境变量
以前我们都是使用别人的,现在我们自己构建镜像!
4、实战:构建自己的centos
代码语言:javascript代码运行次数:0运行复制DockerHub99%的镜像都是从scratch开始的;
# 1、编写dockerfile文件
[root@zibo dockerfile]# vim df-centos # 编写文件,ESC -> :wq保存
[root@zibo dockerfile]# cat df-centos # 查看文件
FROM centos
MAITAIER zibo<709570094@qq>
EV MYPATH /usr/local
WORKDIR $MYPATH
RU yum -y install vim
RU yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash
# 2、构建镜像
# 构建镜像,别忘了点(.)代表当前目录
docker build -f df-centos -t zb-centos .
# 构建成功
……
Successfully built 65e7968fdd4
Successfully tagged zb-centos:latest
[root@zibo dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zb-centos latest 65e7968fdd4 28 seconds ago 291MB
……
# 、测试运行
docker run -it zb-centos
# 控制台
[root@zibo ~]# docker run -it zb-centos
[root@cfa5896b5eb local]# pwd
/usr/local # 直接到了我们的工作目录
[root@cfa5896b5eb local]# ifconfig # 更多的命令也可以用了!!!
eth0: flags=416<UP,BROADCAST,RUIG,MULTICAST> mtu 1500
inet 172.17.0.8 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:08 txqueuelen 0 (Ethernet)
RX packets 15 bytes 1248 (1.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisi 0
lo: flags=7<UP,LOOPBACK,RUIG> mtu 6556
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisi 0
# 查看docker镜像生成历史
docker history 镜像id
# 控制台
[root@zibo ~]# docker history 65e7968fdd4 # zb-centos
IMAGE CREATED CREATED BY SIZE COMMET
65e7968fdd4 9 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B
ae5b285264f7 9 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
011dce051915 9 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
bbb461175bbc 9 minutes ago /bin/sh -c #(nop) EXPOSE 80 0B
2d919e6d4e0 9 minutes ago /bin/sh -c yum -y install net-tools 2.MB
9acb8f704d25 9 minutes ago /bin/sh -c yum -y install vim 58MB
8c67894dcfa 12 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local 0B
0b1fe9bca817 12 minutes ago /bin/sh -c #(nop) EV MYPATH=/usr/local 0B
a7b614b9a9df 12 minutes ago /bin/sh -c #(nop) MAITAIER zibo<709570094… 0B
00e15adb2f months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> months ago /bin/sh -c #(nop) ADD file:bd7a2aed6ede42b7… 209MB
5、CMD和ETRYPOIT区别
命令说明
代码语言:javascript代码运行次数:0运行复制CMD # 指定容器启动的时候要运行的命令,多个CMD,只有最后一个会生效
ETRYPOIT # 指定容器启动的时候要运行的命令,可以追加命令
CMD代码实践
代码语言:javascript代码运行次数:0运行复制# 1、测试CMD
# 1.1 编写一个新的dockerfile文件
vim df-cmd
# 文件内容
FROM centos
CMD ["ls","-a"]
# 1.2 构建镜像
docker build -f df-cmd -t cmd-centos .
# 控制台
[root@zibo dockerfile]# docker build -f df-cmd -t cmd-centos .
Sending build context to Docker daemon 4.096kB
Step 1/2 : FROM centos
---> 00e15adb2f
Step 2/2 : CMD ["ls","-a"]
---> Running in f988fc7c89
Removing intermediate container f988fc7c89
---> aad1a58526c
Successfully built aad1a58526c
Successfully tagged cmd-centos:latest
# 1. 根据镜像创建并运行容器
docker run aad1a58526c
# 控制台:运行之后执行了ls -a
[root@zibo dockerfile]# docker run aad1a58526c
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
# 想追加一个命令 -l ls -al
[root@zibo dockerfile]# docker run aad1a58526c -l
docker: Error respe from daemon: OCI runtime create failed: container_linux.go:67: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
# CMD情况下,-l【替换】了CMD["ls","-a"]命令,-l部署命令,因此报错!
# 那我们该怎么做?
docker run aad1a58526c ls -al #
# 控制台
[root@zibo dockerfile]# docker run aad1a58526c ls -al # 需要写完整的命令
total 0
drwxr-xr-x 1 root root 6 Apr 5 01:5 .
drwxr-xr-x 1 root root 6 Apr 5 01:5 ..
-rwxr-xr-x 1 root root 0 Apr 5 01:5 .dockerenv
lrwxrwxrwx 1 root root 7 ov 15:22 bin -> usr/bin
drwxr-xr-x 5 root root 40 Apr 5 01:5 dev
drwxr-xr-x 1 root root 66 Apr 5 01:5 etc
drwxr-xr-x 2 root root 6 ov 15:22 home
lrwxrwxrwx 1 root root 7 ov 15:22 lib -> usr/lib
lrwxrwxrwx 1 root root 9 ov 15:22 lib64 -> usr/lib64
drwx------ 2 root root 6 Dec 4 17:7 lost+found
drwxr-xr-x 2 root root 6 ov 15:22 media
drwxr-xr-x 2 root root 6 ov 15:22 mnt
drwxr-xr-x 2 root root 6 ov 15:22 opt
dr-xr-xr-x 177 root root 0 Apr 5 01:5 proc
dr-xr-x--- 2 root root 162 Dec 4 17:7 root
drwxr-xr-x 11 root root 16 Dec 4 17:7 run
lrwxrwxrwx 1 root root 8 ov 15:22 sbin -> usr/sbin
drwxr-xr-x 2 root root 6 ov 15:22 srv
dr-xr-xr-x 1 root root 0 Apr 5 01:5 sys
drwxrwxrwt 7 root root 145 Dec 4 17:7 tmp
drwxr-xr-x 12 root root 144 Dec 4 17:7 usr
drwxr-xr-x 20 root root 262 Dec 4 17:7 var
ETRYPOIT代码实践
代码语言:javascript代码运行次数:0运行复制# 2、测试ETRYPOIT
# 2.1 编写一个新的dockerfile文件
vim df-entrypoint
# 文件内容
FROM centos
ETRYPOIT ["ls","-a"]
# 2.2 构建镜像
[root@zibo dockerfile]# docker build -f df-entrypoint -t df-ep .
Sending build context to Docker daemon 5.12kB
Step 1/2 : FROM centos
---> 00e15adb2f
Step 2/2 : ETRYPOIT ["ls","-a"]
---> Running in 62914ea6fc8f
Removing intermediate container 62914ea6fc8f
---> 6d49aa176415
Successfully built 6d49aa176415
Successfully tagged df-ep:latest
# 2. 根据镜像创建并允许容器
[root@zibo dockerfile]# docker run 6d49aa176415
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
# 2.4 想追加一个命令 -l ls -al
[root@zibo dockerfile]# docker run 6d49aa176415 -l
total 0
drwxr-xr-x 1 root root 6 Apr 5 01:45 .
drwxr-xr-x 1 root root 6 Apr 5 01:45 ..
-rwxr-xr-x 1 root root 0 Apr 5 01:45 .dockerenv
lrwxrwxrwx 1 root root 7 ov 15:22 bin -> usr/bin
drwxr-xr-x 5 root root 40 Apr 5 01:45 dev
drwxr-xr-x 1 root root 66 Apr 5 01:45 etc
drwxr-xr-x 2 root root 6 ov 15:22 home
lrwxrwxrwx 1 root root 7 ov 15:22 lib -> usr/lib
lrwxrwxrwx 1 root root 9 ov 15:22 lib64 -> usr/lib64
drwx------ 2 root root 6 Dec 4 17:7 lost+found
drwxr-xr-x 2 root root 6 ov 15:22 media
drwxr-xr-x 2 root root 6 ov 15:22 mnt
drwxr-xr-x 2 root root 6 ov 15:22 opt
dr-xr-xr-x 178 root root 0 Apr 5 01:45 proc
dr-xr-x--- 2 root root 162 Dec 4 17:7 root
drwxr-xr-x 11 root root 16 Dec 4 17:7 run
lrwxrwxrwx 1 root root 8 ov 15:22 sbin -> usr/sbin
drwxr-xr-x 2 root root 6 ov 15:22 srv
dr-xr-xr-x 1 root root 0 Apr 5 01:45 sys
drwxrwxrwt 7 root root 145 Dec 4 17:7 tmp
drwxr-xr-x 12 root root 144 Dec 4 17:7 usr
drwxr-xr-x 20 root root 262 Dec 4 17:7 var
# 区别是什么?entrypoint 可以对命令在原有基础上进行【追加】,而CMD是【替换】!
# Dockerfile中很多命令都非常相似,我们需要了解他们的区别,并对比测试!
6、实战:Tomcat镜像
步骤
代码语言:javascript代码运行次数:0运行复制# 1、准备镜像文件 tomcat 压缩包,jdk压缩包;
[root@zibo softs]# ls # 搞了一会儿,终于搞过来了
apache-tomcat-9.0.gz gz
# 2、编写dockerfile,官方命名是Dockerfile,构建镜像的时候会自动寻此文件,不需要-f指定了
[root@zibo softs]# vim Dockerfile
FROM centos
MAITAIER zibo<709570094@qq>
COPY /usr/local/
ADD gz /usr/local/
ADD apache-tomcat-9.0.gz /usr/local/
RU yum -y install vim
EY MYPATH /usr/local
WORKDIR $MYPATH
EV JAVA_HOME /usr/local/jdk1.8.0_281
EV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
EV CATALIA_HOME /usr/local/apache-tomcat-9.0.44
EV CATALIA_BASE /usr/local/apache-tomcat-9.0.44
EV PATH $PATH:$JAVA_HOME/bin:$CATALIA_HOME/lib:$CATALIA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.44/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.44/bin/logs/
# 、构建镜像
docker build -t zb-tomcat .
# 4、启动镜像
docker run -d -p 8004:8080 --name zbtomcat -v /home/zibo/tomcat/webapps/test:/usr/local/apache-tomcat-9.0.44/webapps/test -v /home/zibo/tomcat/logs:/usr/local/apache-tomcat-9.0.44/logs zb-tomcat
# 5、访问测试[见图:访问测试]
http://公网ip:8004/
# 别忘记开阿里云安全组端口,如果不行就开宝塔面板的端口,还有Dockerfile文件别写错!
# 6、发布项目,上面我们挂载了test目录,只需要在test目录下部署即可
[root@ZiBo test]# mkdir WEB-IF # 创建WEB-IF文件夹
[root@ZiBo WEB-IF]# vim web.xml # 编写web.xml文件[见代码web.xml]
[root@ZiBo WEB-IF]# cd ..
[root@ZiBo test]# ls
WEB-IF
[root@ZiBo test]# vim index.jsp # 编写index.jsp文件[见代码index.jsp]
# 7、访问测试[见图:访问项目测试]
http://公网ip:8004/test
# 8、查看日志
[root@ZiBo test]# ls
index.jsp WEB-IF
[root@ZiBo test]# cd ..
[root@ZiBo webapps]# ls
test
[root@ZiBo webapps]# cd ..
[root@ZiBo tomcat]# ls
logs webapps
[root@ZiBo tomcat]# cd logs/
[root@ZiBo logs]# ls
catalina.2021-04-10.log host-manager.2021-04-10.log localhost.2021-04-10.log localhost_access_log. manager.2021-04-10.log
[root@ZiBo logs]# cat
……
10-Apr-2021 07:22:49.875 IFO [Catalina-utility-1] org.startup.HostConfig.reload Reloading context [/test]
10-Apr-2021 07:22:49.876 IFO [Catalina-utility-1] org.core.StandardContext.reload Reloading Context with name [/test] has started
10-Apr-2021 07:22:49.895 IFO [Catalina-utility-1] org.core.StandardContext.reload Reloading Context with name [/test] is completed
Hello World!
Hello World!
Hello World!
访问测试
web.xml
代码语言:javascript代码运行次数:0运行复制<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi=";
xmlns=";
xmlns:web=".xsd"
xsi:schemaLocation="
.xsd"
id="WebApp_ID" version="2.5">
</web-app>
index.jsp
代码语言:javascript代码运行次数:0运行复制<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>訾博正在学Docker</title>
</head>
<body>
Hello This World!<br/>
<%
println("Hello World!");
%>
</body>
</html>
访问项目测试
7、发布自己的镜像
发布到DockerHub
代码语言:javascript代码运行次数:0运行复制# 1、注册;
# 2、在自己的服务器上登录并提交自己的镜像
# 控制台登录
[root@ZiBo logs]# docker login -u zibo1996
Password:
WARIG! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
Login Succeeded
# 、push镜像
[root@ZiBo logs]# docker push zb-tomcat
Using default tag: latest
The push refers to repository [docker.io/library/zb-tomcat]
074e6a04bb: Preparing
b5dc79d2441: Preparing
54710f6e0a8b: Preparing
bdc9057c74: Preparing
265d992f4ef: Preparing
denied: requested access to the resource is denied # 被拒绝
# 4、docker push镜像的格式
docker push 注册用户名/镜像名
# 自己的镜像名字要是:注册用户名/镜像名,因此需要规范镜像名字,要不然不到
# tag命令修改为规范的镜像:
docker tag 镜像名 注册用户名/镜像名
# 然后再push
[root@ZiBo ~]# docker tag zb-tomcat zibo1996/zb-tomcat
[root@ZiBo ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zb-tomcat latest 2029e892c6b2 2 hours ago 640MB
zibo1996/zb-tomcat latest 2029e892c6b2 2 hours ago 640MB
[root@ZiBo ~]# docker push zibo1996/zb-tomcat # 这个时候就可以push了,速度比较慢
# push中……,速度慢!
Using default tag: latest
The push refers to repository [docker.io/zibo1996/zb-tomcat]
074e6a04bb: Pushing [========================> ] 28.11MB/58.0MB
b5dc79d2441: Pushing [================================> ] 10.18MB/15.9MB
54710f6e0a8b: Pushing [=> ] 14.2MB/56.6MB
bdc9057c74: Pushed
265d992f4ef: Pushing [=====> ] 22.8MB/209.MB
# 提交的时候也是分层提交的!
发布到阿里云镜像仓库
代码语言:javascript代码运行次数:0运行复制# 1、登录阿里云——容器镜像服务——创建个人实例——设置密码——创建命名空间——创建镜像仓库——根据提示填写相关信息——本地仓库;
# 2、进入镜像仓库,就可以看到操作指南,根据操作指南执行即可!
# 、速度慢的话注意看第4条和第5条说明!
# 4、推送结果[见图:推送结果]
阿里云推送结果
8、小结
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-23 15:29:24
上一篇:【Docker】009
下一篇:【Docker】007
推荐阅读
留言与评论(共有 7 条评论) |
本站网友 海棠花有毒吗 | 30分钟前 发表 |
就可以看到操作指南 | |
本站网友 香河别墅 | 6分钟前 发表 |
7 lost+found drwxr-xr-x 2 root root 6 ov 15 | |
本站网友 火星娃学汉字 | 2分钟前 发表 |
ETRYPOIT ["ls" | |
本站网友 医药市场 | 26分钟前 发表 |
实战:构建自己的centos DockerHub99%的镜像都是从scratch开始的; 代码语言:javascript代码运行次数:0运行复制# 1 | |
本站网友 任盈盈 | 2分钟前 发表 |
这很简单!Dockerfile逐渐成为企业交付的标准 | |
本站网友 我看吧 | 11分钟前 发表 |
FROM centos ---> 00e15adb2f Step 2/2 |