dockerfile的使用教程

Dockerfile 的使用教程

Docker 是一种轻量级的虚拟化技术,它可以将应用程序及其依赖项打包到一个容器中,从而实现跨平台和可移植性,Dockerfile 是用于构建 Docker 镜像的文本文件,它包含了一系列指令,用于定义容器的基础镜像、安装软件包、配置环境等,本文将详细介绍如何编写和使用 Dockerfile,以及一些常见的问题和解答。

dockerfile的使用教程

Dockerfile 的基本结构

Dockerfile 是一个文本文件,其内容以指令为主,每个指令都对应一个操作,Dockerfile 的基本结构如下:

以注释开始,注释不会被 Docker 执行

FROM <base image>:<tag> 基础镜像,可以指定版本号

RUN <command> 运行命令,可以执行 shell 脚本或命令行工具

COPY <src> <dest> 复制文件或目录,可以指定源路径和目标路径

ADD <src> <dest> 添加文件或目录,与 COPY 类似,但支持自动解压缩

EXPOSE <port> 暴露端口,供外部访问

ENV <key>=<value> 设置环境变量

dockerfile的使用教程

WORKDIR <path> 设置工作目录

CMD <command> 容器启动时执行的命令

ENTRYPOINT <command> 容器启动时的入口点,通常与 CMD 结合使用

常用的 Dockerfile 指令

1、FROM:指定基础镜像,格式为 <image>:<tag>,FROM ubuntu:18.04,如果不指定标签,默认使用 latest 标签。

2、RUN:执行命令,格式为 RUN <command>,RUN apt-get update && apt-get install -y git,可以在 RUN 指令下添加多条命令,用 && 连接。

3、COPY:复制文件或目录,格式为 COPY <src> <dest>,COPY app/config.json /app/config.json,可以使用通配符 * 匹配多个文件。

4、ADD:与 COPY 类似,但支持自动解压缩,格式为 ADD <src> <dest>,ADD app/package.tar.gz /app/package.tar.gz

5、EXPOSE:暴露端口,格式为 EXPOSE <port>,EXPOSE 80,这样在运行容器时,需要使用 -p 参数将容器内的端口映射到宿主机的端口。

dockerfile的使用教程

6、ENV:设置环境变量,格式为 ENV <key>=<value>,ENV MYSQL_ROOT_PASSWORD=mysecretpassword,可以在运行容器时通过 --env-file 参数覆盖这些环境变量。

7、WORKDIR:设置工作目录,格式为 WORKDIR <path>,WORKDIR /app,这样在运行容器内的其他命令时,相对于这个目录进行操作。

8、CMD:容器启动时执行的命令,格式为 CMD ["executable", "param1", "param2"],CMD ["python", "app.py"],如果没有指定命令,默认使用 docker run 命令。

9、ENTRYPOINT:容器启动时的入口点,格式为 ENTRYPOINT ["executable", "param1", "param2"],ENTRYPOINT ["python", "app.py"],与 CMD 的区别在于,当容器启动后,会先执行 ENTRYPOINT 指定的命令,然后再执行 CMD 指定的命令,通常与 CMD 结合使用。

编写 Dockerfile 示例

以下是一个简单的 Dockerfile 示例,用于构建一个基于 Ubuntu 18.04 的 Python Flask 应用:

使用官方的 Python Flask 镜像作为基础镜像
FROM python:3.7-slim-buster AS builder
设置工作目录
WORKDIR /app
将当前目录下的所有文件复制到工作目录
COPY requirements.txt requirements.txt
安装依赖包
RUN pip install --no-cache-dir -r requirements.txt
将当前目录下的所有文件复制到工作目录(包括隐藏文件)
COPY . .
从基础镜像创建一个新的镜像,并将当前镜像的内容复制过去
FROM python:3.7-slim-buster AS final
将最终镜像的基础镜像替换为刚刚创建的镜像
RUN apt-get update && apt-get install --no-install-recommends --no-upgrade 
     ca-certificates=^2015
     curl 
     libffi-dev 
     libssl-dev 
     python3-dev 
     software-properties-common && 
     DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends --no-upgrade 
      git 
      jq 
     && git clone https://github.com/apache/thrift.git && cd thrift && git checkout v0.13.0 && git submodule update --init --recursive && make && sudo make install && cd .. && git clone https://github.com/apache/thrift.git && cd thrift && git checkout v0.13.0 && git submodule update --init --recursive && make && sudo make install && cd .. && git clone https://github.com/apache/thrift.git && cd thrift && git checkout v0.13.0 && git submodule update --init --recursive && make && sudo make install && cd .. && git clone https://github.com/apache/thrift.git && cd thrift && git checkout v0.13.0 && git submodule update --init --recursive && make && sudo make install && cd .. && echo "deb http://archive.ubuntu.com/ubuntu bionic main restricted universe multiverse" > /etc/apt/sources.list 
     && echo "deb http://archive.ubuntu.com/ubuntu bionic-security main restricted universe multiverse" >> /etc/apt/sources.list 
     && echo "deb http://archive.ubuntu.com/ubuntu bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list 
     && echo "deb http://archive.ubuntu.com/ubuntu bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list 
     && echo "deb http://security.ubuntu.com/ubuntu bionic-security main restricted universe multiverse" >> /etc/apt/sources.list 
     && echo "deb http://updates.ubuntu.com/ubuntu bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list 
     && echo "deb http://security.ubuntu.com/ubuntu bionic-security main restricted universe multiverse" >> /etc/apt/sources.list 
     && echo "deb http://updates.ubuntu.com/ubuntu bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list 
     && echo "deb http://security.ubuntu.com/ubuntu bionic-security main restricted universe multiverse" >> /etc/apt/sources.list 
     && echo "deb http://updates.ubuntu.com/ubuntu bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list 
     && echo "deb http://security.ubuntu.com/ubuntu bionic-security main restricted universe multiverse" >> /etc/apt/sources.list 
     && echo "deb http://updates.ubuntu.com/ubuntu bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list 
     && echo "deb http://security.ubuntu.com/ubuntu bionic-security main restricted universe multiverse" >> /etc/apt/sources.list 
     && echo "deb http://updates.ubuntu.com/ubuntu bionic-updates main restricted universe multiverse" >> /etc/apt/sources

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/140475.html

(0)
K-seoK-seoSEO优化员
上一篇 2023年12月18日 08:54
下一篇 2023年12月18日 08:56

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入