云原生之使用Docker部署Python应用

一、Python介绍

1.python简介

Python是一种高级编程语言,由Guido van Rossum于1989年开发。Python拥有简单易学、代码可读性强、具有丰富的标准库等优势,被广泛应用于各种领域,包括机器学习、数据分析、web开发、游戏开发、科学计算等。Python语言的设计理念是易读易写,因此它的语法非常简洁、清晰,可以让程序员更容易地理解代码,从而减少出错的可能性。Python也支持面向对象、函数式和命令式编程风格,并且可以通过使用模块和包进行扩展。Python还有一个开放的、庞大的社区,可以帮助开发者共享代码、解决问题,这也使得Python成为一种非常流行的编程语言。

2.Python特点

Python是一种高级、解释型、交互式编程语言,具有以下特点:

  • 简单易学:Python语言简洁,易于理解和学习,语法优雅。

  • 跨平台性:Python可在Windows、Linux、Mac等操作系统上运行,具有较好的跨平台性。

  • 面向对象:Python是面向对象的编程语言,支持面向对象的编程思想。

  • 高级语言:Python中的数据类型、数据结构和函数库等都是非常丰富的,可以用较少的代码实现复杂的功能。

  • 开源免费:Python是一个开源的语言,在一定程度上降低了软件开发成本。

  • 库丰富:Python有许多强大的库和框架可以用来快速开发应用程序,如NumPy、Pandas、Django等。

  • 大数据处理能力:Python在数据处理方面非常出色,可以处理海量数据并进行数据分析。

  • 与其他语言集成性高:Python可以与其他编程语言集成,如C/C++、Java等。

  • 开发效率高:Python的语法简洁,开发效率高,可以快速地开发出高质量的应用程序。

二、Docker介绍

1.Docker简介

Docker是一个开源的容器化平台,用于轻松创建、部署和运行应用程序。它通过使用容器来隔离应用程序和它们的环境,使得应用程序可以在不同的平台上运行,而不用担心应用程序的环境问题。Docker在开发、测试、部署和扩展应用程序的过程中都能够提供很好的支持,并且能够大大简化应用程序的部署和管理。Docker使用镜像来打包应用程序及其依赖项,并使用容器来运行镜像,它的核心是Docker引擎(Docker Engine),它负责管理容器、镜像、网络和存储等方面的内容。Docker的优点包括快速、可移植、轻量级、可扩展、安全可靠等,因此它在云计算、DevOps、持续集成等领域得到了广泛的应用。

2.Docker特点

Docker是一种轻量级、可移植、易于使用的容器技术。它的主要特点包括:

  • 轻量级:Docker容器可以在几秒钟内启动,因为它们只包含应用程序及其依赖项,而不需要启动整个操作系统。

  • 可移植性:Docker容器在不同的操作系统中都可以运行,并且可以在不同的环境中部署,而无需担心应用程序的依赖性和兼容性问题。

  • 环境一致性:Docker容器提供了一致的运行环境,因为所有的依赖项都打包在容器中,避免了在不同的开发环境中可能存在的问题。

  • 简单易用:Docker容器可以通过简单的命令进行创建、启动、停止和删除,使得应用程序的部署和管理变得非常容易。

  • 安全性:Docker容器可以隔离应用程序和系统环境,从而提供了更高的安全性。此外,Docker还提供了额外的安全措施,如密钥管理和访问控制。

三、检查本地环境

1.检查系统版本

检查操作系统版本,当前使用操作系统版本为centos 7.6。

[root@node ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core) 
[root@node ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

2.检查系统内核

检查当前内核版本,当前内核版本为3.10.0-957.el7.x86_64。

[root@node ~]# uname -r 
3.10.0-957.el7.x86_64

3.检查docker状态

检查当前docker服务状态,确保docker服务正常运行。

[root@node ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2022-10-31 03:28:51 CST; 2 days ago
     Docs: https://docs.docker.com
 Main PID: 11884 (dockerd)
    Tasks: 20
   Memory: 2.6G
   CGroup: /system.slice/docker.service
           └─11884 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Nov 03 00:55:51 node dockerd[11884]: time="2022-11-03T00:55:51.196245118+08:00" level=info msg="Container failed to exit within 10s of sig...cc518a551
Nov 03 00:55:51 node dockerd[11884]: time="2022-11-03T00:55:51.206220804+08:00" level=info msg="Container failed to exit within 10s of sig...161b81627
Nov 03 00:55:51 node dockerd[11884]: time="2022-11-03T00:55:51.233055677+08:00" level=info msg="Container failed to exit within 10s of sig...fa1863c3d
Nov 03 00:55:51 node dockerd[11884]: time="2022-11-03T00:55:51.243086387+08:00" level=info msg="Container failed to exit within 10s of sig...3efcbb91f
Nov 03 00:55:51 node dockerd[11884]: time="2022-11-03T00:55:51.255572629+08:00" level=info msg="ignoring event" container=d535649eed1277d3...skDelete"
Nov 03 00:55:51 node dockerd[11884]: time="2022-11-03T00:55:51.261318979+08:00" level=info msg="Container failed to exit within 10s of sig...c621d2f74
Nov 03 00:55:51 node dockerd[11884]: time="2022-11-03T00:55:51.289790332+08:00" level=info msg="ignoring event" container=df6c0a3d1190d674...skDelete"
Nov 03 00:55:51 node dockerd[11884]: time="2022-11-03T00:55:51.444356587+08:00" level=info msg="ignoring event" container=0924fcec04ff7f24...skDelete"
Nov 03 00:55:51 node dockerd[11884]: time="2022-11-03T00:55:51.474083648+08:00" level=info msg="ignoring event" container=8408fdf0dc109387...skDelete"
Nov 03 00:55:51 node dockerd[11884]: time="2022-11-03T00:55:51.542109102+08:00" level=info msg="ignoring event" container=c7e17f3b7f825163...skDelete"
Hint: Some lines were ellipsized, use -l to show in full.

四、编辑python文件

1.创建目录

创建工作目录/data/python

[root@node ~]# mkdir -p /data/python
[root@node ~]# cd /data/python/
[root@node python]# ls

2.编辑test.py文件

  • 编辑测试文件test.py,内容如下:
[root@node python]# cat test.py 
from flask import Flask
 
# 安装依赖
# pip3 install -U flask
 
app = Flask(__name__)
 
@app.route('/')
def index():
    return "The world is beautiful because of you!"
 
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8100)
 
# 浏览器访问测试
# http://127.0.0.1:8100/

五、构建镜像

1.编辑dockerfile文件

  • 编辑dockerfile文件,内容如下:
[root@node python]# cat dockerfile 
 
FROM centos:7.8.2003
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo;
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo;
RUN sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo;
RUN yum makecache fast;
RUN yum install python3-devel python3-pip -y
RUN pip3 install -i https://pypi.douban.com/simple flask
COPY test.py /opt
WORKDIR /opt
EXPOSE 8100
CMD ["python3","test.py"]


2.使用dockerfile构建镜像

执行以下命令,使用dockerfile构建镜像。

docker build --no-cache -t "python_app"  .

构建镜像过程如下:

Collecting click>=7.1.2 (from flask)
  Downloading https://pypi.doubanio.com/packages/4a/a8/0b2ced25639fb20cc1c9784de90a8c25f9504a7f18cd8b5397bd61696d7d/click-8.0.4-py3-none-any.whl (97kB)
Collecting itsdangerous>=2.0 (from flask)
  Downloading https://pypi.doubanio.com/packages/9c/96/26f935afba9cd6140216da5add223a0c465b99d0f112b68a4ca426441019/itsdangerous-2.0.1-py3-none-any.whl
Collecting Jinja2>=3.0 (from flask)
  Downloading https://pypi.doubanio.com/packages/20/9a/e5d9ec41927401e41aea8af6d16e78b5e612bca4699d417f646a9610a076/Jinja2-3.0.3-py3-none-any.whl (133kB)
Collecting Werkzeug>=2.0 (from flask)
  Downloading https://pypi.doubanio.com/packages/f4/f3/22afbdb20cc4654b10c98043414a14057cd27fdba9d4ae61cea596000ba2/Werkzeug-2.0.3-py3-none-any.whl (289kB)
Collecting importlib-metadata; python_version < "3.8" (from click>=7.1.2->flask)
  Downloading https://pypi.doubanio.com/packages/a0/a1/b153a0a4caf7a7e3f15c2cd56c7702e2cf3d89b1b359d1f1c5e59d68f4ce/importlib_metadata-4.8.3-py3-none-any.whl
Collecting MarkupSafe>=2.0 (from Jinja2>=3.0->flask)
  Downloading https://pypi.doubanio.com/packages/fc/d6/57f9a97e56447a1e340f8574836d3b636e2c14de304943836bd645fa9c7e/MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl
Collecting dataclasses; python_version < "3.7" (from Werkzeug>=2.0->flask)
  Downloading https://pypi.doubanio.com/packages/fe/ca/75fac5856ab5cfa51bbbcefa250182e50441074fdc3f803f6e76451fab43/dataclasses-0.8-py3-none-any.whl
Collecting zipp>=0.5 (from importlib-metadata; python_version < "3.8"->click>=7.1.2->flask)
  Downloading https://pypi.doubanio.com/packages/bd/df/d4a4974a3e3957fd1c1fa3082366d7fff6e428ddb55f074bf64876f8e8ad/zipp-3.6.0-py3-none-any.whl
Collecting typing-extensions>=3.6.4; python_version < "3.8" (from importlib-metadata; python_version < "3.8"->click>=7.1.2->flask)
  Downloading https://pypi.doubanio.com/packages/45/6b/44f7f8f1e110027cf88956b59f2fad776cca7e1704396d043f89effd3a0e/typing_extensions-4.1.1-py3-none-any.whl
Installing collected packages: zipp, typing-extensions, importlib-metadata, click, itsdangerous, MarkupSafe, Jinja2, dataclasses, Werkzeug, flask
Successfully installed Jinja2-3.0.3 MarkupSafe-2.0.1 Werkzeug-2.0.3 click-8.0.4 dataclasses-0.8 flask-2.0.3 importlib-metadata-4.8.3 itsdangerous-2.0.1 typing-extensions-4.1.1 zipp-3.6.0
Removing intermediate container 4df40876d4fd
 ---> a0a24e6b22e6
Step 8/11 : COPY test.py /opt
 ---> b0d8e6ddf6df
Step 9/11 : WORKDIR /opt
 ---> Running in efe38fb11eb0
Removing intermediate container efe38fb11eb0
 ---> 1b4f3d085ecc
Step 10/11 : EXPOSE 8100
 ---> Running in 8f09099feac2
Removing intermediate container 8f09099feac2
 ---> 77a9dfddfe2e
Step 11/11 : CMD ["python3","test.py"]
 ---> Running in 19aa9e47ec35
Removing intermediate container 19aa9e47ec35
 ---> cadbb7e67c48
Successfully built cadbb7e67c48
Successfully tagged python_app:latest

五、运行镜像容器

1.运行python_app容器

使用docker-cli快速创建python_app容器

[root@node python]#  docker run -d --name web_flask  --restart always -p 8100:8100 python_app:latest
5c23f432b05efc9833a0826b3570a4c672e7ee0accb173871109febba43d9564


2.查看容器状态

查看刚创建的python_app容器状态,确保python_app容器正常启动。

[root@node python]# docker ps
CONTAINER ID   IMAGE               COMMAND             CREATED          STATUS         PORTS                                       NAMES
5c23f432b05e   python_app:latest   "python3 test.py"   10 seconds ago   Up 9 seconds   0.0.0.0:8100->8100/tcp, :::8100->8100/tcp   web_flask

六、访问Python应用

访问地址:http://服务器IP地址:8100,直接访问Python应用,如果正常显示以下内容,则Python应用成功部署。

在这里插入图片描述

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖有缘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值