Sử dụng Docker thiết lập môi trường tạo Package RPM cho CentOS
Ngày xửa ngày xưa …
Ngày mới chập chững bước vào nghề System Engineer , được sếp hướng dẫn và giao cho task : compile HTTPD, PHP lên Server. Lúc đầu làm khoái lắm, viết script compile 2 cái kia từ source như đúng rồi. Mới viết thì script cũng lỗi tè le, cũng ngồi hỏi rồi fix, dần dần thì script cũng ngon hẳn ?
Lúc đầu sếp giao cho 1 con Server, ngồi compile mất cả buổi sáng. Sau sếp giao cho nhiều hơn, ngồi làm cũng nguyên ngày . Ngày đó cũng ngồi chạy song song 2-3 con cùng 1 lúc, nhưng mà script nó có chạy ngon đâu, 3 con thì lỗi 1 con, chả hiểu Khoảng 2 năm sau khi làm System Engineer, mình vẫn ngồi compile từ source cho các Server của mình. Tốc độ cải thiện hơn, nhưng cũng chả đáng là bao. Cũng có ý định ngồi build RPM nhưng mà đọc hướng dẫn How to create an RPM Package chả hiểu gì nên từ bỏ luôn ý định.
Được một người bạn giới thiệu Tool https://github.com/jordansissel/fpm ngon quá, từ đó mới bắt đầu tự tạo RPM để tăng hiệu suất làm việc và để đỡ ức chế khi ngồi cả buổi sáng chỉ để compile.
Ngày nảy ngày nay …
Bắt đầu sử dụng Tool FPM để tạo file RPM rồi, nhưng vấn đề đặt ra là làm sao để tạo ra một môi trường tạo file RPM hoàn chỉnh ( hoặc hoàn hảo ), có đặc tính như sau :
- Có 2 Server bản Minimal Fresh làm 2 nhiệm vụ khác nhau
- Server BUILD : Tool FPM để chạy script compile
- Server CHECK : dùng để chạy lệnh yum install file RPM đã tạo để kiểm tra xem file RPM này có OK không.
- Việc tạo ra mội trường phải nhanh nhất có thể.
- 2 Server BUILD và CHECK nên share Folder RPMS với nhau để có thể kiểm tra file RPM nhanh nhất có thể.
Solution
Ngày trước, mình sử dụng Vagrant để tạo môi trường này. Tuy nhiên, theo xu hướng công nghệ, giờ mình cũng học đòi dùng Docker cho bằng bạn bằng bè
Tóm tắt các bước thực hiện
- Checkout Project của mình về
https://github.com/summer0nguyen/package-builder-docker
để tạo môi trường nhé. ( chỉ checkout về lần đầu) - Start container RPM-BUILD lên bằng lệnh :
./start_container_rpm_builder.sh
. Lúc này, Docker tự động PULL imagesummernguyen/rpm-builder
của mình về từ Docker Hub và start container lên . Note: Image này được tạo từ DockerfileDockerfile_build
có sẵn trong Project. - Thực hiện việc Build RPM bằng Tool FPM được cài sẵn trong Image
summernguyen/rpm-builder
. ( xem hướng dẫn bên dưới ) - Start container rpm_checker lên bằng lệnh
./start_container_rpm_checker.sh
. Lúc này Docker sẽ pull image centos:centos6 về từ DockerHub về . - Ở trong container rpm_checker thử YUM INSTALL file RPM vừa tạo ra trong folder
/build/RPMS
. Sau khi check xong, chỉ cần exit là Container này sẽ tự động bị delete. - Sau khi việc hoàn tất hoặc muốn tạo lại môi trường Fresh cho container RPM-BUILD, chạy lệnh
./destroy_container_rpm_builder.sh
Demo : Thực hiện tạo RPM NGINX
1. Checkout Project
Checkout Project của mình từ GitHub : https://github.com/summer0nguyen/package-builder-docker
1
2
3
4
5
6
7
8
9
10
|
Macs - MacBook - Pro : tmp macpro $ git clone git @ github . com : summer0nguyen / package - builder - docker . git
Cloning into 'package-builder-docker' . . .
remote : Counting objects : 29 , done .
remote : Compressing objects : 100 % ( 19 / 19 ) , done .
remote : Total 29 ( delta 6 ) , reused 25 ( delta 5 ) , pack - reused 0
Receiving objects : 100 % ( 29 / 29 ) , 819.22 KiB | 212.00 KiB / s , done .
Resolving deltas : 100 % ( 6 / 6 ) , done .
Checking connectivity . . . done .
|
2. Start Container RPM_Builder
Start container RPM Build lên. Container này được start lên từ Image summernguyen/rpm-builder có cài đặt Tool FPM
DockerFile cho image này cũng có sẵn trong Project, nếu bạn muốn edit lại thì có thể build lại nhé.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
Macs - MacBook - Pro : package - builder - docker macpro $ . / start_container_rpm_builder . sh
Error : No such image or container : rpm_builder
Starting Container rpm_builder
Unable to find image 'summernguyen/rpm-builder:latest' locally
latest : Pulling from summernguyen / rpm - builder
a3ed95caeb02 : Already exists
204c9415d16d : Already exists
aef7590dae45 : Already exists
2ee50d3dbf64 : Already exists
f8329bb76a04 : Already exists
Digest : sha256 : b65a30e9455e1ef88437261738d057ced34919e70805774981ff60803f5bb0e1
Status : Downloaded newer image for summernguyen / rpm - builder : latest
|
Ta thấy Docker container đã start lên, và ta đang nằm trong Bash shell của container.
3. Compile Nginx
Trong script start container lên, mình có MAP Folder hiện tại thành Folder /build
ở trong container.
1
2
3
4
5
6
|
[ root @ 7d5376933719 / ] # cd /build/BUILDS/NGINX/
[ root @ 7d5376933719 NGINX ] # ls
SRC build_nginx . sh
[ root @ 7d5376933719 NGINX ] # ./build_nginx.sh
|
Các bạn nên review qua hướng dẫn sử dụng Tool FPM qua WIKI của họ.
Ngoài ra, các bạn nên review qua script build_nginx.sh của mình để dễ hình dung hơn.
Mình mô tả lại cách tạo file RPM đơn giản như sau :
- Compille từ source y như những gì mình thường làm
- Tạo folder
build
ở đâu đó, ta xem folder này tương đương folder/
của OS . - Xác định toàn bộ những file mà quá trình compile ở bước 1 tạo ra lên hệ thống ( Không tính folder source sau khi giải nén nhé)
- Rsync , Copy, … toàn bộ các folder đó vào folder
build
ở bước 2 . Nói chung là coi folderbuild
này là folder/
của OS . ( xem qua script build_nginx.sh để hiểu rõ thêm) - Tạo file RPM bằng lệnh :
fpm -s dir -t rpm ...
. Lưu ý các options :- -d : tạo dependencies khi install package RPM này
4. Kiểm tra lại file RPM đã tạo ra
Ta start container CHECK lên và cài đặt thử package RPM .
Lưu ý là container này cũng được MAP Folder hiện tại của project vào folder /build
nên ta hoàn toàn có thể truy cập file RPM được tạo ra tại : /build/RPMS/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
Macs - MacBook - Pro : package - builder - docker macpro $ . / start_container_rpm_checker . sh
Checking Image centos : centos6
centos6 : Pulling from library / centos
a3ed95caeb02 : Already exists
204c9415d16d : Already exists
Digest : sha256 : ec1bf627545d77d05270b3bbd32a9acca713189c58bc118f21abd17ff2629e3f
Status : Image is up to date for centos : centos6
THIS FRESH CENTOS6 CONTAINER WILL BE AUTOMATICALLY DESTROYED AFTER EXIT
[ root @ 32452fb1cc4f / ] # cd /build/RPMS/
[ root @ 32452fb1cc4f RPMS ] # ls
nginx - 1.8.1.1.rpm
[ root @ 32452fb1cc4f RPMS ] # yum install nginx-1.8.1.1.rpm -y
. . . . . . .
Complete !
[ root @ 32452fb1cc4f RPMS ] # /etc/init.d/nginx start
Starting nginx : [ OK ]
[ root @ 32452fb1cc4f RPMS ] #
|
Sau khi thoát container này ra , container này sẽ tự động bị xoá .
5. Xoá container RPM Builder
Mọi việc đã xong, giờ mình chỉ cần xoá container RPM Builder
1
2
3
4
5
|
Macs - MacBook - Pro : package - builder - docker macpro $ . / destroy_container_rpm_builder . sh
rpm_builder
OK . Container rpm_builder is destroyed .
|
Hi vọng việc này sẽ giúp mọi người tăng perfomance khi làm việc.
Kipalog
Có thể bạn chưa biết:
- Blockchain – Khởi nguồn của một nền kinh tế mới: Chương 6 – Những hạn chế (Phần 1)
- Blockchain – Khởi nguồn của một nền kinh tế mới: Chương 4 – Blockchain 3.0 (Phần 4)
- Blockchain có thể hỗ trợ cho ngành công nghiệp sáng tạo như thế nào?
- Blockchain sẽ làm suy yếu sức mạnh của những gã khổng lồ công nghệ như Google
- Nhóm các ngân hàng thương mại Hàn Quốc sẽ triển khai nền tảng xác minh ID dựa trên công nghệ Blockchain
- HSBC thực hiện thành công giao dịch tài trợ thương mại bằng Blockchain lần đầu tiên trên thế giới
- Việt Nam sẽ ứng dụng công nghệ Blockchain vào xây dựng Chính phủ điện tử
- Chàng trai gốc Việt kiếm hàng triệu USD khởi nghiệp từ tiền điện tử
- Blockchain – Khởi nguồn của một nền kinh tế mới: Chương 3 – Blockchain 3.0 (Phần 7)
- Blockchain – Khởi nguồn của một nền kinh tế mới: Phụ lục A – Cơ bản về tiền điện tử
- Blockchain – Khởi nguồn của một nền kinh tế mới: Chương 3 – Blockchain 3.0 (Phần 6)
- Hơn nửa triệu đô tiền điện tử bị đem bán đấu giá ở Anh
DVMS chuyên:
- Tư vấn, xây dựng, chuyển giao công nghệ Blockchain, mạng xã hội,...
- Tư vấn ứng dụng cho smartphone và máy tính bảng, tư vấn ứng dụng vận tải thông minh, thực tế ảo, game mobile,...
- Tư vấn các hệ thống theo mô hình kinh tế chia sẻ như Uber, Grab, ứng dụng giúp việc,...
- Xây dựng các giải pháp quản lý vận tải, quản lý xe công vụ, quản lý xe doanh nghiệp, phần mềm và ứng dụng logistics, kho vận, vé xe điện tử,...
- Tư vấn và xây dựng mạng xã hội, tư vấn giải pháp CNTT cho doanh nghiệp, startup,...
Vì sao chọn DVMS?
- DVMS nắm vững nhiều công nghệ phần mềm, mạng và viễn thông. Như Payment gateway, SMS gateway, GIS, VOIP, iOS, Android, Blackberry, Windows Phone, cloud computing,…
- DVMS có kinh nghiệm triển khai các hệ thống trên các nền tảng điện toán đám mây nổi tiếng như Google, Amazon, Microsoft,…
- DVMS có kinh nghiệm thực tế tư vấn, xây dựng, triển khai, chuyển giao, gia công các giải pháp phần mềm cho khách hàng Việt Nam, USA, Singapore, Germany, France, các tập đoàn của nước ngoài tại Việt Nam,…
Quý khách xem Hồ sơ năng lực của DVMS tại đây >>
Quý khách gửi yêu cầu tư vấn và báo giá tại đây >>