docker-compose入门
docker-compose适合本地搭建开发环境,生产环境多用swam或者k8s。
docker-compose:本地启动多个容器,即一个应用要用的python前端、java后端、数据库等,每个功能一个container,docker-compose可以一次启动完成,另外他还可以利用scale选项进行负载均衡。
例子一:docker-compose一键启动wordpress
docker-compose
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | version: '3' services: wordpress: image: wordpress ports: - 8080:80 environment: WORDPRESS_DB_HOST: mysql WORDPRESS_DB_PASSWORD: root networks: - my-bridge mysql: image: mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: wordpress volumes: - mysql-data: /var/lib/mysql networks: - my-bridge volumes: mysql-data: networks: my-bridge: driver: bridge |
浏览器访问:http://172.16.241.131:8080
不出意外会出错:
Error establishing a database connection
认证方法错误,mysql8.0以后默认的认证方式改了,所以才会有这样的错误
解决方法
1 2 3 4 5 6 7 8 9 10 11 12 13 | #进入mysql容器 docker-compose exec mysql bash #登陆数据库 mysql -u root -p use mysql; #开启root远程访问权限 grant all on *.* to 'root' @ '%' ; #修改加密规则 alter user 'root' @ 'localhost' identified by '123456' password expire never; #更新密码 alter user 'root' @ '%' identified with mysql_native_password by '123456' ; #刷新权限 flush privileges; |
再次刷新浏览器就好了
例子二:使用scale负载均衡
docker-compose
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | version: "3" services: redis: image: redis web: build: context: . dockerfile: Dockerfile environment: REDIS_HOST: redis lb: image: dockercloud /haproxy links: - web ports: - 8080:80 volumes: - /var/run/docker .sock: /var/run/docker .sock |
Dockerfile
1 2 3 4 5 6 7 | FROM python:2.7 LABEL maintaner= "Peng Xiao xiaoquwl@gmail.com" COPY . /app WORKDIR /app RUN pip install flask redis EXPOSE 80 CMD [ "python" , "app.py" ] |
app.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | from flask import Flask from redis import Redis import os import socket app = Flask(__name__) redis = Redis(host=os.environ.get( 'REDIS_HOST' , '127.0.0.1' ), port=6379) @app.route( '/' ) def hello(): redis.incr( 'hits' ) return 'Hello Container World! I have been seen %s times and my hostname is %s.\n' % (redis.get( 'hits' ),socket.gethostname()) if __name__ == "__main__" : app.run(host= "0.0.0.0" , port=80, debug=True) |
进入docker-compose.yml所在文件夹,启动docker-compose
1 | docker-compose up --scale web=3 -d |
查看是否进行了容器扩展与负载均衡
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@localhost scale] # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES db5de6922ea8 dockercloud /haproxy "/sbin/tini -- docke…" 56 minutes ago Up 56 minutes 443 /tcp , 1936 /tcp , 0.0.0.0:8080->80 /tcp scale_lb_1 7061e5a0a6d6 scale_web "python app.py" 56 minutes ago Up 56 minutes 80 /tcp scale_web_3 829a6dc26957 scale_web "python app.py" 56 minutes ago Up 56 minutes 80 /tcp scale_web_1 b61dc8fe1846 redis "docker-entrypoint.s…" 56 minutes ago Up 56 minutes 6379 /tcp scale_redis_1 9b97567cfcf7 scale_web "python app.py" 56 minutes ago Up 56 minutes 80 /tcp scale_web_2 [root@localhost scale] # for i in `seq 10`; do curl 172.16.241.132:8080; done Hello Container World! I have been seen 1 times and my hostname is 829a6dc26957. Hello Container World! I have been seen 2 times and my hostname is 9b97567cfcf7. Hello Container World! I have been seen 3 times and my hostname is 7061e5a0a6d6. Hello Container World! I have been seen 4 times and my hostname is 829a6dc26957. Hello Container World! I have been seen 5 times and my hostname is 9b97567cfcf7. Hello Container World! I have been seen 6 times and my hostname is 7061e5a0a6d6. Hello Container World! I have been seen 7 times and my hostname is 829a6dc26957. Hello Container World! I have been seen 8 times and my hostname is 9b97567cfcf7. Hello Container World! I have been seen 9 times and my hostname is 7061e5a0a6d6. Hello Container World! I have been seen 10 times and my hostname is 829a6dc26957. |
例子三:python、java、PGdatabase多模块利用docker-compose一键启动
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2019-06-17 centos7下利用nfs搭建wordpress