Docker之docker-compose

docker-compose 是一個把 docker 自動化的工具??梢园阉蟹睆?fù)的 docker 操作全都一條命令,自動化的完成。就好比每一個docker容器是一個生產(chǎn)車的機(jī)器,但是機(jī)器不能自動生產(chǎn)車,需要一系列有序的順序控制才能完整的生產(chǎn)車,這就是docker-compose。包括從容器的構(gòu)建到容器間的相互配合使用。

docker+springboot+nginx+mysql實(shí)現(xiàn)負(fù)載均衡

代碼:https://github.com/jiajia154569836/dockercompose-springboot-mysql-nginx
項(xiàng)目目錄結(jié)構(gòu)

image.png

1.java代碼 記錄服務(wù)器IP和客戶端訪問IP
@RestController
public class VisitorController {

    @Autowired
    private VisitorRepository repository;
    
    @RequestMapping("/")
    public String index(HttpServletRequest request) throws UnknownHostException {
        String ip=request.getRemoteAddr();
        Visitor visitor=repository.findByIp(ip);
        if(visitor==null){
            visitor=new Visitor();
            visitor.setIp(ip);
            visitor.setTimes(1);
        }else {
            visitor.setTimes(visitor.getTimes()+1);
        }
        repository.save(visitor);
        InetAddress address = InetAddress.getLocalHost();
        //System.out.println(address.getHostName());//主機(jī)名
        return "當(dāng)前服務(wù)器名:"+address.getHostName()+"當(dāng)前服務(wù)器ip"+address.getHostAddress()+"I have been seen ip "+visitor.getIp()+" "+visitor.getTimes()+" times.";
    }
}
2.application-docker.properties
spring.datasource.url=jdbc:mysql://mysql:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

注意:這里的mysql:3306中mysql在docker中是一個服務(wù)

3.與app同級目錄下新建docker-compose.yaml
version: '3'
services:
  nginx:
   container_name: v-nginx
   image: nginx:1.13
   restart: always
   ports:
   - 80:80
   - 443:443
   volumes:
   - ./nginx/conf.d:/etc/nginx/conf.d
    
  mysql:
   container_name: v-mysql
   image: mysql/mysql-server:5.7
   environment:
    MYSQL_DATABASE: test
    MYSQL_ROOT_PASSWORD: 123456
    MYSQL_ROOT_HOST: '%'
   ports:
   - "3306:3306"
   restart: always
    
  app-1:
    restart: always
    build: ./app
    working_dir: /app
    volumes:
      - ./app:/app
      - ~/.m2:/root/.m2
    expose:
      - "8080"
    depends_on:
      - nginx
      - mysql
    command: mvn clean spring-boot:run -Dspring-boot.run.profiles=docker

  app-2:
    restart: always
    build: ./app
    working_dir: /app
    volumes:
      - ./app:/app
      - ~/.m2:/root/.m2
    expose:
      - "8080"
    depends_on:
      - nginx
      - mysql
   command: mvn clean spring-boot:run -Dspring-boot.run.profiles=docker

4.與app同級目錄下新建nginx目錄結(jié)構(gòu)如下
image.png

app.conf目錄

upstream app {
    server dockercomposespringbootmysqlnginx_app-1:8080;
    server dockercomposespringbootmysqlnginx_app-2:8080;
    }

server {
    listen 80;
    charset utf-8;
    access_log off;

    location / {
        proxy_pass http://app;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /static {
        access_log   off;
        expires      30d;

        alias /app/static;
    }
}

注意這里的server dockercomposespringbootmysqlnginx_app-1:8080;
這需要先輸入命令:docker ps查看起的springboot項(xiàng)目的名字

image.png

當(dāng)nginx報錯的時候就是這里的問題:是項(xiàng)目名字錯誤因?yàn)橹匦虏渴鸬倪^程中項(xiàng)目名會根據(jù)版本在后面_1

5.用winscp工具上傳文件
image.png
6.這里有個技巧就是先運(yùn)行一下項(xiàng)目然后將項(xiàng)目需要的jar包下載下來然后將這些jar也復(fù)制到對應(yīng)的目錄中去,這樣可以節(jié)省下在的時間
image.png
7.進(jìn)入dockercompose-springboot-mysql-nginx
cd dockercompose-springboot-mysql-nginx
docker-compose up

然后下面的信息時


image.png
8.在頁面輸入http://192.168.229.134/ 并多次切換
image.png

當(dāng)發(fā)現(xiàn)兩個服務(wù)器IP不同則實(shí)現(xiàn)負(fù)載
關(guān)閉服務(wù)

docker-compose down

至此docker+springboot+nginx+mysql實(shí)現(xiàn)負(fù)載均衡完成
代碼:https://github.com/jiajia154569836/dockercompose-springboot-mysql-nginx

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容