Container image
Thực hiện xây dựng container image
Trong phần này chúng ta thực hiện build container image. Làm việc với Dockerfile.
Dockerfile là một file dạng text không có phần đuôi mở rộng, chứa các đặc tả về một trường thực thi phần mềm, cấu trúc cho Docker Image. Từ những câu lệnh đó, Docker sẽ build ra Docker image (thường có dung lượng nhỏ từ vài MB đến lớn vài GB).
Tổng quan về Dockerfile
Cú pháp chung của một Dockerfile
INSTRUCTION arguments
- INSTRUCTION là tên các chỉ thị có trong Dockerfile, mỗi chỉ thị thực hiện một nhiệm vụ nhất định, được Docker quy định.
- Khi khai báo các chỉ thị này phải được viết bằng chữ IN HOA.
- Một Dockerfile bắt buộc phải bắt đầu bằng chỉ thị FROM để khai báo đâu là image sẽ được sử dụng làm nền để xây dựng nên image của bạn.
- arguments là phần nội dung của các chỉ thị, quyết định chỉ thị sẽ làm gì.
Một số chỉ thị trong Dockerfile
FROM
FROM <image> [AS <name>]
FROM <image>[:<tag>] [AS <name>]
FROM <image>[@<digest>] [AS <name>]
LABEL
LABEL <key>=<value> <key>=<value> <key>=<value> ... <key>=<value>
MAINTAINER
MAINTAINER <name> [<email>]
RUN
RUN <command>
ADD
ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
COPY
COPY [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]
ENV
ENV <key>=<value> ...
CMD Dùng để cung cấp câu lệnh mặc định sẽ được chạy khi Docker Container khởi động từ Image đã build, chỉ có thể có duy nhất 1 chỉ thị CMD.
Thực hành
- Tạo thư mục cho container image
mkdir ~/environment/container-image
- Nhập cd container-image để thay đổi vào thư mục đó.
cd ~/environment/container-image
- Chạy touch Dockerfile để tạo Dockerfile. Tệp này sẽ chứa một tập hợp các bước cần thiết để xây dựng container image.
touch Dockerfile
- Chạy lệnh dưới đây để cập nhật nội dung Dockerfile
cat <<EOF > Dockerfile
FROM nginx\:latest
COPY index.html /usr/share/nginx/html
EOF
- Chạy touch index.html để tạo một tệp html trống sẽ chứa một thông báo đơn giản.
touch index.html
- Sử dụng echo để chuyển một thông báo đơn giản vào tệp index.html
echo "We've added our own custom content into the container" >> index.html
- Sử dụng docker build -t nginx:1.0 . để xây dựng container image nginx từ Dockerfile.
docker build -t nginx:1.0 .
- Tham khảo lệnh build image từ một Dockerfile
docker build [OPTIONS] PATH | URL | -
- Sử dụng docker history nginx:1.0 để xem tất cả các bước và base container.
docker history nginx:1.0
- Tham khảo lệnh xem lịch sử của một image:
docker history [OPTIONS] IMAGE
- Sử dụng lệnh docker run -p 8080:80 –name nginx nginx:1.0 để chạy container ( không sử dụng chế độ chạy ngầm nhằm dễ dàng gỡ lỗi)
docker run -p 8080:80 --name nginx nginx:1.0
- Mở một tab Terminal khác ( Window -> New Terminal ). Chạy curl http://localhost:8080 trong tab một vài lần và xem nội dung mới.
curl http://localhost:8080
- Quay lại tab đầu tiên và xem các dòng nhật ký được gửi ngay đến STDOUT. Gõ Ctrl-C để thoát khỏi đầu ra nhật ký. Lưu ý rằng container đã được dừng lại nhưng vẫn ở đó khi chạy docker ps -a.
- Sử dụng docker ps -a
docker ps -a
- Sử dụng sudo docker inspect nginx để xem thông tin chi tiết về container đã dừng.
sudo docker inspect nginx
- Sử dụng docker rm nginx để xóa container
docker rm nginx
- Gắn một số tệp từ máy chủ lưu trữ vào container thay vì nhúng chúng vào image.
docker run -d -p 8080:80 -v /home/ec2-user/environment/container-image/index.html:/usr/share/nginx/html/index.html\:ro --name nginx nginx\:latest
- Thực hiện curl http://localhost:8080. Lưu ý rằng mặc dù đây là upstream nginx image từ Docker Hub nhưng nội dung có ở đó.
curl http://localhost:8080
- Chỉnh sửa tệp index.html
echo "This is another line I've added to my container" >> index.html
- Thử lại curl http://localhost:8080
curl http://localhost:8080
- Cuối cùng, chạy docker stop nginx và docker rm nginx dừng và loại bỏ container
docker stop nginx && docker rm nginx