Windows上制作,发布 ,使用Docker镜像!

本文核心内容如题,适合第一次接触Docker的人,其他废话不多少,直接进入主题。

在Windows平台上制作、发布和使用Docker镜像可以按照以下步骤进行。

1. 安装Docker Desktop

要在Windows上运行docker,比较方便的是使用 Docker Desktop。

Docker Desktop 是一个用于在Windows和Mac上开发和运行Docker容器的应用程序。它提供了一个简单的图形界面和命令行工具,使开发者能够轻松构建、共享和运行容器化应用程序。Docker Desktop 集成了Docker Engine、Docker CLI和Docker Compose,支持Kubernetes,并能够无缝运行Linux和Windows容器。

下面就演示下如何安装。

  1. 下载Docker Desktop

直接打开Docker官网,网页会根据你的系统自动显示匹配版本。我们是在Windows上使用,所以就下载Windows的版本。

  1. 安装Docker Desktop

下载完成之后,会获得一个exe的应用程序,直接双击开始安装。

安装过程非常简单,能默认的默认,能下一步的下一步,能跳过的跳过。

  1. 启动Docker Desktop

安装完成之后,会显示“Installation Succeeded”。

同时会有一个关闭并重启的按钮,点击这个按钮重启系统。

然后双击桌面上的Docker Desktop的快捷键,即可启动可视化软件。

2. 创建Dockerfile文件

Dockerfile 是一个包含一系列指令的文本文件,这些指令定义了如何构建一个Docker镜像。它描述了从基础镜像开始,通过安装软件、复制文件和设置配置等步骤,最终生成一个可运行的容器镜像。

为了构建Docker镜像,必须要先配置好Dockerfile。当然我们也需要准备一个简单演示项目。

下面就创建一个演示项目和并编写对应的Dockerfile文件。

  1. 创建一个新目录,例如myapp。

我们需要在这个目录下创建一个最简单的演示项目,比如一个Python程序。

目录下的文件结构如下:

myapp/
├── Dockerfile
├── app.py
├── requirements.txt
  1. 创建一个Python的演示应用。

创建一个名为app.py的文件,在文件中输入一下代码:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, World!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

这是使用flask制作的非常简单的Web应用,启动这个应用之后,可以通过访问本地的5000端口可以打开一个网页,网页上会显示 “Hello, World!”。

  1. 创建一个Python的依赖文件。

Python的依赖文件一般命名为requirements.txt,然后再文件里面添加如下依赖:

Flask==1.1.2
Werkzeug==1.0.1
Jinja2==2.11.3
MarkupSafe==1.1.1
ItsDangerous==1.1.0
Click==7.1.2
  1. 创建一个名为Dockerfile的文件。

在Dockerfile中编写指令,例如:

# 使用官方的Python基础镜像
FROM python:3.8-slim

# 设置工作目录
WORKDIR /app

# 将当前目录内容复制到工作目录中
COPY . /app

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 运行应用程序
CMD ["python", "app.py"]
  • FROM python:3.8-slim 使用官方的Python 3.8精简版基础镜像作为起点。所有的指令都将在这个镜像的基础上执行。
  • WORKDIR /app 设置工作目录为/app。之后的所有命令(例如COPY和RUN)都将在这个目录下执行。如果目录不存在,Docker会自动创建它。
  • COPY . /app 将当前主机目录中的所有文件复制到镜像的工作目录/app中。这通常包括你的应用程序代码和依赖文件。
  • RUN pip install –no-cache-dir -r requirements.txt 在镜像内运行命令来安装Python依赖项。requirements.txt文件中列出了所有需要安装的Python包。–no-cache-dir选项用于防止pip缓存包文件,从而减小镜像体积。
  • CMD [“python”, “app.py”] 指定容器启动时要运行的命令。在这个例子中,它运行Python应用程序app.py。CMD指令定义了容器启动时的默认命令,但可以在运行容器时被覆盖。

3. 构建Docker镜像

构建Docker镜像是指通过一系列步骤创建一个包含应用程序及其所有依赖、配置和运行时环境的只读模板。这个模板被称为Docker镜像,它可以用来生成Docker容器。构建Docker镜像的过程是将应用程序打包成一个可以在任何支持Docker的环境中一致运行的独立单元。

在Dockerfile所在的目录中打开命令提示符或PowerShell,运行以下命令来构建Docker镜像:

docker build -t myapp:latest .

这将创建一个名为myapp的Docker镜像。

  • docker build:是Docker命令,用于根据指定的Dockerfile构建一个新的镜像。
  • -t myapp:-t是–tag的缩写,表示给构建的镜像指定一个标签(tag)。
  • myapp:latest:是镜像的名称和标签。
  • myapp是镜像的名称。
  • latest是镜像的标签,表示这个镜像的版本。标签可以是任何字符串,常见的用法是用来标识版本,如1.0, 2.0等。latest是一个默认常用的标签,表示最新版本。
  • .(点号):表示Dockerfile所在的当前目录,Docker引擎将会在这个目录下寻找名为Dockerfile的文件,并根据其中的指令构建镜像。

命令运行过程中,会调用pip命令安装Python依赖。确保依赖全部安装,如果出现错误,会到之后镜像无法启动。

命令执行成功后,镜像就构建成功了,会创建一个镜像文件。这个文件一般保存在 AppData 下面或者 WSL 2虚拟机的文件系统中。

4. 运行Docker容器

运行Docker容器是指基于一个Docker镜像启动一个或多个隔离的进程。容器是Docker的一个核心概念,它提供了一种轻量级的虚拟化方式,使应用程序可以在隔离的环境中运行,而无需运行完整的虚拟机。

使用以下命令运行Docker容器:

docker run -d -p 5000:5000 myapp:latest

这将启动一个容器并在端口5000上运行。

  • docker run:是Docker命令,用于创建并启动一个新的容器。
  • -d:是–detach的缩写,表示容器将以分离模式(后台模式)运行。这意味着你启动容器后,命令行会立即返回,而容器在后台继续运行。
  • -p :-p是–publish的缩写,用于将宿主机的端口映射到容器的端口。
  • 5000:5000:表示将宿主机的5000端口映射到容器的5000端口。这样,你可以通过访问宿主机的5000端口来访问运行在容器内的应用程序。
  • myapp:myapp是Docker镜像的名称。
  • latest:是镜像的标签,表示使用的是这个镜像的最新版本。

运行成功之后会回跳出一串字符,这个字符串叫容器ID。

通过命令和ID可以查看这个实例的运行情况。

docker ps
docker inspect <容器ID>  
docker logs <容器ID>  

5. 发布Docker镜像

发布Docker镜像是指将你本地构建的Docker镜像上传到一个公共或私有的Docker镜像仓库(如Docker Hub),以便其他用户可以拉取(下载)并使用该镜像。这一过程可以使你的应用程序及其运行环境变得可共享和可移植,方便团队协作、持续集成和部署。

将Docker镜像发布到Docker Hub,以便其他人可以使用。

  1. 登录Docker Hub:
docker login
  1. 将镜像标记为您的Docker Hub存储库:
docker tag myapp:latest tonyisno/myapp:latest
  1. 推送镜像到Docker Hub:
docker push tonyisno/myapp:latest

6. 使用发布的Docker镜像

一旦你发布公开镜像之后,其他人就可以从Docker Hub拉取并运行您的镜像。

  1. 从Docker Hub拉取镜像:
docker pull tonyisno/myapp:latest
  1. 运行容器:
docker run -d -p 5000:5000 tonyisno/myapp:latest

7.常见问题

….

总结

通过上述步骤,你可以在Windows平台上制作、发布和使用Docker镜像。Docker Desktop简化了在Windows上的Docker操作,使得创建和管理容器变得方便快捷。

 

小尾巴==========================
公众号:托尼不是塔克
交流群
知识星球
==============================