docker+flask+mysql

阮一峰docker

阮一峰docker-compose

  1. 每个container相当于一个虚拟机,有自己的ip地址

  2. Dockerfile

1
2
3
4
5
6
7
FROM python:3
EXPOSE 5001
WORKDIR /what
COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY . /what
CMD ["python", "main.py"]
  1. docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: '3'
services:
db:
image: mysql:5
container_name: mydb
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=mingtest
ports:
- "3307:3306"
volumes:
- ~/Data/mysql:/var/lib/mysql
web:
build: .
container_name: myweb
ports:
- "5001:5001"
links:
- db
  1. requirements.txt
1
2
3
Flask
pymysql
flask-restful
  1. main.py
1
2
3
4
5
6
7
8
9
10
11
from flask import Flask
from flask_restful import Api, Resource
app = Flask(__name__)
api = Api(app)
class HelloWorld(Resource):
def get(self):
return {'hello': 'world'}

api.add_resource(HelloWorld, '/')
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5001, debug=True)
  1. docker-compose ps
1
2
3
Name        Command      State                Ports          
mydb docker-entrypoint.sh mysqld Up 0.0.0.0:3307->3306/tcp, 33060/tcp
myweb python main.py Up 0.0.0.0:5001->5001/tcp
  1. 连接msql
1
mysql -h127.0.0.1 -P3307 -uroot -proot
  1. shell进正在运行的docker
1
docker container exec -it 43a38e5c1965 bash