标题:
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
c8d8c038b1bd
723693adacf57dd07e4fdd53c8e7e725f514fd971f7bcb2555cc [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/
下载
(22.06 KB)
2022-12-23 02:37
注释:此时,外面的客户端访问宿主机的TCP 80端口时,等于访问容器“Flash_1”的TCP 81端口。 ###### 容器“Flash_1”在宿主机的存放目录: [root@centos8 ~]# cd /var/lib/docker/containers/ [root@centos8 containers]# ls
c8d8c038b1bd
723693adacf57dd07e4fdd53c8e7e725f514fd971f7bcb2555cc [root@centos8 containers]# [root@centos8 containers]# cd
c8d8c038b1bd
723693adacf57dd07e4fdd53c8e7e725f514fd971f7bcb2555cc/ [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
ea193840db2b
760196974c0a7ebf171cf267d8ff7b98d9e2c675bbfe73c4b3f0 [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/
下载
(29.75 KB)
2022-12-23 02:46
注释:此时,外面的客户端访问宿主机的TCP 82端口时,等于访问容器“Flash_2”的TCP 83端口。 此时,客户端依然可以访问第一个Flask网站: http://192.168.168.154:80/
下载
(22.06 KB)
2022-12-23 02:46
###### 更改脚本“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/
下载
(32.28 KB)
2022-12-23 02:47
注释:此时,外面的客户端访问宿主机的TCP 84端口时,等于访问容器“Flash_2”的TCP 85端口。 ###### 容器“Flash_2”在宿主机的存放目录: [root@centos8 ~]# cd /var/lib/docker/containers/ [root@centos8 containers]# ls c8d8c038b1bd723693adacf57dd07e4fdd53c8e7e725f514fd971f7bcb2555cc
ea193840db2b
760196974c0a7ebf171cf267d8ff7b98d9e2c675bbfe73c4b3f0 [root@centos8 containers]# [root@centos8 containers]# cd
ea193840db2b
760196974c0a7ebf171cf267d8ff7b98d9e2c675bbfe73c4b3f0/ [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