概念
- 镜像( Image ) :相当于一个 root 文件系统;镜像构建时,分层存储、层层构建;
- 容器( Container ) :镜像是静态的定义,容器是镜像运行时的实体;容器的实质是进程;分层存储;所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录;
- 仓库( Repository ):一个仓库会包含同一个软件不同版本的镜像
常用命令
命令 | 作用 |
---|---|
docker command --help | 查看命令帮助 |
docker ps | 显示正在运行的容器信息 |
docker start CONTAINER ID | 启动已停止的容器 |
docker restart CONTAINER ID | 重启已停止的容器 |
docker logs CONTAINER ID | 查看容器内的标准输出 |
docker stop | 停止容器 |
docker rm | |
docker inspect | 获取容器或镜像的详细信息 |
docker build -t | 使用 Dockerfile 构建镜像 |
docker images | 列出本地存储的所有镜像 |
docker pull | 从 Docker 仓库拉取镜像 |
docker push | 将镜像推送到 Docker 仓库 |
docker exec | 在运行的容器中执行命令 |
docker login | 登录 Docker 仓库 |
docker logout | 登出 Docker 仓库 |
docker info | 显示 Docker 系统的详细信息 |
docker network ls | 列出所有 Docker 网络 |
docker volume ls | 列出所有 Docker 卷 |
Docker镜像制作流程
1.创建工作目录
mkdir test_docker_app
cd test_docker_app
目录结构:
test-flask-app/
├── app.py
└── requirements.txt
app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def test():
return "Test Docker!"
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000)
requirements.txt
flask
2.编写Dockerfile
在test-flask-app/目录下新建Dockerfile文件:
nano Dockerfile
DockerFile内容:
# 使用官方 Python 镜像作为基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 将当前目录下的文件复制到容器中的 /app 目录
COPY . /app
# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt
# 暴露端口
EXPOSE 5000
# 容器启动后运行的命令
CMD ["python", "app.py"]
Ctrl + O :输入文件名DockerFile
Ctrl + X :退出 nano 编辑器
3.构建镜像
在test-flask-app/目录下执行:
docker build -t test-flask-app .
其中:
- -t my-flask-app:给镜像打标签。
- .:表示当前目录是构建上下文。
输出:
[+] Building 23.5s (9/9) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 372B 0.0s
=> [internal] load metadata for docker.io/library/python:3.9-slim 7.7s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 636B 0.0s
=> [2/4] WORKDIR /app 0.3s
=> [3/4] COPY . /app 0.0s
=> [4/4] RUN pip install --no-cache-dir -r requirements.txt 6.9s
=> exporting to image 0.3s
=> => exporting layers 0.3s
=> => writing image sha256:bf19d7bb90c28b356e5e4ac5e31c831fe3495c85731175740dd94352d91be009 0.0s
=> => naming to docker.io/library/test-flask-app
4.查看镜像:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test-flask-app latest bf19d7bb90c2 20 seconds ago 136MB
5.运行容器
docker run -d -p 5000:5000 --name my-flask-container test-flask-app
- -d:后台运行
- -p 5000:5000:将宿主机的 5000 端口映射到容器的 5000 端口
- –name:为容器命名
6. 测试访问
curl http://localhost:5000
打印出:
Test Docker!
或浏览器访问:http://localhost:5000