Docker介绍及项目部署

news2024/12/28 5:11:09

安装Docker

关闭SELINUX服务

SELINUX是CentOS系统捆绑的安全服务程序,因为安全策略过于严格,所以建议搭建关闭这项服务

修改/etc/selinux/config文件,设置SELINUX=disabled

vim /etc/selinux/config
# 设置SELINUX=disabled

# 设置完成后重启Centos系统
reboot

安装Docker

yum install docker -y
# 常用命令
service docker start
service docker stop
service docker restart

什么是DockerHub

DockerHub是Docker公共镜像仓,为用户提供了大量的镜像文件
官方网址:https://hub.docker.com/

由于国内网络访问DockerHub很慢,我们可以使用Docker加速器

配置Docker加速器

DaoCloud加速器采用自主研发的智能路由及缓存技术,并引入了现金的协议层优化,极大提升拉取镜像的速度和体验

# 在centos终端中输入下面命令
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

然后,修改/etc/docker/daemon.json文件,去掉结尾的逗号(如果有)

什么是Docker镜像

为了快速打包和部署软件环境,Docker引入了镜像机制,镜像是一个配置好的只读层软件环境

我们可以通过dockerfile文件创建镜像,也可以从DockerHub中下载镜像

制作镜像的步骤:
从DockerHub下载python镜像,创建容器,在容器中安装需要的程序,再将容器转化为镜像,上传到DockerHub

什么是Docker容器

容器时在镜像基础上创建出的虚拟示例,内容可读可写

一个Docker镜像可以创建多个容器,而且容器之间相互隔离,部署的程序不会相互干扰

所有的容器直接使用宿主机的Linux内核,内存和硬盘,所以容器的性能非常接近宿主机

在这里插入图片描述

在这里插入图片描述
镜像相关命令

# 下载python3.8镜像
docker pull python:3.8

# 查看已有镜像
docker images

# 查看某个镜像的详细信息
docker inspect python:3.8

# 导出镜像:适合不能联网的服务器安装镜像
# docker save 镜像名:TAG > 压缩文件
docker save python:3.8 > /root/python.tar

# 删除镜像:docker rmi 镜像名:TAG
docker rmi python:3.8

# 从压缩包导入镜像
docker load < /root/python.tar

容器相关命令
注意:通过run命令创建容器后,执行退出exit命令容器会停止,但是通过exec命令进去容器,执行退出exit命令容器不会停止。

# 创建容器
# 用python:3.8这个镜像创建一个名为p1的容器,并进入它的bash命令界面
docker run -it --name=p1 python:3.8 bash

# 查看容器状态
docker ps -a 

# 启动容器:docker start 容器名
docker start p1

# 停止容器
docker stop p1

# 暂停容器
docker pause p1

# 恢复容器运行
docker unpause p1

# 进入已经运行的容器
docker exec -it p1 bash

# 查看容器详细信息:docker inspect 容器名
docker inspect p1

# 删除容器(必须是stop状态才能删除)
docker rm p1

创建python容器必要技术

Docker网络环境

默认情况下,Docker环境会给容器分配动态的IP地址,这就导致下次启动容器的时候,IP地址就变了
在这里插入图片描述

Docker网络管理:为容器分配固定IP地址

我们可以单独创建一个Docker内部的网段(172.18.0.X)

# 创建网段
docker network create --subnet=172.18.0.0/16 mynet
# 查看docker环境中存在哪些网段
docker network ls
# 删除网段:注意需要将关联该网段的容器先删除了
docker network rm mynet
# 指定网段来创建容器(名为p1)
docker run -it --name=p1 --net mynet --ip 172.18.0.2 python:3.8 bash

Docker端口映射

默认情况下,除了宿主机之外,任何主机无法访问远程访问Docker容器

通过端口映射,可以把容器端口映射到宿主机的端口,这样其他主机就能访问容器了

映射到宿主机的端口,不需要设置防火墙规则,便可以使用。
在这里插入图片描述

# -p 宿主机端口:容器端口
docker run -it -p 9500:5000 --name=p1 python:3.8 bash
docker run -it -p 9500:5000 -p 9600:3306 --name=p1 python:3.8 bash

Docker目录挂载

为了能把一部分业务数据保存在Docker环境之外,或者把宿主机的文件传入容器,所以需要给容器挂载宿主机的目录。
这样做的一个好处是即便容器启动不了,我们的数据也不会丢失。

Docker环境只支持目录挂载,不支持文件挂载,而且一个容器可以挂载多个目录

目录挂载之后,在容器中挂载目录新创建的文件,在宿主机的挂载目录也能看到

# -v 宿主机目录:容器目录
docker run -it -v /root/test:/root/project --name=p1 python:3.8 bash

创建容器常用参数

  • -it 创建和进去python容器都要加上这个参数
  • -p 映射容器内端口到宿主机
  • –name 容器名字
  • -d 后台运行
  • -v 目录挂载
  • –net 指定网段
  • –ip 指定ip地址

创建python容器

因为我们之前已经有了一个python:3.8的镜像,和一个我们自己创建的名为mynet的网段,所以现在我们直接创建python容器。

# 假设我们再root目录创建项目文件
cd /root/
mkdir project
docker run -it -d --name=p1 -p 3002:5000 -v /root/project:/root/project --net mynet --ip 172.18.0.2 python:3.8 bash

使用pip安装项目依赖
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:https://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/

pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install mysql-connector-python -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple

创建mysql容器

下载mysql镜像

docker pull mysql:8.0.31

创建mysql容器:注意不要加-it参数

docker run --name=m1 -p 3001:3306 --net mynet --ip 172.18.0.3 -v /root/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -d mysql:8.0.31

使用客户端可视化工具连接

使用MySQL8.0报Public Key Retrieval is not allowed 错误的时候
在这里插入图片描述
解决办法:
1、右键编辑连接
在这里插入图片描述
2、点击驱动属性,找到allowPublicKeyRetrieval,把false改为true
在这里插入图片描述
3、最后重新启动

解决报错之后,下面我们用可视化工具来新建一个数据库
在这里插入图片描述
导入数据
在这里插入图片描述
导入结果如下:
在这里插入图片描述

代码连接报错:
ImportError: cannot import name ‘connector’ from partially initialized module ‘mysql’ (most likely due to a circular import)
原因:当前.py文件与库中包重名,改一下文件名就好啦!
我们之前自己创建了一个mysql.py改为mysql_data.py就好啦!

将flask项目部署到docker中

因为我们需要把项目部署在容器的内部,所以连接数据库的IP地址和端口需要更改为Docker容器的IP和端口
在这里插入图片描述
修改完毕push到github或者码云

cd /root/
mkdir project
##################### 假设之前还没创建容器和按照依赖(已创建可忽略)
docker run -it -d --name=p1 -p 3002:5000 -v /root/project:/root/project --net mynet --ip 172.18.0.2 python:3.8 bash
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip list # 查看是否暗装成功
######################
# 拉取项目代码
git clone https://gitee.com/asong5857229/flask_docker.git

# 进入容器
docker exec -it p1 bash
# 进入挂载目录
cd /root/project/flask_docker/
# 启动程序
python app.py
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5000
 * Running on http://172.18.0.2:5000

外网访问:外网是访问Linux宿主机的IP地址192.168.0.37和python项目端口映射的3002端口
在这里插入图片描述

在这里插入图片描述
由上图可见,python项目可以成功访问并且数据库也是可以成功访问的。

正式部署的时候我们需要用后台启动的方式来运行app.py

 nohup python app.py > ./flask.log 2>&1 & 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计姜太公渔具销售系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Crane如何做到利用率提升3倍稳定性还不受损?

作为云平台用户&#xff0c;我们都希望购买的服务器物尽其用&#xff0c;能够达到最大利用率。然而要达到理论上的节点负载目标是很的&#xff0c;计算节点总是存在一些装箱碎片和低负载导致的闲置资源。下图展示了某个生产系统的CPU资源现状&#xff0c;从图中可以看出&#x…

编译器设计(十二)——指令选择

文章目录一、简介二、代码生成三、扩展简单的树遍历方案四、通过树模式匹配进行指令选择4.1 重写规则4.2 找到平铺方案五、通过窥孔优化进行指令选择5.1 窥孔优化5.2 窥孔变换程序六、高级主题6.1 学习窥孔模式6.2 生成指令序列七、小结和展望一、简介 指令选择&#xff08;in…

java面试题-并发

1. 并行和并发有什么区别&#xff1f; 并行&#xff1a;多个处理器或多核处理器同时处理多个任务。并发&#xff1a;多个任务在同一个 CPU 核上&#xff0c;按细分的时间片轮流(交替)执行&#xff0c;从逻辑上来看那些任务是同时执行。 如下图&#xff1a; 并发 两个队列和一…

从功能测试到自动化测试,待遇翻倍,我整理的超有用工作经验分享~

我想应该有很多测试人员应该有这样的疑虑&#xff0c;自动化测试要怎么去做&#xff0c;现在我把自己的一些学习经验分享给大家&#xff0c;希望对你们有帮助&#xff0c;有说的不好的地方&#xff0c;还请多多指教&#xff01; 对于测试人员来说&#xff0c;不管进行功能测试还…

从股票市场选择配对的股票:理论联系实际

我们有了计算距离的方法&#xff0c;即共同因子相关系数的绝对值就是衡量协整性的一个好方法。现在看一些实际应用中会遇到的问题。 整合的特定回报的平稳性&#xff08;Stationarity of Integration Specific Returns) 两个时间序列协整的必要条件是整合的特定回报时序是平稳…

k8s安装3节点集群Fate v1.7.2

采用k8s&#xff0c;而非minikube, 在3个centos系统的节点上安装fate集群。 集群配置信息 3节点配置信息如下图&#xff1a; 当时kubefate最新版是1.9.0&#xff0c;依赖的k8s和ingress-ngnix版本如下&#xff1a; Recommended version of dependent software: Kubernetes:…

Java编码的坑你知多少?

货币计算坑&#xff1a; 这段代码你认为结果是多少&#xff1f; 我们期望的结果是0.4&#xff0c;也应该是这个数字&#xff0c;但是打印出来的却是0.40000000000000036&#xff0c;这是为什么呢&#xff1f; 这是因为在计算机中浮点数有可能&#xff08;注意是可能&#xff0…

Flask从入门到放弃(介绍、模版语法案例、配置文件、路由本质、CBV整体流程)

文章目录一、Flask介绍二、Flask快速使用三、Flask展示用户信息案例四、Flask配置文件五、路由系统1&#xff09;路由系统2&#xff09;路由本质3&#xff09;Add_url_rule的参数六、Flask的CBV1&#xff09;CBV的写法2&#xff09;CBV添加装饰器3&#xff09;as_view的执行流程…

排名前十的仓库管理系统大盘点(真实测评)!

通过本篇文章&#xff0c;您将了解以下问题&#xff1a;1、国内适合企业的仓库管理系统软件有哪些&#xff0c;排名怎么样&#xff1f;2、企业在选择仓库管理系统时应考虑哪些因素&#xff1f; 目前市场上有多种仓库管理系统&#xff0c;不同的仓库管理系统由于目标市场的不同…

dumi 如何使用?一文教你使用,高效写出你的博客、组件库文档

文章目录一、dumi介绍二、使用 dumi 的两种方式&#xff08;着重在已成型项目中使用dumi&#xff09;2.1、基于 dumi 官网带有的脚手架去进行开发2.2、在已成型的项目中引用 dumi 插件&#xff0c;运行项目2.3、dumi中使用scss2.4、如何在组件内写 tsx | md 文档2.4.1、button/…

DataX 二次开发支持 Oracle 更新数据

文章目录1、原理2、源码修改2.1 OracleWriter注释对writeMode的限制2.2 WriterUtil&#xff0c;增加oracle逻辑2.3 CommonRdbmsWriter.Task修改2.4 测试前文回顾&#xff1a; 《DataX 及 DataX-Web 安装使用详解》 《DataX 源码调试及打包》 《DataX-Web 源码调试及打包》 目前…

2022年四川建筑八大员(土建施工员)考试试题及答案

百分百题库提供建筑八大员&#xff08;土建&#xff09;考试试题、建筑八大员&#xff08;土建&#xff09;考试预测题、建筑八大员&#xff08;土建&#xff09;考试真题、建筑八大员&#xff08;土建&#xff09;证考试题库等,提供在线做题刷题&#xff0c;在线模拟考试&…

RabbitMQ基础概念

文章目录RabbitMQ介绍AMQPErlang架构模型PublisherConnectionChannelVirtual HostExchangeBindingConsumerRabbitMQ介绍 RabbitMQ是实现了高级消息队列协议&#xff08;AMQP&#xff09;的开源消息代理软件&#xff08;亦称面向消息的中间件&#xff09;。RabbitMQ服务器是用Er…

Qt-数据库开发-事务提交(3)

Qt-数据库开发-通过QSqlTableModel显示和修改数据&#xff0c;开启事务 文章目录Qt-数据库开发-通过QSqlTableModel显示和修改数据&#xff0c;开启事务1、概述2、实现效果3、主要代码4、完整源代码更多精彩内容&#x1f449;个人内容分类汇总 &#x1f448;&#x1f449;数据库…

毕设选题推荐基于python的django框架的疫苗预约接种管理系统

&#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设老哥&#x1f525; &#x1f496; 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; Java实战项目专栏 Python实…

新型网络接入控制技术

1.NAC技术 1.1简介 网络接入控制(Network Access Control&#xff0c;简称NAC)是由思科(Cisco)主导的产业级协同研究成果&#xff0c;NAC可以协助保证每一个终端在进入网络前均符合网络安全策略。NAC技术可以提供保证端点设备在接入网络前完全遵循本地网络内需要的安全策略&a…

list容器模拟实现

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是菀枯&#x1f61c; &#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4ac;格言&#xff1a;不要在低谷沉沦自己&#xff0c;不要在高峰上放弃努力&am…

布局福建市场,维也纳酒店欧暇·地中海酒店能否为投资人带来信心与底气?

近日&#xff0c;锦江酒店&#xff08;中国区&#xff09;“一城一海&#xff0c;暇享好时光”——欧暇地中海漳州长泰凯悦广场店开业典礼隆重举办。 与此同时&#xff0c;锦江酒店&#xff08;中国区&#xff09;维也纳酒店&欧暇地中海酒店品牌厦门推介会也圆满落地。在本…

Able2Extract Professional识别引擎经过微调

Able2Extract Professional识别引擎经过微调 改进的表格检测-现在&#xff0c;您可以在自定义PDF到Microsoft Excel转换过程中更准确地确定类似表格结构和内容的位置。 改进了表与列标题的分离-表识别引擎经过改进&#xff0c;可以检测和识别具有单个标题的多列表。 改进的PDF文…