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一键启动

 

posted @   豆浆D  阅读(231)  评论(0编辑  收藏  举报
编辑推荐:
· 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
点击右上角即可分享
微信分享提示