Hình ảnh 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 (hehe)

Mục đích chính của bài viết này là chúng ta sẽ có cái nhìn tổng thể về Docker và làm sao để chạy một ứng dụng web với PHP Mysql mà không cần cài đặt Apache, Mysql trực tiếp vào máy thông qua việc chúng ta sẽ sử dụng những thứ này

Cái tên

  $ docker start/stop containerId
0 có lẽ các bạn cũng như mình đã từng nghe tuy nhiên chưa làm việc với nó và cũng chưa tìm hiểu nhiều về nó nên mình nghĩ bài viết này của mình sẽ khá hữu ích đối với newbie newbie Docker như mình

Tuần trước mình có một dự án về web với ngôn ngữ PHP và sử dụng máy chủ Mysql. Làm điều đó trên máy mình có cài đặt Apache2, PHP7 và Mysql 5. 7 và mình đang sử dụng trên hệ điều hành Linux với phiên bản Ubuntu 16. 04 LTS. Mình có một bạn nó khuyến khích mình là dùng Docker đi không cần cài đặt từng cái như vậy. Mình chỉ cần tìm cài đặt

  $ docker start/stop containerId
1 và làm theo hướng dẫn của nó là có thể khởi động máy chủ apache và mysql khi nào mình muốn và chạy ứng dụng web trên máy của mình

Nghe lời nó mình đã thử tìm hiểu về Docker xem có gì hay và mình đã bắt đầu thực sự thích cái tên này

Mình mất khá nhiều thời gian để thiết lập một môi trường đầy đủ cho việc chạy một ứng dụng web mà mình đang phát triển. Quả thật

  $ docker start/stop containerId
0 theo các nhân mình đánh giá là khá tốt về khả năng vượt qua các vấn đề liên quan đến việc cài đặt ứng dụng trên Ubuntu, các công việc cần thiết phải như đối với việc mình cài đặt từng phần như đã nói ở trên. Bắt đầu khi muốn sử dụng và dừng khi không cần đến, dễ dàng bảo trì thay đổi phiên bản, gỡ bỏ cài đặt dễ dàng

Thôi không lan man nữa chúng ta hãy cùng vào nội dung chính của bài chia sẻ này

Vâng. Hãy làm cho nó trở nên tuyệt vời =))

DOCKER là gì?

Là một công cụ tạo môi trường được "đóng gói" (còn được gọi là

  $ docker start/stop containerId
3) trên máy tính mà không tác động đến môi trường hiện tại của máy. Một số nhà phát triển thường tạo sẵn các môi trường này và tải lên mạng để mọi người truy cập sử dụng, và vài cái này được gọi là các Hình ảnh

  • Nó giống như máy ảo, chỉ là tiện dụng hơn, dễ sử dụng hơn và độc lập với hệ thống điều hành máy chủ mà chúng tôi đang sử dụng

  • Nhìn qua kiến ​​trúc để thấy sự khác biệt

Hình ảnh mysql

Hình ảnh mysql
Bộ chứa Docker

  • Khi sử dụng môi trường Vitualization thì chúng ta cần cài đặt các hệ điều hành cùng các công cụ cần thiết để chạy một ứng dụng có sẵn, nhưng với docker việc đó trở nên đơn giản với việc mình tìm và sử dụng lại các hình ảnh (tại đây . Sau đó đóng gói vào trong các
      $ docker start/stop containerId
    
    3 và chạy thôi. Cài đặt và khởi động, các khái niệm của mình sẽ hiển thị bên dưới

Tại sao chúng ta nên sử dụng docker?

  • tính bất biến. Tính không thay đổi

    • Một hình ảnh bất biến chứa mọi thứ để chạy một ứng dụng bao gồm cả mã nguồn của mình
  • Độ lặp lại. Tính năng lặp lại, có thể tái sử dụng dễ dàng

  • môi trường chia sẻ. Mình có thể chia sẻ cho bất cứ ai, bạn bè mà muốn chạy ứng dụng của mình, chỉ cần sử dụng những hình ảnh có sẵn mà mình đang sử dụng vậy là chúng ta đã có một

      $ docker start/stop containerId
    
    5

    • Ok giờ mấy đứa bạn mình đang phát triển web với Ruby, đơn giản là nó muốn nhờ mình test hộ nó trên máy của mình mà ứng dụng chưa được đưa lên host nghĩa là vẫn local. Tuy nhiên mình thì chưa bao giờ lập trình với Ruby nên các công cụ cần thiết để chạy ứng dụng của nó trên máy mình không có
    • Vì vậy, có lẽ chỉ cần kiểm tra hoặc đóng góp một số đơn giản cho nó mà lại phải cài đặt một ngăn xếp thứ hai vào máy à? . Mình hỏi bạn cần cài đặt những ứng dụng nào để chạy ứng dụng của nó và các câu lệnh cần thực hiện trước khi bắt đầu ứng dụng là gì. Sau đó lên google tìm các hình ảnh cần thiết để chứa môi trường khởi động ứng dụng mình cần và chạy thôi
  • lập phiên bản. Về phiên bản của các ứng dụng cần thiết ví dụ như Apache, Mysql, mình có thể dễ dàng lựa chọn các phiên bản cần thiết vì hầu hết được cộng đồng lập trình viên cập nhật docker khá nhanh chóng.

    • Việc chuyển đổi giữa các phiên bản dễ dàng. Bạn có hình ảnh với các phiên bản khác nhau của mysql chẳng hạn, sử dụng bất cứ phiên bản nào bạn muốn phù hợp với ứng dụng của mình
  • tự động hóa. Tính tự động khác nhau, dễ dàng khởi động máy chủ chỉ thông qua vài dòng lệnh trên thiết bị đầu cuối

  • cô lập. Tính độc lập

    • Mình không cài đặt trực tiếp các máy chủ ứng dụng cần thiết cho ứng dụng của mình lên máy chủ cục bộ mà các cài đặt cần thiết được xây dựng trong các gói (hình ảnh)

Các khái niệm cần biết

Hình ảnh

"Hình ảnh docker là các hộp hệ điều hành có chứa một số phần mềm được cài đặt sẵn và định cấu hình"

Hiểu đơn giản nó sẽ bao gồm các cài đặt sẵn có để chúng ta sử dụng. Nó giống như cái hộp bọc lấy phần thiết lập của mình

  • Ví dụ trên máy mình cài đặt Apache2 thì mình sẽ chạy câu lệnh cần thiết để cài đặt nó, tuy nhiên nếu mình sử dụng docker mình chỉ cần lên mạng tìm kiếm hình ảnh chứa bất kỳ thằng Apache2 nào mà sử dụng thôi, mọi gói và thiết lập cần thiết

  • Để xem trên máy mình có những hình ảnh nào mình dùng lệnh sau

    •   $ docker start/stop containerId
      
      7

      Hình ảnh mysql

      Repository là tên của ảnh mà mình kéo về Tag. Là phiên bản tương thích

Thùng đựng hàng

Hình ảnh mysql

"Bộ chứa Docker là các phiên bản riêng biệt mà chúng tôi tạo từ hình ảnh"

  • Qua hình các bạn rất dễ dàng để hình dung ra container là gì rồi đúng không?

  • Nó chính là ví dụ của những hình ảnh mà mình có. Chúng ta có các hình ảnh về dịch vụ cần thiết rồi, việc cần làm là chạy các hình ảnh đó vào trong các container và sử dụng thằng nào thì bắt đầu thằng đó

  • Docker container còn được gọi là Linux Container (LXC)

  • Để xem trên máy có những container nào sử dụng

    •   $ docker start/stop containerId
      
      8

Hình ảnh mysql

  • Nếu muốn xem những container nào đang start thì mình sẽ dùng

    •   $ docker start/stop containerId
      
      9

Âm lượng

Dung lượng là cách dễ dàng để chia sẻ vùng nhớ giữa máy chủ của mình và vùng chứa. Nó được tạo ra trong suốt quá trình container được chạy và luôn được đồng bộ

Ví dụ mình muốn gắn /var/www/html trong vùng chứa tới đường dẫn cục bộ trên máy chủ của mình ~/docker-project/lara-new

  $ docker start/stop containerId
0

lộ cổng

Port of application

  • Ví dụ mình sử dụng mysql container, bên ngoài mình cài đặt mysql-workbench để làm việc, mặc định bên trong container sẽ thiết lập cổng đối với mysql là 3306 là không đúng, nhưng nếu bên ngoài máy cục bộ của mình đã sử dụng cổng 3306 cho mục đích . Và mình sẽ không thể sử dụng workbench để tạo kết nối tới cổng 3306 được
  • Làm việc với docker mình có thể export port bên trong container ra port bên ngoài tương ứng. Ví dụ trong container port 3306 của mysql thì mình sẽ export nó ra bên ngoài là 3307 nhé => Vấn đề đã được giải quyết

Một số lệnh cơ bản làm việc với docker

  • You have mysql image, you want to start server mysql to work with the database, only need to run

      $ docker start/stop containerId
    
    1
  • Khi đó một vùng chứa tương ứng với hình ảnh sẽ được tạo ra.

      $ docker start/stop containerId
    
    1 ở đây chính là tên của ảnh trong cột Repository mà mình nhắc tới trong phần khái niệm ảnh

  • Mình muốn xuất cổng 3306 trong container ra máy local là 3307

    $ docker chạy --port 3307. 3306 hình ảnh

  • Mình muốn đặt tên cho container của mình khi nó được tạo ra

    $docker run --name containerName image

  • Mình muốn mount giữa folder đang làm việc bên ngoài với thằng trong container tương ứng

    $docker chạy --volume pathOnMyComputer. hình ảnh trong vùng chứa

  • Bây giờ mình muốn có nhiều tùy chọn, vừa đặt tên, cổng xuất, vừa gắn thư mục khai thác, thì các bên sẽ up lại

    $ docker chạy --port 3307. 3306 --tên MySql. mysql

Tên hình ảnh giả sử của mình là

  $ docker start/stop containerId
31 không hạn

Khi đó

  $ docker start/stop containerId
32 sẽ cho mình thấy thằng container nào đã được tạo ra và đang chạy

Bắt đầu/dừng một cách đơn giản thông qua

  $ docker start/stop containerId

Khi show ra container mình sẽ biết Id của từng thằng tương ứng

Thử nghiệm

  • Cài đặt docker. cài đặt docker

  • Kéo hình ảnh tutum/apache-php về bằng cách chạy

      $ docker start/stop containerId
    
    3
  • Kéo hình ảnh mysql

      $ docker start/stop containerId
    
    7
  • Phiên bản của mysql và apache-php và mysql có thể tùy chọn được, bạn chỉ cần làm theo hướng dẫn trên 2 liên kết mình đưa ra bên trên

  • Ok giờ bạn kiểm tra xem 2 ảnh trên của mình đã được kéo về hay chưa

      $ docker start/stop containerId
    
    8

Hình ảnh mysql

  • Ok mình có một thư mục như thế này ~/dokder-project/lara-new. Đây là project laravel mà mình mới tạo. Thông thường mình sẽ để nó trong /var/www/html/lara-new để rồi chạy nó đúng sai (Giả sử đường dẫn làm việc của apache trên máy mình vẫn để là mặc định)
    • Bây giờ muốn chạy nó với docker mình làm như thế nào?
      • Tương tự như khi bạn làm việc trực tiếp trên máy chủ của bạn thì trong vùng chứa, bạn cần luồn thằng lara-new này vào trong đường dẫn làm việc của apache trong vùng chứa. Mình cần tưởng tượng là mọi thứ đang chạy bên trong container
  • Gắn thư mục trên máy chủ vào trong thư mục làm việc của apache trong containerter

      $ docker start/stop containerId
    
    9
  • Ở đây trong www/sites contains các thư mục dự án web của mình. Đây cũng chính là thư mục làm việc của apache mà mình đã thay đổi từ mặc định /var/www/html sang

Hình ảnh mysql

  • Giờ sử dụng kiểm tra xem vùng chứa đã được tạo và đang chạy chưa

      $ docker start/stop containerId
    
    0

Hình ảnh mysql

  • Open localhost. 9000 vì tự mình xuất cổng 80 mà mặc định apache sử dụng trong container ra cổng 9000 bên ngoài và kết quả

Hình ảnh mysql

  • Ok mọi thứ ổn, giờ mình sẽ mở duyệt và chạy thử project của mình

Hình ảnh mysql

  • Giờ không muốn sử dụng máy chủ nữa(?)
    •   $ docker start/stop containerId
      
      33
    • Lần sau sử dụng thì mình lại
        $ docker start/stop containerId
      
      34
  • Bây giờ muốn config file apache config trong site-enable ảo hạn để tạo virtual host cho đường dẫn đẹp ảo ảo hạn thì làm như thế nào?
    • Mình cần chạy vào bên trong container và thực hiện các thao tác tương tự như khi mình đang làm trên máy local mà bình thường vẫn là mình làm thôi

    • To the container run

        $ docker start/stop containerId
      
      3
    • containerName mình dùng

        $ docker start/stop containerId
      
      35 để xem

  • Nếu bạn muốn tự làm mọi công việc từ đầu, bạn có thể tìm hiểu kỹ năng hơn với từ khóa
      $ docker start/stop containerId
    
    36, tìm hiểu cú pháp trong
      $ docker start/stop containerId
    
    36 để xây dựng hình ảnh của riêng mình và chia sẻ cho người khác. Theo mình hiểu đơn giản thì dockerfiles khai báo một loạt các câu lệnh có thứ tự và được chạy khi bạn bắt đầu xây dựng một hình ảnh
    • Ví dụ một Dockerfile đơn giản của mình như sau

        $ docker start/stop containerId
      
      7
    • Đó là ví dụ đơn giản bạn xây dựng một hình ảnh với cài đặt của bản apache và Expose port 80

    • Cùng tìm hiểu về

        $ docker start/stop containerId
      
      38 sau nhé mình thấy nó cũng khá hay. Tạm thời ăn nhanh mình đang áp dụng
        $ docker start/stop containerId
      
      1 đã có sẵn (haha)