网站搬家到 docker 系列之一
1. python3 镜像准备
docker build -t waterlaw:top .
生成一个 waterlaw:top 的镜像
2. 从 docker hub 拉取一个 postgres 镜像
docker pull postgres:9.6
3. 启动 postgres 容器
docker run --name pgsql -v /home/zjp/pgdata/:/var/lib/postgresql/data/ -e POSTGRES_PASSWORD=postgres -p 54329:5432 -d postgres:9.6
docker run,创建并运行一个容器;
--name,指定创建的容器的名字;
-e POSTGRES_PASSWORD=postgres,设置环境变量,指定数据库的登录口令为postgres;
-p 54329:5432,端口映射将容器的5432端口映射到外部机器的54329端口;
-d postgres:9.6,指定使用postgres:9.6作为镜像。
4. 创建 blog 数据库
1. 在运行的容器中执行命令
docker exec -it pgsql psql -U postgres -d postgres
docker exec :在运行的容器中执行命令 语法:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
2. psql 下创建 blog 数据库
create database blog;
5. 备份数据
1. 在阿里云服务器上, 运行以下命令备份数据库
pg_dump -U postgres -h localhost blog > /home/zjp/blog.bak
2. 拷贝备份数据库到容器
docker cp /home/zjp/blog.bak CONTAINER:/tmp
3. 还原数据库数据
还原命令:
psql -U postgres -h localhost -d blog -f /tmp/blog.bak
docker exec -it <CONTAINER> psql -U postgres -h localhost -d blog -f /tmp/blog.bak bash
6. 启动 Django 容器
1. 暂停使用 8000 号端口的进程
netstat -ap | grep 8000 top kill -9 pid
2. 修改 settings.py 中的数据库配置
'USER': '', 'PASSWORD': '', 'HOST': 'xxx', 'PORT': ''
这里 HOST 的地址是 pgsql 容器的 ip, 容器之间是挂在同一个网桥中, 因此可以通过容器 ip 互相访问。
3. 查看 pgsql 容器的 ip 地址
docker ps -a docker inspect CONTAINER
docker inspect 的部分结果如下:
"EndpointID": "938288987e78efa174a85d86d7bc435dd5431130b02c5a169f6d8f2c44722521", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:03", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "8e4ba51a7ad9e8ed9c76d27cd5722b0181ab056c6c13d0b8c44a18a8b654adb9", "EndpointID": "938288987e78efa174a85d86d7bc435dd5431130b02c5a169f6d8f2c44722521", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:03", "DriverOpts": null } } } } ]
IPAddress 就是 pgsql 容器现在所分配的 ip, Django 容器可以通过该地址访问到数据库。
4. 运行 Django 容器
docker run -it -v /home/zjp/waterlawblog:/home/code -p 8000:8000 waterlaw:top bash
激活虚拟环境, 运行 python3 ./manage.py runserver 0.0.0.0:8000
. ../pysp/bin/activate python3 ./manage.py runserver 0.0.0.0:8000
Django 不能通过IP访问 Docker 容器里的 Django 服务器
7. 感谢
以上就是最简单的 Docker 实践, 尚有很多不足之处,后面会改进, 在此非常感谢以下几位提供详细的博客分享, 我才能这么快配置好 docker 环境。
liuyueyi1995 : docker安装PostgreSQL
发表评论
评论列表, 共 0 条评论