【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。

目录
相关文章
|
14天前
|
缓存 Linux 网络安全
docker的镜像无法下载如何解决?
【10月更文挑战第31天】docker的镜像无法下载如何解决?
453 28
|
10天前
|
存储 关系型数据库 Linux
【赵渝强老师】什么是Docker的镜像
Docker镜像是一个只读模板,包含应用程序及其运行所需的依赖环境。镜像采用分层文件系统,每次修改都会以读写层形式添加到原只读模板上。内核bootfs用于加载Linux内核,根镜像相当于操作系统,上方为应用层。镜像在物理存储上是一系列文件的集合,默认存储路径为“/var/lib/docker”。
|
15天前
|
应用服务中间件 PHP nginx
Docker-compose 编排lnmp(dockerfile) 完成Wordpress
通过使用Docker Compose,我们可以轻松编排LNMP环境并部署WordPress。本文详细介绍了各组件的Dockerfile和配置文件编写,并通过docker-compose.yml文件实现了整个环境的自动化部署。这种方法不仅简化了部署过程,还提高了环境的可移植性和一致性。希望本文能帮助你更好地理解和使用Docker Compose来管理和部署复杂的应用程序。
42 3
|
16天前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
85 2
|
18天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
32 1
|
19天前
|
存储 Java 开发者
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
本文分享了如何通过 jlink 和 jdeps 工具将 Java 基础 Docker 镜像从 674MB 优化至 58MB 的经验。首先介绍了选择合适的基础镜像的重要性,然后详细讲解了使用 jlink 构建自定义 JRE 镜像的方法,并通过 jdeps 自动化模块依赖分析,最终实现了镜像的大幅缩减。此外,文章还提供了实用的 .dockerignore 文件技巧和选择安全、兼容的基础镜像的建议,帮助开发者提升镜像优化的效果。
|
23天前
|
存储 缓存 Java
Java应用瘦身记:Docker镜像从674MB优化至58MB的实践指南
【10月更文挑战第22天】 在容器化时代,Docker镜像的大小直接影响到应用的部署速度和运行效率。一个轻量级的Docker镜像可以减少存储成本、加快启动时间,并提高资源利用率。本文将分享如何将一个Java基础Docker镜像从674MB缩减到58MB的实践经验。
38 1
|
10天前
|
缓存 JavaScript 安全
深入理解Docker镜像构建过程
深入理解Docker镜像构建过程
38 0
|
3月前
|
Docker 容器
在Docker中,Dockerfile有哪些常见指令?
在Docker中,Dockerfile有哪些常见指令?
|
6月前
|
Linux Docker 容器
Docker Dockerfile 语法与指令
Docker Dockerfile 语法与指令
61 0