Sử dụng Docker commit để tạo và lưu thay đổi một Image
Dockerfile là một trong những tính năng chính dẫn đên sự thành công của Docker. Với khả năng xây dựng một container image mới từ một tập tin đơn giản đã giúp thay đổi rất nhiều của việc ứng dụng docker. Khi nói đến sửa đổi một Docker image, suy nghĩ đầu tiên của chúng ta là sẽ sửa đổi thông tin ...
Dockerfile là một trong những tính năng chính dẫn đên sự thành công của Docker. Với khả năng xây dựng một container image mới từ một tập tin đơn giản đã giúp thay đổi rất nhiều của việc ứng dụng docker.
Khi nói đến sửa đổi một Docker image, suy nghĩ đầu tiên của chúng ta là sẽ sửa đổi thông tin trong Dockerfile. Trong phân này, chúng ta sẽ học một cách khác để tạo và thay đổi một Docker image. Chúng ta sẽ thực hiện việc này bằng cách sử dụng lệnh docker commit. Lệnh commit của Docker cho phép người dùng lấy một container đang chạy và lưu trạng thái hiện tại của nó dưới dạng một image. Điều này có nghĩa là để chung ta có thê thêm người dùng mới , chúng ta sẽ cần một container đang chạy. Để bắt đầu, chúng ta hãy tiếp tục chạy một Redis container với lệnh chạy của docker.
sudo docker run -d redis 8a27d6a33d273060cbce938d3b5ccbff786b38eda2e906e28cb3c1d75167166b
Trong lệnh trên, chúng ta có thể thấy rằng chúng ta đã bắt đầu chạy một container bằng cách sử dụng redis image. Vì vây, chúng ta nên kiểm tra xem container đó có thực sự chạy hay không với lệnh docker ps.
sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8a27d6a33d27 redis "docker-entrypoint..." 4 minutes ago Up 4 minutes 6379/tcp gracious_mestorf c700dc01d6b7 redis "docker-entrypoint..." 4 minutes ago Up 4 minutes 6379/tcp jovial_lewin
Như vậy, bây giờ chúng ta có một container đang chạy, chúng ta hãy xác minh rằng người dùng mới của chúng ta không tồn tại để thêm. Để thực hiện việc này, chúng ta sẽ sử dụng lệnh Docker Docker exec.
sudo docker exec -it gracious_mestorf /bin/bash root@8a27d6a33d27:/data#
Trong kết quả ở trên, chúng ta có thể thấy lệnh của Docker đã hoạt động, nhưng nó có tác dụng gì? Chúng ta hãy dành một chut thời gian để hiểu rõ chính xác lệnh trên. Lệnh docker exec được sử dụng để thực hiện một lệnh vào một Docker container đang chạy. Trong trường hợp trên, chúng tôi đã đã dùng lệnh docker exec để thực hiện lệnh / bin / bash. Điều này giống như các lệnh -i (interactive) và -t (pseudo TTY) cho phép chúng ta đăng nhập vào container đang chạy.
Chúng ta có thể thấy rằng chúng ta đã đăng nhập vào container thông qua dấu nhắc bash, hiện tại cho thấy thông tin root@8a27d6a33d27. Nếu chúng ta nhìn vào thông tin cuả lệnh docker ps xuất ra, chúng ta có thể thấy một số number. Số được hiển thị dưới dạng số CONTAINER ID của container gracious_mestorf. Đây là cùng một vùng chứa mà chúng tôi đã chỉ định với lệnh docker exec của chúng tôi. Bây giờ chúng ta đã đăng nhập vào vùng chứa, hãy tiếp tục và xác minh nếu người dùng "mới của chúng tôi đã tồn tại. Chúng ta có thể làm điều này bằng cách tìm kiếm tên người dùng của người dùng trong tập tin / etc / passwd.
root@8a27d6a33d27:/data# grep example /etc/passwd
Thêm người dùng và lưu một Image
Ở trên, chúng ta đã xác minh rằng người dùng example không tồn tại trên redis container, nên chúng ta sẽ thêm người dùng đó vào trong container đang chạy . Để làm điều này, chúng ta sẽ sử dụng lệnh useradd.
root@8a27d6a33d27:/data# useradd -g redis example
Nếu chúng ta thực hiện lại lệnh grep đối với tập tin / etc / passwd, chúng ta sẽ thấy người dùng này tồn tại.
root@8a27d6a33d27:/data# grep example /etc/passwd example:x:1000:999::/home/example:/bin/sh
Bây giờ khi người dùng của chúng ta được thêm vào, chúng ta hãy thoát khỏi container và quay trở lại hệ thống. Sau đó, chúng ta có thể thực hiện lệnh docker commit ' để lưu thay đổi image của chúng ta. Khi thực hiện lệnhdocker commit`, chúng ta cần phải cung cấp hai tham số: tên của container đang chạy gracious_mestorf và tên image muốn thêm người dùng vào: example.
sudo docker commit gracious_mestorf testredis:example sha256:6f68e12ee78732258a4fdfedca3ab164a5c9ea330ed28c9cb0d531477706373b
Trong thông tin trả về ở trên, chúng ta có thể thấy rằng lệnh docker commit trả về một hàm băm sha256. Hàm băm này nói ra lệnh docker commit của chúng tôi đã thành công. Để kiểm tra image vừa được chúng ta tạo ở trên với lệnh docker images
docker images testredis:example REPOSITORY TAG IMAGE ID CREATED SIZE testredis example 6f68e12ee787 10 hours ago 183MB
Như vậy chung ta đã nhìn thấy cách thức mà lênh docker commit hoạt động và để xác nhận xem image đã được tạo ra hay không, chúng ta có thể xem thông qua lệnh docker run
docker run redis grep example /etc/passwd
Với lệnh trên chúng ta thấy không có người dùng có tên là example trong image có tên redis. Điều này có thể hơi khó hiểu, tuy nhiên khi chúng ta nghĩ về cách thức mà Docker hoạt động, thì nó sẽ trở nên dễ hiểu hơn nhiều.
Trước đó, chúng tôi đăng nhập vào container gracious_mestorf , chúng ta đã thêm người dùng example. Khi chúng ta làm điều này, chúng ta chỉ thêm người dùng đó vào container đang chạy. Mọi thay đổi mà chúng ta thực hiện đối với một container đang chạy sẽ không ảnh hưởng đến image ban đầu. Về cơ bản, đây là bản chất hoat động của Docker container. Khi chạy image mới tạo chúng ta có thể dễ dàng tìm thấy thông tin người dùng đã được thêm. Với image này chúng ta có thể tạo riêng một container để chạy hay đấy nó lên DockerHub.