【Docker】Dockerfile 配置及镜像发布

简介: 【Docker】Dockerfile 配置及镜像发布

1.镜像发布步骤

1、编写一个dockerfile文件

2、docker build 构建成为一个镜像

3、docker run 镜像

4、docker push 镜像(发布镜像到DockerHub、阿里云镜像仓库)

Dockerfile命令简述

官方文档:Dockerfile reference | Docker Documentation

中文官方文档:Docker中文文档 Dockerfile介绍-DockerInfo

2.构建镜像

docker build -f dockerfile文件名 -t 镜像名[:版本号] 文件所在目录路径(若是当前路径则写 . )

run 起来之后我们可以使用 docker history 镜像id 查看镜像构建过程

RUN命令与CMD命令的区别在哪里?

简单说,RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD命令则是在容器启动后执行。另外,一个
Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。

注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令。

CMD和ENTRYPOINT的区别在哪里?

CMD :指定容器启动的时候要运行的命令,只有最后一个会生效,不可追加(会报错)

ENTRYPOINT :指定容器启动的时候要运行的命令,命令可以追加

#dockerfile的内容
FROM centos
CMD ["ls","-a"]
docker run 镜像名 -l(报错)

#dockerfile的内容
FROM centos
ENTRYPOINT ["ls","-a"]
docker run 镜像名 -l(不报错)

3.制作Tomcat镜像并发布镜像

在docker hub官网注册在虚拟机上完成登录

[root@localhost tomcat]# docker login -u returntmp 
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

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

[root@localhost tomcat]# ll
total 188356
-rw-r--r--. 1 root root  10595340 Jun  9 05:43 apache-tomcat-8.5.81.tar.gz
-rw-r--r--. 1 root root 182278184 Apr 27 02:41 jdk-18_linux-x64_bin.tar.gz
-rw-r--r--. 1 root root         0 Jul 16 22:16 readme.txt

2.编写dockerfile文件,文件名使用官方命名:Dockerfile ,build的时候会默认寻找当前目录下的文件,不需要使用-f参数指定

[root@localhost tomcat]# cat Dockerfile 

FROM centos
MAINTAINER returntmp(自己的用户名)<自己的邮箱名>

COPY readme.txt /usr/local/readme.txt

ADD jdk-18_linux-x64_bin.tar.gz  /usr/local/
ADD apache-tomcat-8.5.81.tar.gz  /usr/local/

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk-18.0.1.1
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.81
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.81
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-8.5.81/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.81/bin/logs/catalina.out

3.使用该Dockerfile构建镜像

[root@iZwz99sm8v95sckz8bd2c4Z tomcat]# docker build -t diytomcat:1.0 .

4.启动生成的镜像,构建Tomcat容器.

这里设置了数据卷,宿主机的/home/dockerfile/tomcat/test对应该容器的/usr/local/apache-
tomcat-8.5.81/webapps/test。这样关于test项目的修复只需要在宿主机上修改就可以了,不需要进入到容器中修改。

[root@localhost tomcat]# docker run -d -p 8088:8080 --name diytomcat -v /home/dockerfile/tomcat/test:/usr/local/apache-tomcat-8.5.81/webapps/test diytomcat:1.0

5.在/home/dockerfile/tomcat/test的目录下,新建index.html 测试Tomcat是否能正常使用。

因为设置了卷挂载所以可以直接在宿主机中进行操作。

<!DOCTYPE html>
<html>
    <head>
         <meta charset="UTF-8"/>
        <title>这是个标题</title>
    </head>
    <body>
        <h1>这是一个一个简单的HTML</h1>
        <p>Hello World!</p>
    </body>
</html>

发布镜像到DockerHub

使用docker login -u 用户名 登陆后使用docker push命令推送镜像到DockerHub上的仓库

[root@localhost test]# docker push returntmp/diytomcat:1.0
The push refers to repository [docker.io/returntmp/diytomcat]
An image does not exist locally with the tag: returntmp/diytomcat
[root@localhost test]# docker tag diytomcat:1.0 returntmp/diytomcat:1.0
[root@localhost test]# docker images
REPOSITORY                TAG       IMAGE ID       CREATED          SIZE
returntmp/diytomcat       1.0       45391717b538   19 minutes ago   564MB
diytomcat                 1.0       45391717b538   19 minutes ago   564MB
my_centos01               1.0       f65ba7beac9e   2 days ago       312MB
my_centos                 1.0       c69a44ca3dc3   2 days ago       231MB
tom                       1.0       f6387f05c42f   6 days ago       684MB
mysql                     latest    7e7e458be53c   10 days ago      444MB
nginx                     latest    605c77e624dd   6 months ago     141MB
zookeeper                 latest    36c607e7b14d   6 months ago     278MB
tomcat                    latest    fb5657adc892   6 months ago     680MB
hello-world               latest    feb5d9fea6a5   9 months ago     13.3kB
centos                    latest    5d0da3dc9764   10 months ago    231MB
kibana                    7.6.2     f70986bc5191   2 years ago      1.01GB
elasticsearch             7.6.2     f29a1ee41030   2 years ago      791MB
java                      latest    d23bdf5b1b1b   5 years ago      643MB
mobz/elasticsearch-head   5         b19a5c98e43b   5 years ago      824MB
[root@localhost test]# docker push returntmp/diytomcat:1.0 
The push refers to repository [docker.io/returntmp/diytomcat]
12a3e34173f9: Pushed 
0c61aa3985aa: Pushing  318.6MB
0c61aa3985aa: Pushed 
74ddd0ec08fa: Mounted from library/centos 

1.0: digest: sha256:42da521e47e94ade18c14e244adb1a3822a14013380b62bc3ca265ea9039451d size: 1161

因为push的时候,镜像名前面需要加上用户名(如果用户名不是当前登录用户则会拒绝push请求),所以需要使用命令docker tag 镜像名 新的镜像名复制出一份镜像重新打个Tag。

目录
相关文章
|
3天前
|
NoSQL Java Linux
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
122 75
|
25天前
|
Docker 容器
将本地的应用程序打包成Docker镜像
将本地的应用程序打包成Docker镜像
|
9天前
|
NoSQL PHP MongoDB
docker push推送自己搭建的镜像
本文详细介绍了如何搭建和复盘两个Web安全挑战环境:人力资源管理系统和邮件管理系统。首先,通过Docker搭建MongoDB和PHP环境,模拟人力资源管理系统的漏洞,包括nosql注入和文件写入等。接着,复盘了如何利用这些漏洞获取flag。邮件管理系统部分,通过目录遍历、文件恢复和字符串比较等技术,逐步绕过验证并最终获取flag。文章提供了详细的步骤和代码示例,适合安全研究人员学习和实践。
33 3
docker push推送自己搭建的镜像
|
13天前
|
Docker 容器
Docker 镜像加速器配置指南
dockerhub加速器失败,使用第三方加速器
|
25天前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
48 9
|
25天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
32 5
|
1天前
|
开发工具 Docker 容器
Docker 镜像加速器配置指南
dockerhub加速器失败,使用第三方加速器
|
25天前
|
存储 缓存 运维
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像。此机制减少存储占用,提高构建和传输效率。Docker还通过缓存机制提升构建和运行效率,减少重复工作。文章深入解析了Docker镜像分层存储与缓存机制,包括具体实现、管理优化及实际应用案例,帮助读者全面理解其优势与挑战。
43 4
|
4月前
|
存储 安全 Ubuntu
Docker 镜像与 Docker 容器的区别
【8月更文挑战第27天】
386 5

热门文章

最新文章