Docker镜像的制作
·
什么是Docker镜像?
Docker镜像是一个轻量级、独立的可执行软件包,包含运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。镜像是容器的基础,容器是镜像的运行实例。
准备工作
安装Docker
首先确保你的系统已安装Docker:
Windows/macOS:
下载Docker Desktop并安装
访问官网Docker Desktop
根据需求下载对应安装包安装
Linux (Ubuntu示例):
sudo apt updatesudo apt install docker.iosudo systemctl enable dockersudo systemctl start docker
验证安装
docker --version
docker run 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 8011
2.构建镜像
记得先启动docker
docker build . -t my-app
可以使用docker images命令查看镜像是否构建成功
3. 运行容器
docker run -p 50001:8011 my-app
请求接口后发现可以请求到接口(50001是对外暴露接口,8011是部署服务在容器内的端口)
方法二:从现有容器创建镜像
1. 运行基础容器
docker run -it ubuntu:20.04 /bin/bash
2. 在容器内安装软件
在容器内部执行
apt update
apt install -y nginx
exit
3. 提交更改
# 获取容器ID
docker ps -a
# 提交为新镜像
docker commit <container_id> my-nginx-image
深入理解Dockerfile指令
常用指令详解
FROM
指定基础镜像:
dockerfile
FROM ubuntu:20.04
FROM python:3.9-alpine
FROM node:18
RUN
执行命令:
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/src
WORKDIR
设置工作目录:
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 --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
使用ARG和ENV
dockerfile
ARG APP_VERSION=latest
ENV APP_VERSION=${APP_VERSION}
# 构建时传递参数
# docker build --build-arg APP_VERSION=1.0.0 -t myapp .
镜像管理
查看镜像
docker images
docker image ls
给镜像打标签
docker tag my-app myregistry.com/my-app:v1.0
推送镜像到仓库
docker login
docker push myregistry.com/my-app:v1.0
删除镜像
docker rmi my-app
docker image prune # 清理悬空镜像
调试技巧
检查镜像层次
docker history my-app
交互式运行
docker run -it my-app /bin/bash
查看容器日志
docker logs <container_id>
常见问题解决
1. 镜像构建太慢
- 使用.dockerignore文件
- 合理利用Docker缓存层
- 使用更小的基础镜像
2. 镜像太大
- 使用多阶段构建
- 选择alpine或slim版本的基础镜像
- 清理不必要的文件
权限问题
- 在Dockerfile中创建非root用户
- 正确处理文件权限
更多推荐



所有评论(0)