docker学习:dockerfile和docker-compose

2023-09-14 22:13:28

学习如何使用dockerfile

以下内容,部分来自gpt生成,里面的描述可能会出现问题,但代码部分,我都会进行测试。

1. 需求

对于一个docker,例如python,我们需要其在构建成容器时,就有np。有以下两种方法:

  1. pull python,并run后,在里面pip install numpy,随后对这个容器进行打包保存
  2. 在pull python时,就将pip install numpy一起运行,run的时候,就有numpy了。

2. dockerfile和docker-compose

说明:为了实现上述的功能,dockerfile用于定义并构建单一Docker镜像的指令脚本,即pull;docker-compose用于定义和运行多容器Docker应用程序的工具和配置文件,提供统一的方式run。
Dockerfile:
目的:Dockerfile用于定义单个容器的内容和配置。它提供了一种方式来从头开始创建一个新的Docker镜像,或基于现有的Docker镜像定制一个新的镜像。
主要操作:定义、构建和配置一个Docker容器。 示例用途:安装软件、设置环境变量、定义工作目录、设置入口点等。 用法:使用docker
build命令从Dockerfile创建一个新的Docker镜像。
docker-compose:
目的:docker-compose用于定义和运行多容器Docker应用程序。它提供了一个声明式的方式来定义一组相关联的容器、它们之间的网络、卷和其他配置。
主要操作:定义、连接和管理多个容器。
示例用途:在本地开发环境中运行多服务应用(如前端、后端和数据库)、设置服务之间的网络连接、定义和挂载卷等。
用法:使用docker-compose up命令根据docker-compose.yml文件启动服务。

3. Dockerfile

使用Dockerfile,实现python with numpy

  1. 创建一个Dockerfile,名字需要严格要求
# 使用python:latest作为基础镜像
FROM python:latest

# 安装numpy
RUN pip install numpy
  1. 将上述内容创建一个镜像
# docker build -t image-name:latest <Dockerfile的路径>
docker build -t py-with-np:v1 .
# 使用 docker images查看已有镜像
  1. 运行上述docker
docker run -it -v /opt/appdata/python:/py --name pytest py-with-np:v1
# 使用docker ps -a查看运行的容器

4. docker-compose

上述的dockerfile,只能先创建images,再运行,并不优雅。
docker-compose就是解决这个问题的

  1. 创建 Dockerfile:
# 使用python:latest作为基础镜像
FROM python:latest

# 安装numpy
RUN pip install numpy

  1. 创建 docker-compose.yml:

简单版本,运行后直接启动python

version: '3'

services:
  hello-service:
    build:
      context: .
      dockerfile: Dockerfile
    image: py-with-np:v6
    volumes:
      - /opt/appdata/python:/py
    ports:
      - "8080:8080"
    command: python /py/test.py
    stdin_open: true
    tty: true

解释
: build: . 指示 docker-compose 根据当前目录下的 Dockerfile 构建 Docker 镜像。 image:
py-with-np:v1 指定构建的镜像的名称和标签。 volumes 是一个卷映射,与之前 docker run 命令中的 -v
参数相同。
如果你想在 docker-compose 中运行容器并保持其交互性,例如一个交互式 Python shell,你应该在 docker-compose.yml 文件中添加一个 stdin_open 和 tty 属性,这两个属性都设置为 true。这与 docker run 的 -i 和 -t 选项相对应。

  1. 使用 docker-compose 运行容器:

首先,在命令行中转到 docker-compose.yml 所在的目录。接着,使用以下命令启动服务:

docker-compose up --build

docker-compose up 启动服务。
–build 参数确保在运行服务之前构建或重新构建服务的镜像。
在这里插入图片描述

4. 问题

-it怎么办?
由于在docker-compose.yml中添加了 stdin_open: true tty: true,但仍然不能够启动
只能用用docker run -it 镜像名,暂且用用了

5. 删除不必要的image和container

# 查看容器
docker ps -a
# 停止容器
docker stop ID
# 删除容器
docker rm ID
# 查看镜像
docker images
# 删除镜像
docker rmi ID  # 但是可能两个images有相同的ID
docker rmi name:V1

更多推荐

html学习综合案例1

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>个人简介</title></head><body><h1>尤

【c++&GDAL】IHS融合

【c++&GDAL】IHS融合基于IHS变换融合,实现多光谱和全色影像之间的融合。IHS分别指亮度(I)、色度(H)、饱和度(S)。IHS变换融合基于亮度I进行变换,色度和饱和度空间保持不变。IHS融合步骤:(1)将多光谱RGB影像变换到IHS空间;(2)基于一定融合规则使用亮度分量I与全色影像进行变换,得到新的全色I

WebGL 选中物体

目录前言如何实现选中物体示例程序(PickObject.js)代码详解gl.readPixels()函数规范示例效果前言有些三维应用程序需要允许用户能够交互地操纵三维物体,要这样做首先就得允许用户选中某个物体。对物体进行选中操作的用处很广泛。比如,让用户选中三维用户界面上的一个按钮,或者让用户选中三维场景中的多张照片中

提升前端开发效率:基于vue的van-radio-group组件封装指南

前言vant作为一款流行的ui框架,其中,van-radio-group组件是一个常用的单选框组件,但有时我们需要根据项目需求进行定制化封装。本文将介绍如何基于vue框架封装van-radio-group组件,让我们一起来探索吧!封装文件在这个组件中,使用了vant框架提供的van-radio-group和van-ra

Linux-网卡和网络配置

链接一篇大佬的博客:Linux之手把手教会修改网卡名称文章目录修改网卡名称步骤1:修改“/etc/default/grub”步骤2:修改“/etc/sysconfig/network-scripts”下的文件步骤3:修改“ifcfg-eth0”配置步骤4:判断操作系统的引导模式步骤5:根据不同的引导模式重新读取配置文件

el-table 列背景色渐变

最初的想法是,给每一行添加背景色,逐行递减透明度,发现结果比较突兀,效果如下:如果有需要这种样式的,代码如下:<template><div><el-table:data="tableData":header-cell-style="headerCellStyle":cell-style="cellStyle"style

Redis Part1

单体架构:一台Web服务器、一台数据库服务器。回顾,关系型数据库:基于二维表来存储数据的数据库就是关系型数据库。MySQL跟Redis的区别:MySQL是关系型数据库,它是基于表来存储数据的,MySQL数据是写在磁盘的,它是跟磁盘进行交互的;Redis是非关系型数据库,它是把数据存储在内存当中的,是跟内存进行交互的。M

Go基础语法:数组

6数组6.1数组的定义数组在定义时就需要声明其元素数量和类型://T即元素类型var数组变量名[元素数量]T如:vara[5]int.数组的长度必须是常量,并且长度是数组类型的一部分,一旦定义,长度不能变。所以,[5]int和[10]int是不同的类型。packagemainimport"fmt"funcmain(){

功能基础篇3——Python中的输入输出、文件读写、序列化

IO文件读写openopen()为内置函数,用于读写文件mode读写x,create,创建,文件存在报错,可写不可读r,read,读入,默认读写方式,文件不存在报错,可读不可写w,write,写入,文件不存在会创建文件,存在清空文件内容,可写不可读a,append,追加,文件不存在会创建文件,光标移至文件末尾,可写不可

CentOS常用命令

一、yum命令1.1列表源服务器软件包yumlist//列出yum源服务器上所有的软件包,太多了,一般不单独使用,大多数要配合管道grep使用yumlistopenssl*//列出yum源服务器上所有以openssl开头的软件包yumlist|grepopenssl//列出yum源服务器上所有包含openssl的软件包

实时可追溯性和事后可追溯性

在当今的世界里,成功的组织都将其创新和复杂产品开发流程建立在跨多个工作流的互联数据上。为此,他们需要收集利益相关者的想法以构建系统架构,管理高级需求以创建详细的用户故事,并实施验证程序以检查问题。同时,在满足标准规定并在当前的市场环境中保持竞争力的过程中,与各利益相关者的协作需要深度的追踪。许多行业标准都要求有需求追踪

热文推荐