Board logo

标题: CentOS8_在Docker中安装Flask [打印本页]

作者: admin    时间: 2022-12-23 02:31     标题: CentOS8_在Docker中安装Flask

笺注:Docker的安装可参考 CentOS8_使用Docker安装Python3 查看宿主机的所有镜像:( Docker安装完毕后,默认是没有任何镜像 ) [root@centos8 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [root@centos8 ~]# 从公网下载镜像:( 以下是下载Python3.8的镜像 ) [root@centos8 ~]# docker pull python:3.8 3.8: Pulling from library/python 32de3c850997: Pull complete fa1d4c8d85a4: Pull complete c796299bbbdd: Pull complete 81283a9569ad: Pull complete 60b38700e7fb: Pull complete 0f67f32c26d3: Pull complete e04be0d92e59: Pull complete b5052f164cdb: Pull complete e9c72aa5d062: Pull complete Digest: sha256:c2e327c1f8243d58c3138826ae2b20bdc7ba16c52b9dbf0cf0492b0817d9e3f2 Status: Downloaded newer image for python:3.8 docker.io/library/python:3.8 [root@centos8 ~]# 再次,查看宿主机的所有镜像: [root@centos8 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE python 3.8 51a078947558 14 hours ago 913MB [root@centos8 ~]# 在宿主机查看正在运行的容器:( 默认是没有任何容器 ) [root@centos8 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@centos8 ~]# 使用镜像“python:3.8”创建并启动容器“Flash_1”: [root@centos8 ~]# docker run -itd --name Flash_1 -p 80:81 -v /opt/python_home:/home/python python:3.8 c8d8c038b1bd723693adacf57dd07e4fdd53c8e7e725f514fd971f7bcb2555cc [root@centos8 ~]# 注释: -itd : 以交互模式情况下后台运行。 --name : 指定容器名称。 -p 端口映射 : 80是宿主机的端口,暴露给外部直接访问;81是容器的端口。 -v 挂载目录 : 这里是把宿主机的目录/opt/python_home挂载到容器的目录/home/python;假如目录不存在,就会自动创建。 python:3.8 : 镜像名称:版本号 再次,在宿主机查看正在运行的容器: [root@centos8 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c8d8c038b1bd python:3.8 "python3" About a minute ago Up About a minute 0.0.0.0:80->81/tcp, :::80->81/tcp Flash_1 [root@centos8 ~]# 注释:宿主机的TCP 80端口,映射到容器“Flash_1”的TCP 81端口。 ### 进入容器“Flash_1”: [root@centos8 ~]# docker exec -it Flash_1 /bin/bash root@c8d8c038b1bd:/# 查看容器“Flash_1”的系统版本信息: root@c8d8c038b1bd:/# cat /etc/issue Debian GNU/Linux 11 \n \l root@c8d8c038b1bd:/# more /etc/debian_version 11.6 root@c8d8c038b1bd:/# uname -r 4.18.0-193.el8.x86_64 root@c8d8c038b1bd:/# 容器“Flash_1”已经安装好Python3: root@c8d8c038b1bd:/# python3 Python 3.8.16 (default, Dec 21 2022, 19:32:01) [GCC 10.2.1 20210110] on linux Type "help", "copyright", "credits" or "license" for more information. >>> print('Welcome to zhuohua.') Welcome to zhuohua. >>> 在容器“Flash_1”中安装第三方库(Flask): root@c8d8c038b1bd:/# pip3 freeze root@c8d8c038b1bd:/# root@c8d8c038b1bd:/# pip3 install flask -i http://mirrors.aliyun.com/pypi/simple --trusted-host=mirrors.aliyun.com 安装成功后,列出当前环境中所有已经安装的第三方库的名称和其版本号: root@c8d8c038b1bd:/# pip3 freeze click==8.1.3 Flask==2.2.2 importlib-metadata==5.2.0 itsdangerous==2.1.2 Jinja2==3.1.2 MarkupSafe==2.1.1 Werkzeug==2.2.2 zipp==3.11.0 root@c8d8c038b1bd:/# 注释:会附带安装一些其他的依赖软件包。 ###### 在宿主机的目录/opt/python_home里创建一个脚本“index_1.py”: [root@centos8 ~]# cd /opt/python_home [root@centos8 python_home]# vi index_1.py 写入: #coding=utf-8 from flask import Flask app = Flask(__name__) @app.route("/") def func1(): return "Welcome to zhuohua! 这是第一个Flask网站。" if __name__ == '__main__': app.run(host='0.0.0.0',port=81,debug=True) 注释:此时,第一个Flask网站的访问端口设置为81,即TCP 81端口,也可以自定义为别的数字。 因为在创建容器“Flash_1”的时候,把宿主机的目录/opt/python_home挂载到容器的目录/home/python,所以这两个目录里的数据是双向同步的: root@c8d8c038b1bd:~# cd /home/python/ root@c8d8c038b1bd:/home/python# ls index_1.py 在容器“Flash_1”中运行脚本“index_1.py”: root@c8d8c038b1bd:/home/python# python3 index_1.py ### 在宿主机的防火墙firewalld打开TCP 80端口: firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --reload 查看防火墙所有打开的端口: [root@centos8 ~]# firewall-cmd --zone=public --list-ports 80/tcp 客户端访问第一个Flask网站: http://192.168.168.154/ 图片1.png 注释:此时,外面的客户端访问宿主机的TCP 80端口时,等于访问容器“Flash_1”的TCP 81端口。 ###### 容器“Flash_1”在宿主机的存放目录: [root@centos8 ~]# cd /var/lib/docker/containers/ [root@centos8 containers]# ls c8d8c038b1bd723693adacf57dd07e4fdd53c8e7e725f514fd971f7bcb2555cc [root@centos8 containers]# [root@centos8 containers]# cd c8d8c038b1bd723693adacf57dd07e4fdd53c8e7e725f514fd971f7bcb2555cc/ [root@centos8 c8d8c038b1bd723693adacf57dd07e4fdd53c8e7e725f514fd971f7bcb2555cc]# ls c8d8c038b1bd723693adacf57dd07e4fdd53c8e7e725f514fd971f7bcb2555cc-json.log hostconfig.json mounts checkpoints hostname resolv.conf config.v2.json hosts resolv.conf.hash [root@centos8 c8d8c038b1bd723693adacf57dd07e4fdd53c8e7e725f514fd971f7bcb2555cc]# 容器“Flash_1”的文件config.v2.json中的一些信息: 容器ID : "Config":{"Hostname":"c8d8c038b1bd", Python相关软件的版本: "PYTHON_VERSION=3.8.16","PYTHON_PIP_VERSION=22.0.4","PYTHON_SETUPTOOLS_VERSION=57.5.0", 端口映射 : ( 把宿主机的TCP 80端口,映射到容器的TCP 81端口 ) "Ports":{"81/tcp":[{"HostIp":"0.0.0.0","HostPort":"80"},{"HostIp":"::","HostPort":"80"}]}, 挂载目录的信息:( 把宿主机的目录/opt/python_home挂载到容器的目录/home/python ) "MountPoints":{"/home/python":{"Source":"/opt/python_home","Destination":"/home/python","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/opt/python_home","Target":"/home/python"}, ############ ############ 把容器“Flash_1”创建成一个新镜像: [root@centos8 ~]# docker commit Flash_1 newimage_1:3.88 sha256:e76fd1ba917c04bad4fc1deee5d0a448e079363f1d45933833abd7e55c613556 [root@centos8 ~]# 新镜像“newimage_1:3.88”创建成功: [root@centos8 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE newimage_1 3.88 e76fd1ba917c 54 seconds ago 924MB python 3.8 51a078947558 15 hours ago 913MB [root@centos8 ~]# 使用镜像“newimage_1:3.88”创建并启动容器“Flash_2”: [root@centos8 ~]# docker run -itd --name Flash_2 -p 82:83 -p 84:85 -v /opt/python_home:/home/python -v /mnt:/home/dir_2 newimage_1:3.88 ea193840db2b760196974c0a7ebf171cf267d8ff7b98d9e2c675bbfe73c4b3f0 [root@centos8 ~]# 注释: -itd : 以交互模式情况下后台运行。 --name : 指定容器名称。 -p 端口映射 : 82、84是宿主机的端口,暴露给外部直接访问;83、85是容器的端口。 newimage_1:3.88 : 镜像名称:版本号。 -v 挂载目录 : 把宿主机的目录/opt/python_home挂载到容器的目录/home/python 把宿主机的目录/mnt挂载到容器的目录/home/dir_2 再次,在宿主机查看正在运行的容器: [root@centos8 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ea193840db2b newimage_1:3.88 "python3" 3 minutes ago Up 3 minutes 81/tcp, 0.0.0.0:82->83/tcp, :::82->83/tcp, 0.0.0.0:84->85/tcp, :::84->85/tcp Flash_2 c8d8c038b1bd python:3.8 "python3" 2 hours ago Up 2 hours 0.0.0.0:80->81/tcp, :::80->81/tcp Flash_1 [root@centos8 ~]# 注释: 宿主机的TCP 82端口,映射到容器“Flash_2”的TCP 83端口。 宿主机的TCP 84端口,映射到容器“Flash_2”的TCP 85端口。 ### 进入容器“Flash_2”: [root@centos8 ~]# docker exec -it Flash_2 /bin/bash root@ea193840db2b:/# 在容器“Flash_2”中已经安装好第三方库(Flask): root@ea193840db2b:/# pip3 freeze click==8.1.3 Flask==2.2.2 importlib-metadata==5.2.0 itsdangerous==2.1.2 Jinja2==3.1.2 MarkupSafe==2.1.1 Werkzeug==2.2.2 zipp==3.11.0 root@ea193840db2b:/# 因为在创建容器“Flash_2”的时候,也把宿主机的目录/opt/python_home挂载到自己的目录/home/python,所以宿主机的目录/opt/python_home、容器“Flash_1”的目录/home/python、容器“Flash_2”的目录/home/python的数据是共享的: root@ea193840db2b:/# cd /home/python root@ea193840db2b:/home/python# ls index_1.py ###### 在宿主机的目录/mnt里创建一个脚本“index_2.py”: [root@centos8 ~]# cd /mnt [root@centos8 mnt]# vi index_2.py 写入: #coding=utf-8 from flask import Flask app = Flask(__name__) @app.route("/") def func1(): return "Welcome to zhuohua! 这是第二个Flask网站。" if __name__ == '__main__': app.run(host='0.0.0.0',port=83,debug=True) 注释:此时,第二个Flask网站的访问端口设置为83,即TCP 83端口。 因为在创建容器“Flash_2”的时候,把宿主机的目录/mnt挂载到容器的目录/home/dir_2,所以这两个目录里的数据是双向同步的: root@ea193840db2b:/# cd /home/dir_2/ root@ea193840db2b:/home/dir_2# ls hgfs index_2.py 在容器“Flash_2”中运行脚本“index_2.py”: root@ea193840db2b:~# python3 /home/dir_2/index_2.py ### 在宿主机的防火墙firewalld打开TCP 82端口: firewall-cmd --zone=public --add-port=82/tcp --permanent firewall-cmd --reload 查看防火墙所有打开的端口: [root@centos8 ~]# firewall-cmd --zone=public --list-ports 80/tcp 82/tcp 客户端访问第二个Flask网站: http://192.168.168.154:82/ 图片2.png 注释:此时,外面的客户端访问宿主机的TCP 82端口时,等于访问容器“Flash_2”的TCP 83端口。 此时,客户端依然可以访问第一个Flask网站: http://192.168.168.154:80/ 图片3.png ###### 更改脚本“index_2.py”中的端口: root@ea193840db2b:~# cat /home/dir_2/index_2.py #coding=utf-8 from flask import Flask app = Flask(__name__) @app.route("/") def func1(): return "Welcome to zhuohua! 这是第二个Flask网站。" if __name__ == '__main__': app.run(host='0.0.0.0',port=85,debug=True) 注释:此时,第二个Flask网站的访问端口设置为85,即TCP 85端口。 重新在容器“Flash_2”中运行脚本“index_2.py”: root@ea193840db2b:~# python3 /home/dir_2/index_2.py ### 在宿主机的防火墙firewalld打开TCP 84端口: firewall-cmd --zone=public --add-port=84/tcp --permanent firewall-cmd --reload 查看防火墙所有打开的端口: [root@centos8 ~]# firewall-cmd --zone=public --list-ports 80/tcp 82/tcp 84/tcp 客户端重新访问第二个Flask网站: http://192.168.168.154:84/ 图片4.png 注释:此时,外面的客户端访问宿主机的TCP 84端口时,等于访问容器“Flash_2”的TCP 85端口。 ###### 容器“Flash_2”在宿主机的存放目录: [root@centos8 ~]# cd /var/lib/docker/containers/ [root@centos8 containers]# ls c8d8c038b1bd723693adacf57dd07e4fdd53c8e7e725f514fd971f7bcb2555cc ea193840db2b760196974c0a7ebf171cf267d8ff7b98d9e2c675bbfe73c4b3f0 [root@centos8 containers]# [root@centos8 containers]# cd ea193840db2b760196974c0a7ebf171cf267d8ff7b98d9e2c675bbfe73c4b3f0/ [root@centos8 ea193840db2b760196974c0a7ebf171cf267d8ff7b98d9e2c675bbfe73c4b3f0]# ls checkpoints hostconfig.json mounts config.v2.json hostname resolv.conf ea193840db2b760196974c0a7ebf171cf267d8ff7b98d9e2c675bbfe73c4b3f0-json.log hosts resolv.conf.hash [root@centos8 ea193840db2b760196974c0a7ebf171cf267d8ff7b98d9e2c675bbfe73c4b3f0]# 容器“Flash_2”的文件config.v2.json中的一些信息: 容器ID : "Config":{"Hostname":"ea193840db2b", 端口映射 : "Ports":{"81/tcp":null,"83/tcp":[{"HostIp":"0.0.0.0","HostPort":"82"},{"HostIp":"::","HostPort":"82"}],"85/tcp":[{"HostIp":"0.0.0.0","HostPort":"84"},{"HostIp":"::","HostPort":"84"}]}, 注释: 宿主机的TCP 82端口,映射到容器的TCP 83端口。 宿主机的TCP 84端口,映射到容器的TCP 85端口。 挂载目录的信息: "MountPoints":{"/home/dir_2":{"Source":"/mnt","Destination":"/home/dir_2","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/mnt","Target":"/home/dir_2"},"SkipMountpointCreation":false},"/home/python":{"Source":"/opt/python_home","Destination":"/home/python","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/opt/python_home","Target":"/home/python"}, ###### 在宿主机查看所有的容器:(无论是否正在运行) [root@centos8 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ea193840db2b newimage_1:3.88 "python3" 42 minutes ago Up 42 minutes 81/tcp, 0.0.0.0:82->83/tcp, :::82->83/tcp, 0.0.0.0:84->85/tcp, :::84->85/tcp Flash_2 c8d8c038b1bd python:3.8 "python3" 3 hours ago Up 3 hours 0.0.0.0:80->81/tcp, :::80->81/tcp Flash_1 [root@centos8 ~]# 停止容器“Flash_2”: [root@centos8 ~]# docker stop Flash_2 Flash_2 [root@centos8 ~]# 再次,在宿主机查看所有的容器: [root@centos8 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ea193840db2b newimage_1:3.88 "python3" 45 minutes ago Exited (137) About a minute ago Flash_2 c8d8c038b1bd python:3.8 "python3" 3 hours ago Up 3 hours 0.0.0.0:80->81/tcp, :::80->81/tcp Flash_1 [root@centos8 ~]# 启动容器“Flash_2”:(启动已经存在的容器,要用这个方式) [root@centos8 ~]# docker start Flash_2 Flash_2 [root@centos8 ~]# 再次,在宿主机查看所有的容器: [root@centos8 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ea193840db2b newimage_1:3.88 "python3" 47 minutes ago Up 29 seconds 81/tcp, 0.0.0.0:82->83/tcp, :::82->83/tcp, 0.0.0.0:84->85/tcp, :::84->85/tcp Flash_2 c8d8c038b1bd python:3.8 "python3" 3 hours ago Up 3 hours 0.0.0.0:80->81/tcp, :::80->81/tcp Flash_1 [root@centos8 ~]# 相关文章: CentOS8安装Flask+Apache2.4反向代理 CentOS8_在Docker的容器内自动启动服务 CentOS8_在Docker中安装Oracle19c

图片附件: 图片1.png (2022-12-23 02:37, 22.06 KB) / 下载次数 25
http://blog.zhuohua.store/attachment.php?aid=22128&k=71d4692a98b8dbed3878d61255ada149&t=1714955270&sid=85f8yY



图片附件: 图片2.png (2022-12-23 02:46, 29.75 KB) / 下载次数 26
http://blog.zhuohua.store/attachment.php?aid=22129&k=8a079d3af5acbdaac14765e106aba842&t=1714955270&sid=85f8yY



图片附件: 图片3.png (2022-12-23 02:46, 22.06 KB) / 下载次数 21
http://blog.zhuohua.store/attachment.php?aid=22130&k=8d63497cf38e40122219fd3fde0b6901&t=1714955270&sid=85f8yY



图片附件: 图片4.png (2022-12-23 02:47, 32.28 KB) / 下载次数 22
http://blog.zhuohua.store/attachment.php?aid=22131&k=45eeb12214ec247f4731b431567aa5b3&t=1714955270&sid=85f8yY






欢迎光临 blog.zhuohua.store (http://blog.zhuohua.store/) Powered by Discuz! 7.2