简介
在日常的工作中,常常需要制作自己的项目的镜像,一般通过以下两种方式制作镜像:Docker commit、Dockerfile
Docker commit 命令
- Docker commit 一般用作从一个运行状态的容器来创建一个新的镜像。定制镜像应该使用Dockerfile来完成。默认commit镜像,对外不做解释,不方便排查问题,可维护性差
- docker commit 容器名 新镜像名:tag
Docker build 命令
- 忽略文件:
.dockerignore
- 指定文件:
docker build -f
- 添加标签:
docker build -t
- 不使用缓存:
docker build --no-cache
- 构建时变量:
docker build --build-arg
- ARG指令变量
演示
[root@moli flask_web]# cat .dockerignore
build-1.txt
Dockerfile*
[root@moli flask_web]# cat Dockerfile-build
FROM python:3.7-alpine
LABEL maintainer="13840453509@163.com"
ARG kdir=/home/wangruixia
# 工作路径设定为
WORKDIR $kdir
# 创建环境变量给 Flask 使用
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
# 复制 app.py 到容器内 /code 目录
COPY ..
# 安装 python 的依赖
RUN pip install flask
# 映射端口
EXPOSE 5000
STOPSIGNAL SIGTERM
# 为容器设置默认启动命令
CMD ["flask", "run"]
[root@moli flask_web]# cat app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'hello world!'
[root@moli flask_web]# cat requirements.txt
flask
redis
[root@moli flask_web]# docker build -t app:v2 -f Dockerfile-build .
Sending build context to Docker daemon 7.168kB
[root@moli flask_web]# docker run -d -p 5000:5000 app:v2
bfe01f61e9c3b3ee50af104c2d808b001c302e28acd8b211f1640af855d5f8b1
此时浏览器访问5000端口可以看到hello world
[root@moli flask_web]# docker exec -it focused_swirles sh
/home/wangruixia # ls
__pycache__ app.py docker-compose.yml requirements.txt
/home/wangruixia # pwd
/home/wangruixia
/home/wangruixia # ls -a
. .. .dockerignore .env __pycache__ app.py docker-compose.yml requirements.txt
[root@moli flask_web]# docker build -t app:v2 -f Dockerfile-build --no-cache .
Sending build context to Docker daemon 7.168kB
[root@moli flask_web]# docker build -t app:v2 -f Dockerfile-build --no-cache --build-arg kdir=/root .