【docker】如何编写dockerfile文件,构建docker镜像

如何编写dockerfile文件,构建docker镜像

  • [一、docker 镜像与 dockerfile](#一、docker 镜像与 dockerfile)
    • [1.1 什么是Docker镜像](#1.1 什么是Docker镜像)
    • [1.2 Docker 镜像的结构](#1.2 Docker 镜像的结构)
  • [二、dockerfile 中常用的构建指令](#二、dockerfile 中常用的构建指令)
  • [三、dockerfile 内容示例](#三、dockerfile 内容示例)
  • [四、构建 docker 镜像](#四、构建 docker 镜像)

一、docker 镜像与 dockerfile

1.1 什么是Docker镜像

Docker镜像是一个打包好的文件,里面包含了我们要运行的命令、应用程序,以及命令或者应用程序运行所需要的运行环境,例如配置文件,环境变量,文件系统等。

1.2 Docker 镜像的结构

  • 镜像结构分层(layer),镜像的层可以被复用,避免文件存储上的冗余,节省磁盘空间,可以使用 docker inspect 命令查看镜像的分层情况;
  • dockerfile中每个指令都会产生一个镜像层,所以在编写 dockerfile 时尽量精简合并指令,避免生成的镜像过于冗余臃肿;
  • Docker镜像的构建是在 Docker Daemon 上完成的,运行 docker build 命令后,Docker客户端会把指令信息和构建上下文内的所有文件打包上传到 Docker Daemon 中进行构建。

二、dockerfile 中常用的构建指令

  • FROM: 指定构建镜像时使用的基础镜像;
  • CMD: 指定启动容器时执行的命令;
  • COPY:将指定文件/文件夹复制到指定目录;
  • RUN: 用于指定执行Linux命令或者脚本;
  • ARG: 创建变量,创建的变量仅在镜像构建过程中可用;
  • ENV: 创建环境变量,创建的变量不仅在镜像构建过程中可用,在容器的运行期间也可用;
  • EXPOSE:声明容器对外暴露的端口号;
  • MAINTAINER: 指定镜像维护者信息,姓名、邮箱等;
  • WORKDIR:指定在创建容器后,从宿主机进入容器时的默认目录;

三、dockerfile 内容示例

dockerfile 复制代码
# 使用 Ubuntu 20.04镜像作为基础镜像
FROM ubuntu:20.04

# 设置工作目录
WORKDIR /home/workspace

# 指定镜像维护者信息
MAINTAINER fuyou<2394xxxx@qq.com>
 
# 复制应用程序到镜像中
COPY run.sh /tmp/app/
 
# 安装应用程序所需的依赖
RUN apt update && apt install -y python3 && apt install -y vim
 
# 设置环境变量
ENV APP_ENV production
 
# 容器启动时运行的命令
CMD ["python3", "run.py"]

EXPOSE 8088

四、构建 docker 镜像

在安装了docker运行环境的Linux终端中,执行命令docker build -f dockerfile.txt -t testApp:1.0.0 /home/workspace

docker build: 构建docker镜像指令主体;

-f ${filename}: 指定构建镜像时使用的dockerfile文件。可忽略不写,此时默认使用名为Dockerfile的dockerfile文件;

-t ${imageName}: 指定构建产生的镜像名称及版本;

/home/workspace : 构建上下文,用于存放构建docker镜像时所需要的所有文件等资源,在镜像构建过程中会把构建上下文中所有的文件或者目录都进行打包。所以指定的构建上下文不用存放其他的文件等资源。

相关推荐
白菜欣11 分钟前
Linux权限
linux·运维·c++
卵男(章鱼)18 分钟前
系统终端命令对比大全(Linux发行/macOS/Windows)
linux·运维·服务器·windows·macos
草明22 分钟前
Linux主流发行版全面修复Spectre/Meltdown后续漏洞
linux·运维·服务器
HABuo24 分钟前
【linux网络(一)】初识网络, 理解协议&四层网络模型&网络传输流程
linux·运维·服务器·网络·c++·ubuntu·centos
SNOWPIAOP25 分钟前
从MAC电脑复制qwen3.5:4b 的OLLAMA模型到LINUX电脑实践
linux·运维·macos·manifest·ollama·blobs
cui_ruicheng34 分钟前
Linux文件系统(三):VFS 结构与软硬链接详解
linux·运维·服务器
mmWave&THz35 分钟前
传统微波IDU与数字IP微波ODU扩展单元(数字微波IDU)技术对比分析
大数据·运维·网络·tcp/ip·系统架构·信息与通信·智能硬件
IMPYLH37 分钟前
Linux 的 sha384sum 命令
linux·运维·服务器·网络·bash·哈希算法
余衫马38 分钟前
在 Windows 服务中托管 ASP.NET Core Web API (.net6)
运维·windows·后端·asp.net·.net
计算机安禾39 分钟前
【Linux从入门到精通】第11篇:进程管理入门——认识正在运行的“灵魂”
linux·运维·服务器