目录

镜像 vs 容器

概念

关系

实际例子

生命周期关系

实际工作流程

1.开发阶段

2.部署阶段

Docker打包流程

dockerfile的作用

部署.tar文件的完整流程

删减镜像中的文件


镜像 vs 容器

概念

1.镜像=模版/蓝图

        镜像就像是一个房子的设计图纸

        它包含了所有需要的东西,但还没有"建造"出来

        镜像本身不能运行,只是静态的文件

2.容器=实际运行的实例

        容器就像是根据图纸实际建造出来的房子

        它是镜像的运行实例

        容器是动态的,可以启动、停止、删除

关系

1.一对多关系

1个镜像->可以创建多个容器

      2.创建过程

      1>现有镜像

              docker images

      2>基于镜像创建容器

              docker run -d --name app1 people-counting:openeuler

              docker run -d --name app2 people-counting:openeuler

              docker run -d --name app3 people-counting:openeuler

      3>查看容器

              docker ps

      实际例子

      场景1:开发环境

      1>有一个镜像

              Docker images

      2>创建开发容器

              docker run -d --name dev-app people-counting:openeuler

      3>创建测试容器

              docker run -d --name test-app people-counting:openeuler

      4>两个容器都基于同一个镜像,但独立运行

      场景2:生产环境

      1>同一个镜像

              docker images

      2>创建多个生产实例

              docker run -d -p 8001:8000 --name prod-app-1 people-counting:openeuler

              docker run -d -p 8002:8000 --name prod-app-2 people-counting:openeuler

              docker run -d -p 8003:8000 --name prod-app-3 people-counting:openeuler

      3>负载均衡,多个实例提供服务

      生命周期关系

      1.镜像创建容器(基于镜像创建容器)

              docker run -d --name my-app people-counting:openeuler

      2.容器停止后(容器停止,但镜像还在)

              docker stop my-app

              docker images  # 镜像还在

               docker ps -a   # 容器还在,但状态是停止

      3.容器删除后(删除容器,镜像还在)

              docker rm my-app

              docker images  # 镜像还在

              docker ps -a   # 容器被删除了

      4.镜像删除后(删除镜像,基于它的容器会受影响)

              docker rmi people-counting:openeuler

              如果还有容器在使用这个镜像,会报错

      实际工作流程

      1.开发阶段

              1>构建镜像

                      docker build -t my-app:latest .

              2> 测试容器

                      docker run -d --name test my-app:latest

              3>修改代码,重新构建镜像

                      docker build -t my-app:v2.0 .

              4>创建新版本容器

                      docker run -d --name test-v2 my-app:v2.0

      2.部署阶段

              1>从镜像仓库拉取镜像

                      docker pull my-app:latest

              2>创建生产容器

                      docker run -d -p 8000:8000 --name prod my-app:latest

              3>监控容器状态

                      docker ps

                      docker logs prod

      Docker打包流程

      1.构建镜像

              Docker build -t your-project:latest .

      2.查看镜像

              Docker images

      3.保存镜像为tar文件

              Docker save -o your-project.tar your-project:latese

      4.加载镜像

              Docker load -i your-project.tar

      dockerfile的作用

      1.定义镜像构建过程

              Dockerfile就像是一个“菜谱”,告诉docker如何一步步构建你的应用镜像

      2.自动化部署

              有了dockerfile,任何人都可以:

              用相同的环境运行你的应用

              不需要手动安装依赖

              确保环境一致性

      3.版本控制

              DockerFile 可以:

              记录应用的完整环境配置

              支持版本回滚

              便于团队协作

      当运行docker build -t my-app

      Docker 会:

      1. 读取dockerFile
      2. 按顺序执行每个指令
      3. 为每个指令创建新的层
      4. 最终生成一个完整的镜像

      部署.tar文件的完整流程

      1.加载镜像文件

              Docker load -i people-counting.tar

              或者指定镜像名称

              Docker load -i people-counting.tar -t people-counting:openeuler

      2.查看加载的镜像

              Docker images

      3.运行容器

              #基本运行命令

              docker run -d --name people-counting-app people-counting:openeuler

              # 带端口映射的运行

              docker run -d -p 8000:8000 --name people-counting-app people-counting:openeuler

      4.检查容器状态

              查看运行中的容器                    docker ps

              查看所有容器(包括停止的)  docker ps -a

              查看容器日志   docker logs people-counting-app

              实时查看日志   docker logs -f people-counting-app

      5.测试应用

              测试健康检查接口

      删减镜像中的文件

      1.启动->docker   docker --version

      2.加载镜像->docker load -i people-counting_openeuler.tar

      3.查看镜像->docker images

      4.进入镜像容器内部,查看里面的文件结构

               docker run -it people-counting:openeuler bash

      5.查看当前目录文件->ls -la

      6.删除多余的文件->rm dockerfile2

      7.删除空的目录->rmdir data

      如果想保存这些删除操作到镜像中,

      1.退出容器->exit

      2.提交容器更改到镜像

              docker commit 525f49a92bdd people-counting:openeuler-cleaned

      3.验证新镜像->Docker images

      4.保存镜像为tar文件->Docker save -o your-project.tar your-project:latese

      更多推荐