三天入门 Docker - 第二天:Dockerfile 基本介绍与使用

简介: Dockerile 是由一组指令组成的文件,其中每条指令对应Linux中的一条命令,并且支持以舂开头的注释行;一般来说,Dockerfile结构大致分为四个部分:基础镜像、维护者信息、镜像操作指令和容器启动时的运行命令。

Dockerfile基本介绍与使用



前言


—、Dockerfile介绍


二、使用Dockerfile 实现自建镜像


1.自建Nginx镜像

2.自建Tomcat镜像


前言



在日常工作中,大家应该都或多或少的使用过很多镜像,但是不知道大家在使用的时候,有没有想过我们使用的镜像,是如何生成的,以及镜像里面的环境信息等。其实啊,不管是在哪拉取的镜像,这些镜像都是由Dockerfle提前构建好的,并且镜像里面的一些环境信息都是由镜像作者自己配置的。所以说在有些情况下,我们自己使用Dockerfile 来构建的镜像,效果可能更好。


一、Dockerfile介绍



Dockerile 是由一组指令组成的文件,其中每条指令对应Linux中的一条命令,并且支持以舂开头的注释行;一般来说,Dockerfile结构大致分为四个部分:基础镜像、维护者信息、镜像操作指令和容器启动时的运行命令。Dockerfile 官方介绍


我们前面说的Docker是由一系列的层组成,这里的层,就是我们Dockerfle文件中运行的指令,每条指令相当于说都是一个层,并且会进行累加,也就是说,当我们运行的指令过多时,生成出来的镜像便会很大。


Dockerfile常见的操作指令:


image.png


二、使用Dockerfile 实现自建镜像



准备工作:


image.png


  • 这里博主直接使用的是前面文章中的 Docker 环境:传送门


1.自建Nginx镜像


1)编写Dockerfile文件


[root@Docker ~]# mkdir nginx
[root@Docker ~]# cd nginx/
[root@Docker nginx]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
[root@Docker nginx]# vim Dockerfile
# 配置基础镜像
FROM dadoha/centos7.4.1708
# 配置作者信息
MAINTAINER [河北彭于晏]
# 安装相关软件包
RUN yum clean all && yum -y install proc-devel net-tools gcc zlib zlib-devel make openssl-devel wget
# 将 Nginx 软件包传到容器中
ADD nginx-1.18.0.tar.gz /usr/src/
# 配置工作目录
WORKDIR /usr/src/nginx-1.18.0/
# 进行编译安装
RUN ./configure --prefix=/usr/local/nginx && make && make install
# 开启端口
EXPOSE 80 443
# 修改 Nginx 配置文件. 以非 Daemon(后台) 方式启动
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
# 复制启动脚本
COPY run.sh /
RUN chmod 755 /run.sh
# 运行启动脚本
CMD ["/run.sh"]


2)配置启动脚本


[root@Docker nginx]# cat <<END > run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
END


3)生成镜像


[root@Docker nginx]# docker build -t nginx:1.18 .


4)启动容器并验证


[root@Docker nginx]# docker images | grep 1.18
[root@Docker nginx]# docker run -d --name Nginx -p 31888:80 nginx:1.18


image.png


2.自建Tomcat镜像


1)下载相关软件包


[root@Docker ~]# mkdir tomcat
[root@Docker ~]# cd tomcat
[root@Docker tomcat]# ls
apache-tomcat-8.5.32.tar.gz  jdk-8u181-linux-x64.tar.gz


2)编写Dockerfile文件


[root@Docker tomcat]# vim Dockerfile
FROM dadoha/centos7.4.1708
MAINTAINER [河北彭于晏]
ADD jdk-8u181-linux-x64.tar.gz /usr/local/
ENV JAVA_HOME /usr/local/jdk1.8.0_181
ENV PATH $PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
ENV CLASSPATH $JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
ADD apache-tomcat-8.5.32.tar.gz /usr/local/
EXPOSE 8080
ADD run.sh /
RUN chmod 755 /run.sh
CMD ["/run.sh"]


3)配置启动脚本


[root@Docker tomcat]# cat <<END > run.sh
#!/bin/bash
/usr/local/apache-tomcat-8.5.32/bin/startup.sh
tailf /run
END


4)生成镜像


[root@Docker tomcat]# docker build -t tomcat:8.5.32 .


5)启动容器并验证


[root@Docker tomcat]# docker run -d --name tomcat -p 8888:8080 tomcat:8.5.32


image.png

相关文章
|
4月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
191 2
|
3月前
|
NoSQL Java Linux
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
304 76
|
3月前
|
Ubuntu 应用服务中间件 nginx
docker入门-快速学会docker
本文介绍了Docker的基本概念,包括镜像、容器、tar文件、Dockerfile和仓库,并通过实际操作演示了如何使用Docker。从拉取Nginx镜像、运行容器、修改容器内容、保存容器为新镜像,到使用Dockerfile构建自定义镜像,最后讲解了如何保存和恢复镜像。文中还推荐了一个在线实践平台Play with Docker,方便读者快速上手Docker。
381 5
docker入门-快速学会docker
|
4月前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
3654 12
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
3月前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
91 9
|
4月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
4月前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
4月前
|
应用服务中间件 PHP nginx
Docker-compose 编排lnmp(dockerfile) 完成Wordpress
通过使用Docker Compose,我们可以轻松编排LNMP环境并部署WordPress。本文详细介绍了各组件的Dockerfile和配置文件编写,并通过docker-compose.yml文件实现了整个环境的自动化部署。这种方法不仅简化了部署过程,还提高了环境的可移植性和一致性。希望本文能帮助你更好地理解和使用Docker Compose来管理和部署复杂的应用程序。
238 4
|
4月前
|
运维 持续交付 虚拟化
docker入门详解!!!
本文介绍了容器技术的发展历程,从物理机到虚拟化再到容器化,重点讲解了Docker的诞生及其优势。Docker通过轻量级的容器技术,实现了资源的高效利用、快速启动、环境一致性、持续交付和部署等优点。文章还详细解析了Docker的架构和工作原理,包括Docker Daemon、REST接口、Docker Client等组件,以及容器与虚拟机的差异。
162 2
|
4月前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
91 3