Tiếp tục loạt bài thực hành docker từ căn bản ở bài này chúng ta cùng tìm hiểu docker file, thực hành build docker image thủ công và build image bằng docker file nhé.
Công việc chúng ta làm sẽ như sau
- Tạo image từ image cơ sở centos
- Image có cài sẵn máy chủ httpd
- htop
- vim
- Copy file dữ liệu index.html vào thư mục var/ww/html trên container thi hành nền /usr/sbin/httpd Khi container từ image này chạy thì nó sẽ chạy máy chủ web httpd
Tạo dữ liệu
Trước hết ta cần tạo dữ liệu. Tạo thư mục mycode chứa thư mục myimage, bên trong thư mục myimage tạo file test.html có nội dung html cơ bản
pc:~/Documents$ mkdir mycode
pc:~/Documents$ cd mycode/
pc:~/Documents/mycode$ mkdir myimage
pc:~/Documents/mycode$ cd myimage/
pc:~/Documents/mycode/myimage$ touch test.html
pc:~/Documents/mycode/myimage$
Sửa file html
Thực hành build thủ công
Tạo container cent từ images centos phiên bản latest bằng lệnh
docker run -it --name cent centos:latest
Tiếp theo chạy lệnh yum update
để update centos của container
Tiếp theo cài httpd và httpd-tools bằng lệnh
yum install httpd httpd-tools -y
sau khi cài xong thì chúng ta có thể kiểm tra httpd bằng lệnh httpd -v
Tiếp theo ta cài vim
yum install vim -y
Để cài htop ta cần cài kho phân phối mở rộng
yum install epel-release -y
yum update
yum install htop
Chúng ta đã hoàn thành phần cài đặt httpd, htop, vim. Tiếp theo chúng ta tiến hành copy dữ liệu là file test.html đã tạo vào thư mục làm việc /var/www/html trên container
Trước hết cần thoát ra khỏi container đang chạy bằng tổ hợp phím ctrl+p, ctrl+q
- Chạy lệnh
docker ps
để kiểm tra docker đang chạy - Copy dữ liệu từ máy host vào container bằng lệnh
docker cp /home/nguyen.van.thinhb/Documents/mycode/myimage/test.html cent:/var/www/html
- Vào container để kiểm tra xem dữ liệu đã được copy hay chưa
Ta thấy file test.html đã có trong container
Tiếp theo ta đóng gói container này thành images
-
Trước hết cần thoát và tắt container bằng lệnh
exit
-
Đóng gói container tên là cent vừa tạo thành images có tên là imagecent
Vậy là đã tạo xong image, giờ chúng ta thử tạo container và chạy máy chủ httpd từ image vừa tạo bằng lệnh
docker run --rm -p 6789:80 imagecent:latest httpd -D FOREGROUND
Tham số -rm
để khi container tắt sẽ đồng thời tự động xóa container này đi
Tham số -p 6789:80
để ánh xạ cổng 6789 trên máy host với cổng 80 trên container
Tham số -D FOREGROUND
để chạy nền
Sau đó truy cập cổng 6789 tại trình duyệt trên mày host sẽ thấy máy chủ httpd của container đã chạy
Chúng ta đã tiến hành build images thủ công, tiếp theo sẽ thực hiện công việc này bằng docker file
Thực hành build bằng dockerfile
Tạo docker file
Ta tạo docker file tại thư mục myimage, cd vào thư mục myimage và tạo bằng lệnh touch Dockerfile
mở Dockerfile lên và chỉnh sửa nội dung như sau
FROM centos:latest
RUN yum update -y
RUN yum install httpd httpd-tools -y
RUN yum install vim -y
RUN yum install epel-release -y
RUN yum update -y
RUN yum install htop -y
WORKDIR /var/www/html
EXPOSE 80
ADD ./test.html /var/www/html/
ENTRYPOINT [ "httpd" ]
CMD [ "-D", "FOREGROUND"]
Giải thích phần này:
FROM centos:latest
chỉ định image gốc là images centos:latest
Các lệnh RUN để thực thi các câu lệnh như update centos..
WORKDIR cài đặt thư mục làm việc mặc định
EXPOSE cài đặt cổng lắng nghe trên container
ADD để copy dữ liệu từ máy host vào container
ENTRYPOINT là tiến trình chạy mặc định khi tạo container
CMD [ "-D", "FOREGROUND"] là tham số cho ENTRYPOINT
Chạy docker file để sinh ra image
Tại thư mục chưa Dockerfile chạy lệnh
docker build --rm -t dockerfileimage -f Dockerfile .
Sau khi chạy lệnh build image ta thấy terminal chạy 12 tiến trình tương ứng với các lệnh ta tạo trong Dockerfile, khi chạy xong thì ta kiểm tra images bằng lệnh docker images
sẽ thấy images dockerfileimage đã được tạo thành công.
Tạo container từ image vừa tạo và chạy máy chủ web httpd
Ta đã tạo ra image dockerfileimage giờ chúng ta tạo container và chạy máy chủ web httpd từ images này
Chạy lệnh docker run --rm -p 6789:80 dockerfileimage
Container đã được tạo và đang chạy máy chủ web, giờ ta truy cập máy chủ web của container bằng trình duyệt với cổng 6789 sẻ thấy máy chủ web hoạt động
Kết bài
Trên đây là nội dung cơ bản về docker file, cùng đón chờ phần tiếp theo nhé, cảm ơn mọi người.