Docker介绍及项目部署

安装Docker

关闭SELINUX服务

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

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

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

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

查看可下载的版本

yum list docker-ce --showduplicates | sort -r
yum list docker --showduplicates | sort -r

安装

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

systemctl start docker
systemctl stop docker
systemctl restart docker

# 设置开机启动
systemctl enable docker

# 查看docker信息
docker version
docker info

# 搜索镜像
docker search 关键字

什么是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生效

systemctl daemon-reload
systemctl restart docker

docker默认镜像源位于国外,下载速度较慢,建议修改配置文件daemon.json,若无则新建。
使用命令查看镜像源:cat /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 & 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

现实、狠残酷

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

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

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

打赏作者

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

抵扣说明:

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

余额充值