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

  1. Tạo thư mục cho container image
mkdir ~/environment/container-image

Building a container image

  1. Nhập cd container-image để thay đổi vào thư mục đó.
cd ~/environment/container-image

Building a container image

  1. 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

Building a container image

  1. 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

Building a container image

  1. 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

Building a container image

  1. 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

Building a container image

  1. 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 | -

Building a container image

  1. 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

Building a container image

  1. 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

Building a container image

  1. 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

Building a container image

  1. 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.

Building a container image

  1. Sử dụng docker ps -a
docker ps -a

Building a container image

  1. Sử dụng sudo docker inspect nginx để xem thông tin chi tiết về container đã dừng.
sudo docker inspect nginx

Building a container image

  1. Sử dụng docker rm nginx để xóa container
docker rm nginx

Building a container image

  1. 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

Building a container image

  1. 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

Building a container image

  1. Chỉnh sửa tệp index.html
echo "This is another line I've added to my container" >> index.html

Building a container image

  1. Thử lại curl http://localhost:8080
curl http://localhost:8080

Building a container image

  1. Cuối cùng, chạy docker stop nginxdocker rm nginx dừng và loại bỏ container
docker stop nginx && docker rm nginx

Building a container image