允许非 root 用户操作 docker
# 将当前用户添加到 docker 用户组
sudo usermod -aG docker $USER
注意修改完用户组之后需要重新登录才可以生效
一个简单 Flask 应用 Dockerfile
示例
FROM python:3.9.16-alpineEXPOSE 80
WORKDIR /appRUN apk updateCOPY requirements.txt /appRUN pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip3 install -r requirements.txt --no-cache-dirCOPY . .CMD ["python3", "-m", "flask", "run", "--host=0.0.0.0", "--port=80"]
创建 docker image 时排除特定文件
在项目根路径创建文件 .dockerignore
, 效果类似 .gitignore
. 例子:
.git
Dockerfile
.gitignore
.dockerignore
__pycache__/
venv/
README.md
instance/
构建 docker image
docker build -t image_name:latest .
启动 container
# 获取 image ID
docker images# 以交互方式启动, 方便观察输出, Ctrl+C 将会停止容器
docker run -it -p 8000:80 [imageID]# 以 daemon 后台启动
docker run -d -p 8000:80 [imageID]
连接运行中的 container
# 启动新的一个 shell 连接到运行中的容器, 退出 shell 不会停止容器
docker exec -it [containerID] /bin/sh# 直连容器, 可以只管查看实时输出, Ctrl+C 会停止容器
docker attach [containerID]
导出 image 为文件
# 无压缩直接导出
docker save [imageID|imageName] -o xxxx.tar
# 用 gzip 压缩导出
docker save [imageID|imageName] | gzip > xxxx.tar.gz
导入 image 文件
docker load < xxxx.tar.gz