Docker-compose
使用docker-compose构建mongodb、mysql、postgres、Nginx
mongodb
version: '2'
services:
mongo:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: root
设置用户名和密码docker-compose up -d
在后台构建服务
docker exec -it mongo_mongo_1 bash
进入容器bash命令行
mongo -u root -p root
使用用户名和密码登录
否则没有权限或登录失败
直接使用mongo
进入时:
密码错误时:
postgres
version: "2.0"
services:
db:
image: postgres
restart: always
environment:
POSTGRES_PASSWORD: '123456'
web:
build:
context: .
dockerfile: Dockerfile
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
links:
- db
context: .
配置docker-compose.yml文件的路径
dockerfile: Dockerfile
配置文件名
这里不直接使用build: .
是因为version: '2.0’版本不支持这样直接使用,而这里的docker-compose版本又只有1.8.0而已,不能使用version: ‘3’,否则会报错。
也可以直接docker build
构建好镜像后,直接使用image: image_id
postgres有默认的用户postgres,所以这里只设置的密码
这里是Django项目的settings.py配置文件,构建的时候docker-compose会把‘db’映射成相应的服务IP。
MySQL
version: '2.0'
services:
db:
image: mysql
command: '--default-authentication-plugin=mysql_native_password'
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'root'
docker ps
查看容器docker exec -it mysql_db_1 bash
进入容器bash
mysql -u root -p
登录
Nginx
web:
image: nginx
volumes:
- ./templates:/etc/nginx/templates
ports:
- "8080:80"
environment:
- NGINX_HOST=foobar.com
- NGINX_PORT=80
总结
- 主要是理解docker-compose容器与容器之间的网络通信,可以在容器中使用service名称替代
- 数据库容器需要设置用户名或密码,否则将会初始化失败
- docker-compose.yml 中 version的版本问题,
build: .
可以用构建好的 image 或 context、dockerfile配置Dockerfile文件位置和文件名替换解决
https://hub.docker.com/
https://soft.ryana.cn/eBook/33_Docker%E7%9B%B8%E5%85%B3/Docker%20%E2%80%94%20%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E5%AE%9E%E8%B7%B5.pdf