三天入门 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

相关文章
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
23 2
|
1月前
|
Kubernetes Cloud Native 云计算
云原生入门:从Docker到Kubernetes的旅程
【10月更文挑战第2天】本文将带你走进云原生的世界,从基础的Docker容器技术开始,逐步深入到Kubernetes集群管理。我们将通过实际代码示例,探索如何利用这些工具构建、部署和管理现代云应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和技能,让你在云原生领域迈出坚实的一步。
83 5
|
7天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
11天前
|
应用服务中间件 PHP nginx
Docker-compose 编排lnmp(dockerfile) 完成Wordpress
通过使用Docker Compose,我们可以轻松编排LNMP环境并部署WordPress。本文详细介绍了各组件的Dockerfile和配置文件编写,并通过docker-compose.yml文件实现了整个环境的自动化部署。这种方法不仅简化了部署过程,还提高了环境的可移植性和一致性。希望本文能帮助你更好地理解和使用Docker Compose来管理和部署复杂的应用程序。
38 3
|
13天前
|
运维 持续交付 虚拟化
docker入门详解!!!
本文介绍了容器技术的发展历程,从物理机到虚拟化再到容器化,重点讲解了Docker的诞生及其优势。Docker通过轻量级的容器技术,实现了资源的高效利用、快速启动、环境一致性、持续交付和部署等优点。文章还详细解析了Docker的架构和工作原理,包括Docker Daemon、REST接口、Docker Client等组件,以及容器与虚拟机的差异。
49 2
|
20天前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
31 3
|
27天前
|
Docker 容器
docker中使用Dockerfile自动创建数据卷
【10月更文挑战第12天】
18 5
|
25天前
|
Ubuntu Shell 开发者
Docker入门:轻松开始容器化之旅
【10月更文挑战第17天】Docker 是一种开源的应用容器引擎,它让开发者能够“一次构建、到处运行”。Docker 通过容器化技术将应用程序及其依赖打包在一起,从而确保应用在任何环境中都能一致地运行。本文将为新手用户提供一个全面的Docker入门指南,包括基本概念、优势、安装配置以及如何创建和管理容器。
45 2
|
1月前
|
存储 运维 云计算
探索Docker容器化:从入门到实践
在这个快速发展的云计算时代,Docker容器化技术正在改变应用的开发、部署和管理方式。本文旨在为初学者提供一个关于Docker的全面入门指南,并通过实践案例展示Docker在实际开发中的应用。我们将一起了解Docker的核心概念、基本操作、网络和存储,以及如何构建和部署一个简单的Web应用。无论你是开发者还是运维人员,本文都会帮助你快速掌握Docker的核心技能。
|
1月前
|
Kubernetes Cloud Native Docker
云原生入门:Kubernetes和Docker的协同之旅
【10月更文挑战第4天】在这篇文章中,我们将通过一次虚拟的旅行来探索云原生技术的核心——Kubernetes和Docker。就像乘坐一艘由Docker驱动的小船启航,随着波浪(代码示例)起伏,最终抵达由Kubernetes指挥的宏伟舰队。这不仅是一段技术上的旅程,也是理解现代云架构如何支撑数字世界的冒险。让我们扬帆起航,一探究竟!