Lưu ý: các lệnh trong bài viết này đều phải chạy với quyền sudo
1.Cài đặt docker
Để cài đặt docker, chạy lệnh sau:
sudo apt-get docker.io
Để kiểm tra xem đã cài đặt được chưa thì chạy lệnh:
docker --version
Đưa docker trở thành một dịch vu của hệ thống:
sysemctl start docker
systemctl enable docker
2. Giới thiệu một số lệnh docker thông dụng
Docker sử dụng một file có tên là dockerfile để tạo image. File này sẽ bao gồm một loạt các lệnh chỉ dẫn cho docker biết cách tạo image như thế nào.
Nguyên tắc đọc file này như sau:
- Đọc lần lượt từ trên xuống dưới.
- Mỗi dòng là một lệnh, để ngắt dòng cần dùng ký tự "\"
- Nếu có sửa file này, docker sẽ bắt đầu lại từ dòng được sửa cho tới hết file.
Dưới đây là một số lệnh thường dùng (lưu ý viết hoa):
- FROM: Tên image gốc được sử dụng để tạo image này. Dòng này là dòng bắt buộc và phải nằm trên cùng của file dockerfile.
- MAINTAINER: tùy chọn, ghi thông tin người tạo image.
- RUN: là dòng lệnh sẽ được chạy trong quá trình build image.
- ADD: thêm một file/thư mục từ host vào image, có một tùy chọn cho phép docker download file này từ một địa chỉ url.
- COPY: tương tự như ADD nhưng không hỗ trợ giải nén file nén và không hỗ trợ download từ url.
- ENV: định nghĩa một biến môi trường.
- CMD: lệnh trong image sẽ được chạy khi image được khởi động.
- ENTRYPOINT: định nghĩa một dòng lệnh mặc định sẽ được chạy khi image được chạy.
- WORKDIR: thư mục mà lệnh trong tùy chọn CMD sẽ chạy sau khi image khởi động xong.
- USER: là tên user hoặc uuid của user sẽ được tạo để chạy trong môi trường của image.
- VOLUME: cho phép image được truy cập một thư mục của host khi image chạy.
- #: comment trong docker file.
3. Hướng dẫn build docker image cơ bản
Tạo một docker file bằng lệnh:
nano ./Dockerfile
Thêm dòng sau vào đầu file để build image từ base ubuntu:16.04
#Download base image ubuntu 16.04
FROM ubuntu:16.04
Thêm dòng sau để image có repository được cập nhật lúc build:
RUN apt-get update
Thêm dòng sau để cài một số ứng dụng cần thiết, ở đây ta đang cài nginx, php-fpm:
RUN apt-get install -y nginx php7.0-fpm supervisor && \
rm -rf /var/lib/apt/lists/*
Thêm dòng sau để thay virtualhost configure mặc định:
#Define the ENV variable
ENV nginx_vhost /etc/nginx/sites-available/default
ENV php_conf /etc/php/7.0/fpm/php.ini
ENV nginx_conf /etc/nginx/nginx.conf
ENV supervisor_conf /etc/supervisor/supervisord.conf
# Enable php-fpm on nginx virtualhost configuration
COPY default ${nginx_vhost}
RUN sed -i -e 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' ${php_conf} && \
echo "\ndaemon off;" >> ${nginx_conf}
#Copy supervisor configuration
COPY supervisord.conf ${supervisor_conf}
Thêm dòng sau để tạo thư mục mới:
RUN mkdir -p /run/php && \
chown -R www-data:www-data /var/www/html && \
chown -R www-data:www-data /run/php
Thêm dòng sau để gắn thêm volume của host vào docker image:
# Volume configuration
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]
Thêm dòng sau để các dịch vụ tự chạy sau khi image được khởi động xong:
# Configure Services and Port
COPY start.sh /start.sh
CMD ["./start.sh"]
EXPOSE 80 443
Để bắt đầu build image, ta chạy lệnh sau:
docker build -t nginx_image .
Lệnh trên sẽ tạo file image tại cùng thư mục với file dockerfile.
Sau khi build xong, có thể kiểm tra xem image đã được tạo thành công chưa bằng lênh, nếu thành công ta sẽ thấy một image có tên là nginx_image hiện ra trong danh sách:
docker image
Để chạy image mới ta có thể dùng lệnh:
Có thể kiểm tra xem image đã khởi động xong chưa bằng lệnh:
docker ps