Dockerfile生成镜像

Dockerfile生成镜像

一 背景

以前创建docker镜像时,习惯拉一个简单镜像,然后在上面配置修改,再存成镜像。备份几次后发现镜像会变得特别大, 不利于拷贝和维护,因此把相关重要的配置做出Dockerfile.

二 Dockerfile文件

FROM ubuntu:18.04
COPY run.sh /
RUN  chmod 755 /run.sh  &&  apt-get update && apt-get install -y  wget  curl  libssl-dev make python  git  libglib2.0-dev inetutils-ping  net-tools uuid-dev zip vim  default-jre openssh-server openssh-client passwd libpython2.7 libx11-dev libxfixes-dev libxdamage-dev libxcomposite-dev libbz2-dev liblzma-dev libxext-dev libva-dev libvdpau-dev libmpfr-dev openjdk-8-jdk && ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4  &&  sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config  && apt-get clean && apt-get autoclean

ADD CMake-3.18.2.tar.gz /tmp
WORKDIR /tmp/CMake-3.18.2
RUN ./configure && make && make install && rm -rf /tmp/CMake-3.18.2.tar.gz 

WORKDIR /
RUN rm -rf /tmp/CMake-3.18.2 && apt-get install -y npm  && npm install -g n && apt-get -y autoremove npm && n node/12.13.0 && n node/10.11.0
RUN npm config set strict-ssl false  &&  npm config set registry https://registry.npmmirror.com && npm install -g node-gyp@5.0.2 && npm install -g yarn && yarn config set registry https://registry.npmmirror.com && yarn config set electron_mirror https://mirrors.huaweicloud.com/electron/ 

ADD  node-gyp-cache.tar.gz  /tmp
RUN  mkdir -p /root/.cache/node-gyp/ &&  rm -rf /root/.cache/node-gyp/*  &&   mv /tmp/node-gyp-cache/*   /root/.cache/node-gyp/  && rm -rf /tmp/node-gyp-cache.tar.gz && rm -rf /tmp/node-gyp-cache && cp -rf /etc/apt/sources.list  /etc/apt/sources.list_bak

COPY sources.list  /etc/apt/
RUN  apt-get update && apt-get install -y  g++-7-aarch64-linux-gnu gcc-7-aarch64-linux-gnu   g++-7-mips64el-linux-gnuabi64 gcc-7-mips64el-linux-gnuabi64 && ln -sf /usr/bin/aarch64-linux-gnu-g++-7  /usr/bin/aarch64-linux-gnu-g++ && ln -sf /usr/bin/aarch64-linux-gnu-gcc-7  /usr/bin/aarch64-linux-gnu-gcc &&  ln -sf /usr/bin/mips64el-linux-gnuabi64-g++-7  /usr/bin/mips64el-linux-gnuabi64-g++ && ln -sf /usr/bin/mips64el-linux-gnuabi64-gcc-7  /usr/bin/mips64el-linux-gnuabi64-gcc

RUN  apt-get install -y   openjdk-17-jdk   && echo "export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64" >> /etc/profile && echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> /etc/profile

三 相关命令

3.1 创建镜像
docker build -t sdk_202512_ubuntu_18.04:v1 . 
3.2 通过镜像创建容器
sudo docker run -it -p 192.168.140.233:8001:22  --name sdk_package_ohospc_202512  --restart always  -v /home/sharefile:/sharefile   -d  sdk_202512_ubuntu_18.04:v1:v1  /run.sh

<think>好的,我需要回答用户关于如何使用Dockerfile构建Docker镜像的问题。首先,我得回忆一下相关的Docker命令和步骤。记得用户提供的引用中有几个关键点,比如使用docker build命令,还有多阶段构建的例子。 首先,用户需要具体的步骤,所以应该分步骤说明。第一步应该是编写Dockerfile,这里可能需要提到Dockerfile的基本结构和常用指令,比如FROM、WORKDIR、COPY、RUN等。然后,用户需要知道如何运行构建命令,所以需要给出docker build -t的示例,并解释参数的作用。 接下来,用户可能关心如何验证镜像是否构建成功,所以应该提到docker images来列出镜像。还有,运行镜像的命令docker run,以及停止和删除容器、镜像的相关命令也是有用的。用户提供的引用中提到了这些命令,比如docker ps、docker stop、docker rmi等,需要整合进去。 另外,用户提到了多阶段构建的示例,比如引用5中的Node.js和Nginx的例子。可能需要解释多阶段构建的好处,比如减少最终镜像的大小。同时,需要注意优化构建过程,比如使用.dockerignore文件,这在引用4中提到过,要记得包含这一点。 还要确保步骤清晰,语言简洁,避免使用专业术语过多,或者解释清楚术语。比如,解释-t参数是给镜像打标签,后面的.是指Dockerfile所在的上下文路径。此外,可能需要提醒用户要在Dockerfile所在目录执行命令,否则需要指定正确的路径。 最后,常见问题或注意事项也是用户关心的,比如权限问题,缓存问题,或者如何查看构建日志。不过根据用户提供的引用,可能重点放在基本命令和步骤上,但可以简要提到这些优化点。 总结一下,回答的结构应该是先步骤,再命令示例,然后优化建议,最后相关命令列表。同时,引用中的信息要正确标注来源,比如引用1到引用5中的内容需要对应到相应的步骤中,比如docker build命令来自引用1和3,多阶段构建来自引用5,.dockerignore来自引用4,docker history来自引用2。 需要检查是否有遗漏的步骤,比如创建Dockerfile的具体内容,或者是否需要解释每个指令的作用。用户可能需要一个完整的流程,从编写Dockerfile到构建,再到运行,所以每个步骤都需要详细说明,但不过于冗长。 此外,用户的问题是关于使用Dockerfile生成镜像的教程或指南,所以可能需要给出一个简单的Dockerfile示例,比如一个Python应用的例子,如引用1中的示例,或者引用5中的多阶段构建。但用户提供的引用5是Node.js和Nginx的例子,可能更适合作为多阶段构建的示例,而用户可能更关注基础步骤。 总之,整理后的回答应该包括: 1. 创建Dockerfile,给出一个简单示例 2. 构建镜像的命令和参数解释 3. 验证镜像是否成功构建 4. 运行镜像的命令 5. 其他相关命令(停止、删除等) 6. 优化建议,如.dockerignore、多阶段构建 7. 注意事项,如上下文路径、缓存处理 确保每个部分都引用正确的来源,比如构建命令引用1、3,多阶段构建引用5,.dockerignore引用4,docker history引用2。同时,语言要符合中文习惯,使用列表和代码块来增强可读性。</think>### 使用 Dockerfile 构建 Docker 镜像的步骤和命令 #### **1. 编写 Dockerfile** 创建一个名为 `Dockerfile` 的文本文件(无后缀),并根据需求定义构建步骤。以下是一个简单示例(以 Python 应用为例): ```dockerfile # 基础镜像 FROM python:3.9-slim # 设置工作目录 WORKDIR /app # 复制依赖文件并安装 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制项目文件 COPY . . # 暴露端口 EXPOSE 8000 # 启动命令 CMD ["python", "app.py"] ``` **关键指令说明**: - `FROM`:指定基础镜像。 - `WORKDIR`:设置容器内的工作目录。 - `COPY`:将本地文件复制到镜像中。 - `RUN`:执行命令(如安装依赖)。 - `EXPOSE`:声明容器运行时监听的端口。 - `CMD`:定义容器启动时的默认命令[^5]。 --- #### **2. 构建 Docker 镜像** 在 `Dockerfile` 所在目录执行以下命令: ```bash docker build -t my-python-app:latest . ``` **参数说明**: - `-t`:指定镜像名称和标签(格式:`<name>:<tag>`)。 - `.`:表示使用当前目录作为构建上下文(包含 `Dockerfile` 和所需文件)[^1][^3]。 --- #### **3. 验证镜像** 构建完成后,查看本地镜像列表: ```bash docker images ``` 若输出中包含 `my-python-app`,则构建成功。 --- #### **4. 运行镜像** 启动容器并将主机端口映射到容器端口(例如将主机的 8000 端口映射到容器的 8000 端口): ```bash docker run -d -p 8000:8000 my-python-app:latest ``` **常用选项**: - `-d`:后台运行容器。 - `-p`:端口映射(格式:`主机端口:容器端口`)。 --- #### **5. 其他相关命令** | 命令 | 用途 | | --- | --- | | `docker ps` | 查看运行中的容器 | | `docker stop <容器ID>` | 停止指定容器 | | `docker rm <容器ID>` | 删除已停止的容器 | | `docker rmi <镜像名>` | 删除本地镜像 | --- ### **优化建议** 1. **使用 `.dockerignore` 文件** 在 `Dockerfile` 同级目录创建 `.dockerignore`,排除无需复制的文件(如 `node_modules`、`.git`),减少构建上下文大小[^4]。 2. **多阶段构建** 适用于复杂应用(如前端+后端),减少最终镜像体积。示例: ```dockerfile # 第一阶段:构建应用 FROM node:16 AS builder WORKDIR /app COPY . . RUN npm install && npm run build # 第二阶段:生成轻量镜像 FROM nginx:latest COPY --from=builder /app/dist /usr/share/nginx/html EXPOSE 80 ``` 此方式仅保留最终需要的文件,丢弃中间构建环境。 3. **查看构建历史** 分析镜像层结构: ```bash docker history <镜像名> ``` 可追溯各层使用的指令及大小[^2]。 --- ### **注意事项** - **权限问题**:若构建时提示权限错误,可在命令前加 `sudo` 或配置用户组。 - **缓存机制**:Docker 会缓存未更改的层以加速构建,若需强制重新构建,添加 `--no-cache` 参数。 - **调试构建过程**:若构建失败,可通过中间层进入临时容器调试: ```bash docker run -it <中间镜像ID> /bin/bash ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值