Docker镜像的制作
什么是Docker镜像Docker镜像是一个轻量级、独立的可执行软件包包含运行应用程序所需的一切代码、运行时、系统工具、系统库和设置。镜像是容器的基础容器是镜像的运行实例。准备工作安装Docker首先确保你的系统已安装DockerWindows/macOS:下载Docker Desktop并安装访问官网Docker Desktop根据需求下载对应安装包安装Linux (Ubuntu示例):sudoaptupdatesudoaptinstalldocker.iosudo systemctlenabledockersudo systemctl startdocker验证安装docker--versiondockerrun hello-world创建你的第一个Docker镜像方法一使用Dockerfile推荐1.创建Dockerfile进行项目所在文件创建文件重命名为Dockerfile以node项目为例dockerfile # 基础镜像 FROM node:18 #复制源码 ADD . /my-app # 设置工作目录 WORKDIR /my-app # 安装依赖 RUN npm install npm install -g nodemon # 运行应用 CMD nodemon db-serve.js # 暴露端口服务启动端口 EXPOSE 80112.构建镜像记得先启动dockerdockerbuild.-tmy-app可以使用docker images命令查看镜像是否构建成功3. 运行容器dockerrun-p50001:8011 my-app请求接口后发现可以请求到接口50001是对外暴露接口8011是部署服务在容器内的端口方法二从现有容器创建镜像1. 运行基础容器dockerrun-itubuntu:20.04 /bin/bash2. 在容器内安装软件在容器内部执行aptupdateaptinstall-ynginxexit3. 提交更改# 获取容器IDdockerps-a# 提交为新镜像dockercommitcontainer_idmy-nginx-image深入理解Dockerfile指令常用指令详解FROM指定基础镜像dockerfile FROM ubuntu:20.04 FROM python:3.9-alpine FROM node:18RUN执行命令dockerfile # shell格式 RUN apt update apt install -y python3 # exec格式推荐 RUN [apt, update]COPY vs ADD复制文件dockerfile # 复制本地文件到镜像 COPY . /app # ADD可以自动解压tar文件和从URL下载 ADD https://example.com/file.tar.gz /tmp/CMD vs ENTRYPOINT定义启动命令dockerfile # CMD可以被docker run覆盖 CMD [python, app.py] # ENTRYPOINT作为主要可执行文件 ENTRYPOINT [python] CMD [app.py]ENV设置环境变量dockerfile ENV APP_HOME/app ENV PYTHONPATH/app/srcWORKDIR设置工作目录dockerfile WORKDIR /app.dockerignore文件创建.dockerignore来排除不必要的文件text .git .gitignore README.md Dockerfile .dockerignore __pycache__ *.pyc *.pyo *.pyd .env高级技巧多阶段构建dockerfile # 构建阶段 FROM node:18 as build WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # 生产阶段 FROM nginx:alpine COPY --frombuild /app/dist /usr/share/nginx/html EXPOSE 80 CMD [nginx, -g, daemon off;]使用ARG和ENVdockerfile ARG APP_VERSIONlatest ENV APP_VERSION${APP_VERSION} # 构建时传递参数 # docker build --build-arg APP_VERSION1.0.0 -t myapp .镜像管理查看镜像dockerimagesdockerimagels给镜像打标签dockertag my-app myregistry.com/my-app:v1.0推送镜像到仓库dockerlogindockerpush myregistry.com/my-app:v1.0删除镜像dockerrmi my-appdockerimage prune# 清理悬空镜像调试技巧检查镜像层次dockerhistorymy-app交互式运行dockerrun-itmy-app /bin/bash查看容器日志dockerlogscontainer_id常见问题解决1. 镜像构建太慢使用.dockerignore文件合理利用Docker缓存层使用更小的基础镜像2. 镜像太大使用多阶段构建选择alpine或slim版本的基础镜像清理不必要的文件权限问题在Dockerfile中创建非root用户正确处理文件权限
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2452502.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!