当前位置: 首页 > news >正文

Docker使用小结

概念
  • 镜像( 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 Flaskapp = 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

http://www.xdnf.cn/news/374671.html

相关文章:

  • 为什么选择 FastAPI、React 和 MongoDB?
  • vue 组件函数式调用实战:以身份验证弹窗为例
  • 计算机大类专业数据结构下半期实验练习题
  • 【基础IO下】磁盘/软硬链接/动静态库
  • 精品,第21章 Python数据类型详解:字典的入门与进阶总结(DevOps SRE视角)
  • sensitive-word-admin v2.0.0 全新 ui 版本发布!vue+前后端分离
  • T2I-R1:通过语义级与图像 token 级协同链式思维强化图像生成
  • 为什么有了BST了,还要红黑树,红黑树有什么优点
  • OCP开闭原则
  • Xilinx Kintex-7 XC7K325T-2FFG676I 赛灵思 FPGA
  • Kubernetes生产实战(十六):集群安全加固全攻略
  • Visual Studio 2022 远程调试
  • 【字符函数和字符串函数】
  • 类加载机制详解:双亲委派模型与打破它的方式
  • 服务器机架的功能和重要性
  • 遗传算法组卷系统实现(Java版)
  • Linux平台下SSH 协议克隆Github远程仓库并配置密钥
  • Unity.UGUI DrawCall合批笔记
  • Unity Shaders and Effets Cookbook
  • LeetCode 热题 100 138. 随机链表的复制
  • 关键点检测--使用YOLOv8对Leeds Sports Pose(LSP)关键点检测
  • 数学相关使用笔记
  • libbpf.c:46:10: fatal error:‘libelf.h file not found
  • SpringCloud之Eureka基础认识-服务注册中心
  • 使用lldb查看Rust不同类型的结构
  • Java与Go语言对比教程
  • 【计算机视觉】优化MVSNet可微分代价体以提高深度估计精度的关键技术
  • Python_day21
  • 深度学习中的目标检测:从 PR 曲线到 AP
  • 常见音频主控芯片以及相关厂家总结