要制作一个docker镜像,有两种方式:1.通过已有的docker容器创建镜像。2.通过dockerfile创建镜像。
下文是基于已安装docker环境的情况,如果没有安装docker,可先看这篇文章安装:docker使用
方式一:通过已有的docker容器创建
1.通过docker run命令启动容器
使用已存在的镜像启动一个容器
2.进入容器做相应修改
docker exec命令进入容器,做相应的修改,如下载文件、部署应用、配置环境等。
3.docker commit提交修改的镜像
命令格式:
docker commit -m=“描述信息” -a=“作者” 容器id 目标镜像名:[TAG]
示例:
docker commit -m="My web app." -a="dd" e3ceb03fb170 myapp:1.0
提交后,可以通过docker images
查看新的镜像。由于docker镜像的分层设计,每一次修改后提交,会产生新的层,所以新的镜像会比原镜像大。
4.docker run新的镜像
方式二:通过dockerfile创建
1.dockerfile文件介绍
Dockerfile 是一个文本文件,其中包含了一系列命令和参数,用于自动化构建 Docker 镜像。这些命令按照顺序执行,从基础镜像开始,逐层添加文件系统更改和配置,最终生成一个新的镜像。
示例 Dockerfile:
# 使用基础镜像
FROM ubuntu:20.04
# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive
# 更新包列表并安装所需软件
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
# 设置工作目录
WORKDIR /app
# 复制项目文件到容器
COPY . /app
# 安装 Python 依赖
RUN pip3 install -r requirements.txt
# 暴露端口
EXPOSE 80
# 设置启动命令
CMD ["python3", "app.py"]
dockerfile中的每一条命令,都会在镜像中生成新的一层,所以编写命令的时候,需要尽量精简,控制镜像大小。
2.构建镜像
docker build -t myimage:1.0 .
- -t :镜像名:[TAG]
- .:指定构建上下文为当前目录
其他参数:
- -f:指定dockerfile路径。
- -m:设置内存的最大值。
- -q:安静模式,构建成功后只输出镜像 ID,而不会显示详细的构建日志。
- –shm-size:设置 /dev/shm 的大小,默认值为 64MB。
- –squash:在 Docker 1.13 后提供,允许合并镜像的多个层为一个单一的层,以减少最终镜像的大小。
- –no-cache:在构建过程中不使用缓存。默认情况下,Docker 会使用缓存来加速镜像的构建过程。但在某些情况下,可能需要禁用缓存以确保每次构建都是最新的。
- –build-arg:设置构建参数。这些参数可以在 Dockerfile 中使用 ARG 指令来引用。
例如:
docker build --build-arg VERSION=1.0 -t myapp:v1 .
3.运行容器
docker run -d -p 80:80 myimage
推送镜像
镜像制作完成后,可以推送至docker hub,这样其他人也可以下载下来使用。
1.登录docker hub
docker login
之后会让你输入docker hub的账号密码登录。
2.标记镜像
docker tag myimage [用户名]/myimage
- 用户名为docker hub的用户名
3.推送镜像
docker push [用户名]/myimage