0

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


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí