Docker silicon mysql

Hôm nay sẽ tiếp tục series bài "Mình biết thì mình chia sẻ" của mình mong tiếp tục nhận được sự ủng hộ từ anh em

Rất xin lỗi vì sau bài viết trước Docker với lập trình viên web của mình thì mình lại ngắt quãng không thể đi luôn vào phần tìm hiểu liên tục kết nối với cơ sở dữ liệu. hôm nay chúng ta sẽ cùng đi giải quyết vấn đề đó

bài toán

  • Mình có một project tên php là selfproject được xây dựng dựa trên laravel framework. Dự án này đang làm việc với hệ thống quản trị CSDL là MySql

  • Vấn đề là bây giờ mình muốn chạy nó với docker. `

giải quyết

Cách 1

  • Theo như bài tìm hiểu lần trước mình sẽ sử dụng các hình ảnh đã được chia sẻ bởi các lập trình viên khác nhau trên dockerhub

  • Mình sẽ sử dụng 2 image đó là tutum/apache-php cho service apache-php và mysql cho mysql server

  • Đầu tiên mình cần tạo MySQL container trước

      docker run -p 3307:3306 --name mysqlserver -e MYSQL_ROOT_PASSWORD=root -d mysql
    

Docker silicon mysql

  • Sau đó tạo bộ chứa máy chủ web

      docker run -tid -p 9000:80 -v ~/www/sites/FrProject/Github/selfproject:/var/www/html --name selfproject-server --link mysqlserver:mysql  tutum/apache-php
    

Docker silicon mysql

  • Ở đây mình cần mở rộng hơn trong bài tìm hiểu lần trước, đó là mình có 2 container là

      docker exec -it containerName/containerId bash
    
      # Với mình
    
      docker exec -it selfproject-server bash
    
    0 và
      docker exec -it containerName/containerId bash
    
      # Với mình
    
      docker exec -it selfproject-server bash
    
    1, để họ có thể giao tiếp với nhau cần liên kết máy chủ web với mysql thông qua tùy chọn
      docker exec -it containerName/containerId bash
    
      # Với mình
    
      docker exec -it selfproject-server bash
    
    2

  • Bây giờ mở trình duyệt và thử kết quả

Docker silicon mysql

Reason?

Mình quên cấu hình lại trong file. env

    DB_CONNECTION=mysql

    # host bên ngoài local

    # DB_HOST=127.0.0.1

    # Sửa trong container nên sẽ config lại

    DB_HOST=mysql
    DB_PORT=3306
    DB_DATABASE=selfproject
    DB_USERNAME=root
    DB_PASSWORD=root
  • Connected to database in container tạo db có tên
      docker exec -it containerName/containerId bash
    
      # Với mình
    
      docker exec -it selfproject-server bash
    
    3. Ở lệnh tạo vùng chứa MYSQL mình cần phải hiển thị cổng bên ngoài vùng chứa là 3307. Do cổng máy mình 3306 đã được sử dụng cho ứng dụng khác

Docker silicon mysql

  • Ở đây mình sử dụng công cụ trực quan mysql-workbench để thao tác với mysql, các bạn có thể sử dụng công cụ khác như php-myadmin

  • Time into in container to

      docker exec -it containerName/containerId bash
    
      # Với mình
    
      docker exec -it selfproject-server bash
    
    4 data

      docker exec -it containerName/containerId bash
    
      # Với mình
    
      docker exec -it selfproject-server bash
    
  • And now is results

Docker silicon mysql

  • Nhưng khi muốn đăng ký mình gặp phải

Docker silicon mysql

Vấn đề. can't access url any other outside public. Khắc phục. in container mình cần sửa lại file apache. conf đoạn

  docker exec -it containerName/containerId bash

  # Với mình

  docker exec -it selfproject-server bash
5 thành
  docker exec -it containerName/containerId bash

  # Với mình

  docker exec -it selfproject-server bash
6 trong
  docker exec -it containerName/containerId bash

  # Với mình

  docker exec -it selfproject-server bash
7

  • Truy cập trong vùng chứa
    docker exec -it containerName/caintainerId bash
  • Sử dụng vim để sửa lại tệp apache. conf (Do container mình đang dùng không có nano =)) )
    vi /etc/apache2/apache2.conf

        **Sửa như sau**

    
    Options Indexes FollowSymLinks
    AllowOverride ALL
    Require all granted
    
  • Lưu lại và khởi động lại dịch vụ apache bên trong vùng chứa
           service apache2 restart
  • Lúc này thì bộ chứa máy chủ web này của mình sẽ bị chấm dứt (ngắt kết nối) và mình cần bắt đầu lại

Bên ngoài máy chủ của mình

docker start containerName/containerId

với mình

 docker start selfproject-server

Kết quả thu được

Docker silicon mysql

Ngon là chạy rồi (hehe). Attempt to impact with db coi sao. Mình đang cố gắng tạo một bài post và đây là kết quả

Docker silicon mysql

Các bạn thử dừng cả máy chủ mysql với máy chủ web đã khởi động lại lỗi xem còn chạy và dữ liệu ok không nhé. Với mình thì tuyệt vời

docker exec -it containerName/containerId bash # Với mình docker exec -it selfproject-server bash 8

  • Gõ dữ liệu đã lưu ở đâu?

           Vào trong mysql container nhé và trong /var/lib/mysql/
    
  • Nên cẩn thận khi xóa vùng chứa này nhé. Mình có thể giải quyết được vấn đề này cũng là

      docker exec -it containerName/containerId bash
    
      # Với mình
    
      docker exec -it selfproject-server bash
    
    9 /var/lib/mysql trong container ra một thư mục nào đó bên ngoài máy chủ của mình không hạn chế "mysql-data" do mình tự tạo giống như dự án thư mục mount của mình (nhớ nên

  • Dừng tất cả các container đang chạy

      docker run -tid -p 9000:80 -v ~/www/sites/FrProject/Github/selfproject:/var/www/html --name selfproject-server --link mysqlserver:mysql  tutum/apache-php
    
    0
  • Khi mình chỉnh sửa, làm việc với dự án thì sẽ gặp phải vấn đề quyền làm khi

      docker exec -it containerName/containerId bash
    
      # Với mình
    
      docker exec -it selfproject-server bash
    
    9 vào trong container thì nó sửa toàn bộ dữ liệu trong thư mục của mình về chủ sở hữu và nhóm là www-data, chứ không còn là người dùng hiện tại của mình . Do đó, mình nên vào trong container và cấp quyền ghi cho dự án của mình với người dùng là khách

      docker run -tid -p 9000:80 -v ~/www/sites/FrProject/Github/selfproject:/var/www/html --name selfproject-server --link mysqlserver:mysql  tutum/apache-php
    
    1
  • Với ấu trùng 5. 3 mình không thể chạy

        docker exec -it containerName/caintainerId bash
    
    1 trong container mặc dù bên ngoài vẫn ok

  • Reason. ấu trùng 5. 3 request version of php > 5. 6 trong khi image mình đang dùng là tutum/apache-php với phiên bản php 5. 5. 9. Khát đầu với ông này mình mới nhìn ra được =))
  • Khắc phục. Tự xây dựng hình ảnh hoặc sử dụng hình ảnh khác có sẵn mà phiên bản > 5. 6. Với lựa chọn của mình, sử dụng hình ảnh được chia sẻ bởi cộng đồng docker-hub. Thay vì dùng tutum/apache-php thì dùng webdevops/php-apache (Ông này cũng có vấn đề với bản laravel 5. 4 nếu có lỗi bạn có thể thử với nimmis/apache-php7 hoặc bất kỳ ông nào mà bạn tìm thấy trên docker hub và cảm thấy phù hợp với dự án của mình)

cách 2

    docker exec -it containerName/caintainerId bash
2 với Docker soạn thư

  • Không thể mỗi lần code lại start từng con server một, nếu có 3 hay nhiều hơn nữa thì mệt quá, phải nhớ tên container vì id là bất khả thi rồi =)). Rồi lại cần nhớ thứ tự bắt đầu nữa

    • Như việc liên kết Mysql với Apache thì cần start server MySql trước sau đó start Apache container
  • Điều đó dẫn đến việc mình bắt đầu thử sử dụng Docker soạn thảo

Nhà soạn nhạc Docker là gì

  • Docker soạn thảo là một công cụ định nghĩa và khởi động nhiều container với docker. Với Compose mình sẽ khai báo nhiều container trong cùng một file và chỉ việc chạy một dòng lệnh là nó sẽ làm mọi việc start container cho mình

  • Bạn có thể tham khảo tại đây

Sử dụng docker soạn cho ứng dụng của mình

  • Cài đặt docker-compose thì các bạn cài đặt theo hướng dẫn tại trang chủ docker nhé

  • Tạo tệp soạn thảo docker với tên

        docker exec -it containerName/caintainerId bash
    
    3

  • Khai báo máy chủ mysql và máy chủ web trong tệp soạn thảo này

      docker run -tid -p 9000:80 -v ~/www/sites/FrProject/Github/selfproject:/var/www/html --name selfproject-server --link mysqlserver:mysql  tutum/apache-php
    
    2
  • Về các tùy chọn trong file soạn mình sẽ không nói nhiều vì nó được mô tả khá chi tiết tại Composefile reference trên trang chủ của docker

  • Giải thích ngắn gọn về nội dung tập tin soạn thảo của mình

    • Trước tiên là về phiên bản sử dụng đối với tệp docker là phiên bản '2'. Bạn có thể tìm hiểu thêm trên docker trang chủ. Phiên bản '1' là 'định dạng cũ', phiên bản hiện tại là '2. 1' và '2' là phiên bản được khuyến mãi sử dụng có một số thay đổi về tùy chọn so với phiên bản '1'
    • Với dịch vụ mysql
      • image used as mysql
      • các cổng ở đây như mình đã nói với phần sử dụng lệnh. 3306 là cổng được sử dụng bên trong container, 3307 được xuất bên ngoài để mình có thể xem và thao tác với dữ liệu
      • các mạng sử dụng là tầng sau
      • volume at here main is mount folder bên ngoài với bên trong container như phần sử dụng lệnh. '. /mysql-data' là thư mục bạn muốn lưu trữ dữ liệu ở bên ngoài, bạn có thể liên kết bất kỳ nơi nào bạn muốn
      • tên máy chủ. mysql
    • Với dịch vụ web
      • hình ảnh mình sử dụng là tutum/apache-php. Save the idea is with laravel 5. 2 trở về trước nhé, hay là với project mình không yêu cầu phiên bản php > 5. 6
      • liên kết đến vùng chứa mysql
      • mạng lưới. phải sử dụng back-tier cùng với mysql cho toàn bộ dịch vụ trong quá trình soạn tệp để các vùng chứa có thể giao tiếp với nhau
      • tập. Làm docker-compose. tập tin yml này của mình đặt ngày trong thư mục selfproject của mình nên đường dẫn đến dự án bên ngoài máy chủ là ". " thư mục hiện tại và gắn vào "/var/www/html/selproject" trong vùng chứa
      •   docker run -tid -p 9000:80 -v ~/www/sites/FrProject/Github/selfproject:/var/www/html --name selfproject-server --link mysqlserver:mysql  tutum/apache-php
        
        3
      • Như vấn đề về Ghi đè mà mình đã nói bên trên và đoạn cấu hình này giải quyết vấn đề đó
  • OK work to work is start it

      docker run -tid -p 9000:80 -v ~/www/sites/FrProject/Github/selfproject:/var/www/html --name selfproject-server --link mysqlserver:mysql  tutum/apache-php
    
    4
  • Nhớ lưu ý tới quyền hạn và cấu hình nhá

Kết luận

  • Cảm ơn các bạn đã dành thời gian đọc bài viết của mình. Thời gian mình tìm hiểu về docker chưa được nhiều nên có thể có nhiều sai xót, rất mong nhận được sự đóng góp ý kiến ​​từ mọi người để sửa đổi nội dung bài viết tốt hơn

  • Hiện tại trong tài liệu chính thức của docker soạn không khuyến nghị sử dụng cho sản xuất, chỉ nên sử dụng trong môi trường phát triển, dàn dựng, tích hợp liên tục