【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天前
|
存储 安全 持续交付
【Docker 专栏】Docker 镜像的版本控制与管理
【5月更文挑战第9天】本文探讨了Docker镜像版本控制与管理的重要性,包括可重复性、回滚能力、协作开发和持续集成。常用方法有标签、构建参数和版本控制系统。管理策略涉及定期清理、分层管理和镜像仓库。语义化标签、环境变量和配置文件在版本控制中有应用。版本系统与Docker结合能跟踪历史和促进协作。注意点包括优化镜像大小、确保安全性和兼容性。案例分析和未来趋势展示了持续发展的镜像管理技术,为Docker应用的稳定与进步保驾护航。
【Docker 专栏】Docker 镜像的版本控制与管理
|
2天前
|
消息中间件 网络协议 Linux
用docker方式 安装rabbitmq 并配置MQTT
用docker方式 安装rabbitmq 并配置MQTT
|
3天前
|
运维 安全 Docker
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
【5月更文挑战第9天】Docker技术在软件开发和部署中带来便利,但其镜像安全问题不容忽视。本文探讨了Docker镜像安全扫描与漏洞修复,强调了镜像安全对应用和系统的重要性。文中介绍了静态和动态扫描方法,列举了软件漏洞、配置漏洞和恶意软件等常见安全问题,并提到了Clair和Trivy等扫描工具。修复策略包括更新软件、调整配置和重建镜像。此外,加强安全意识、规范镜像制作流程和定期扫描是管理建议。未来,将持续面对新的安全挑战,需持续研究和完善安全技术。
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
|
4天前
|
Java Linux 数据安全/隐私保护
Docker自定义JDK镜像并拉取至阿里云镜像仓库全攻略
Docker自定义JDK镜像并拉取至阿里云镜像仓库全攻略
|
4天前
|
存储 弹性计算 运维
Docker数据集与自定义镜像:构建高效容器的关键要素
Docker数据集与自定义镜像:构建高效容器的关键要素
|
4天前
|
存储 缓存 运维
【Docker 专栏】Docker 镜像的分层存储与缓存机制
【5月更文挑战第8天】Docker 镜像采用分层存储,减少空间占用并提升构建效率。每个镜像由多个层组成,共享基础层(如 Ubuntu)和应用层。缓存机制加速构建和运行,通过检查已有层来避免重复操作。有效管理缓存,如清理无用缓存和控制大小,可优化性能。分层和缓存带来资源高效利用、快速构建和灵活管理,但也面临缓存失效和层管理挑战。理解这一机制对开发者和运维至关重要。
【Docker 专栏】Docker 镜像的分层存储与缓存机制
|
4天前
|
运维 KVM 虚拟化
Docker详解(十五)——Docker静态IP地址配置
Docker详解(十五)——Docker静态IP地址配置
14 3
|
4天前
|
运维 Linux Docker
Docker详解(十三)——Docker容器的内存和磁盘I/O限制配置
Docker详解(十三)——Docker容器的内存和磁盘I/O限制配置
14 1
|
4天前
|
数据库 Docker 容器
【Docker 专栏】使用 Dockerfile 自动化构建 Docker 镜像
【5月更文挑战第8天】Dockerfile是构建Docker镜像的关键,它包含一系列指令,用于描述应用运行环境及所需软件包。通过自动化构建,能提高效率、保证可重复性并提升灵活性。确定基础镜像、安装依赖、设置环境后,执行Dockerfile生成镜像,用于应用程序部署。虽然需要熟悉Docker技术和应用细节,但其带来的益处使其成为现代软件开发和部署的重要工具。
【Docker 专栏】使用 Dockerfile 自动化构建 Docker 镜像
|
5月前
|
Linux Docker 容器
Docker Dockerfile 语法与指令
Docker Dockerfile 语法与指令
29 0