0%

docker实践mysql+python

mysql实践

  • 本地环境(云服务器的本地路径)新建文件
1
2
mkdir -p ~/mysql/conf ~/mysql/data ~/mysql/logs
# 用来挂载容器中mysql的conf、data、logs目录)
  • docker pull镜像 安装 mysql5.7
1
2
3
4
5
6
7
docker pull mysql:5.7

[root@VM-24-13-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 c20987f18b13 2 months ago 448MB
hello-world latest feb5d9fea6a5 5 months ago 13.3kB

  • 启动容器运行镜像
1
2
3
4
5
6
7
8
9
10
docker run -p 7777:3306 --name mysqltest --restart=always -v ~/mysql/conf:/etc/mysql/conf.d -v ~/mysql/data:/var/lib/mysql -v ~/mysql/logs:/logs -e MYSQL_ROOT_PASSWORD=root1234567 -d mysql:5.7

# -p 7777:3306 :容器内部端口3306映射到端口3306,既是稍后我们连接mysql用7777
# --name :运行的容器名称,每次为mysqltest
# --restart always:开机启动
# -v:如 ~/mysql/conf 对应容器的目录文件/etc/mysql/conf.d
# -e MYSQL_ROOT_PASSWORD=root1234567:设置root的密码root1234567
# -d 后台运行
# mysql:5.7:既是运行这个镜像mysql:5.7

  • 说明,还可以指定如下参数:
1
2
3
4
5
--privileged=true:提升容器内权限
-e MYSQL_USER=”marvin”:添加用户marvin
-e MYSQL_PASSWORD=”pwd123”:设置marvin的密码伟pwd123
--character-set-server=utf8:设置字符集为utf8
--collation-server=utf8_general_ci:设置字符比较规则为utf8_general_ci

注意:如果运行时添加了marvin用户,用root登录后执行用户授权ALTER USER 'marvin'@'%' IDENTIFIED WITH mysql_native_password BY 'password123';,才能用远程客户端访问数据库。

  • 使用客户端(HeidiSQL)连接,用户名为root,密码为root1234567

image-20220318145451272

  • 连接成功后,创建数据库和表

image-20220318151159402

  • 在服务器也可采用如下命令进入容器内部
1
2
3
4
5
6
7
8
9
10
 docker exec -it mysqltest mysql -uroot -proot1234567


mysql> select * from demo.student;
+----+------+------+---------+
| id | name | sex | address |
+----+------+------+---------+
| 1 | ?? | ? | 22333 |
+----+------+------+---------+
1 row in set (0.00 sec)

python实践

  • 搜索python镜像:docker search python3

image-20220318160151482

  • 拉取python3.7的镜像
1
docker pull rackspacedot/python37 
  • 拉取成功后可以看到镜像
1
2
3
4
5
6
[root@VM-24-13-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rackspacedot/python37 latest 4513b6d75e1c 3 weeks ago 1.03GB
mysql 5.7 c20987f18b13 2 months ago 448MB
hello-world latest feb5d9fea6a5 5 months ago 13.3kB

  • 创建自己的脚本目录。自己的应用或文件一定要放在宿主机上,使用-v 选项将宿主机的某个目录映射到容器的某个目录下,不然容器删除时,自己的应用及文件有可能会丢失。
1
mkdir /usr/local/python_proj
  • 启动容器
1
2
3
4
5
6
docker run -itd -v /usr/local/python_proj:/usr/src/myapp -w /usr/src/myapp --name mypython-37 rackspacedot/python37
# -itd 开启交互模式,为容器分配伪终端,在后台执行
# -w 选项 为-w, --workdir="", 指定容器的工作目录为/usr/src/myapp
# -v 选项将宿主机的/usr/local/python_pro录映射到容器的/usr/src/myapp目录
# --name 容器名词
# rackspacedot/python37 镜像名词
  • 查看到已经启动成功:docker ps

image-20220318163618143

  • 进入到容器查看python版本
1
2
3
[root@VM-24-13-centos ~]# docker exec -it mypython-37 python3 --version
Python 3.7.11

  • 在本机(宿主)脚本目录准备测试脚本
1
2
3
4
5
cd /usr/local/python_proj
vi hello.py

#!/usr/bin/python
print("hello world!")
  • 运行结果
1
2
[root@VM-24-13-centos python_proj]#  docker exec -it mypython-37 python3 hello.py
hello world!
  • pip 安装模块,可以进入到容器中,然后直接安装模块
1
2
3
# 进入到容器中
[root@VM-24-13-centos python_proj]# docker exec -it mypython-37 /bin/bash
root@f471a7e4b8c8:/usr/src/myapp# pip install requests
  • 也可以不进容器,直接在宿主机上安装
1
2
3
[root@VM-24-13-centos python_proj]#  docker exec -it mypython-37 pip install requests
Requirement already satisfied: requests in /usr/local/lib/python3.7/site-packages (2.27.1)