docker mirror (docker images)

Một số chú ý

  • Docker image: là template để tạo ra các container. Tức là các container được chạy từ các images này.

  • Có 02 cách để tạo ra các các mirror container

    • Cách 1: Tạo một container, chạy các câu lệnh cần thiết và sử dụng lệnh docker commit để tạo ra image mới. Cách này thường không được khuyến cáo.
    • Cách 2: Viết một Dockerfile và thực thi nó để tạo ra một images. Thường mọi người dùng cách này để tạo ra image.
  • Khi một container được tạo từ đầu, nó sẽ kéo các image (pull) từ Docker Hub (Docker registry mặc định) về và thực tạo container từ image đó.

  • Tất cả mọi người đều có thể tạo ra các images.

  • Docker hub có thành phần docker registry – được vận hành với công ty Docker, nơi đây chứa các images mà người dùng chia sẻ.

  • Các image là dạng file-chỉ-đọc (read only file). Khi tạo một container mới, trong mỗi container sẽ tạo thêm một lớp có-thể-ghi được gọi là container-layer. Các thay đổi trên container như thêm, sửa, xóa file… sẽ được ghi trên lớp này. Do vậy, từ một image ban đầu, ta có thể tạo ra nhiều máy con mà chỉ tốn rất ít dung lượng ổ đĩa.

  • Docker cung cấp 3 công cụ phân tán giúp chúng ta lưu trữ và quản lý các Docker image. Để tự dựng một private registry và lưu trữ các private image chúng ta có thể sử dụng một trong các công cụ sau:

    • Docker Registry: một open source image distribution tool giúp lưu trữ và quản lý image
    • Docker Trusted Registry: một công cụ trả phí, nó khác với Docker Registry là có giao diện quản lý và cung cấp một số tính năng bảo mật (nghe bảo thế)
    • Docker Hub: đây là một dịch vụ khi mà bạn không muốn tự quản lý registry. Cung cấp public và private image repository. Mặc định Docker Client sẽ sử dụng Docker Hub nếu không có registry nào được cấu hình. Trên này có rất nhiều các image offcial của các phần mềm như nginx, mongodb, mysql, jenkins,..
  • Quy tắt đặt tên images: [REPOSITORY[:TAG]]

    • Trong đó, TAG là phiên bản của images. Mặc định, khi không khai báo tag thì docker sẽ hiểu tag là latest

1. Một số lệnh làm việc với images

1.1. Kiểm tra hoạt động của docker

  • Sử dụng lệnh docker run hello-world để kiểm tra hoạt động của docker trên host.

     docker run hello-world
  • Lệnh trên sẽ gọi tới image tên là hello-world, đây là một image được lưu trên Docker Hub. Mục tiêu của image này là để kiểm tra hoạt động của docker được cài trên host đã ổn hay chưa.

  • Kết quả như sau chứng tỏ docker đã hoạt động ổn định

     root@u14-vagrant:~# docker run hello-world
    
     Hello from Docker!
     This message shows that your installation appears to be working correctly.
     ....

1.2. Tìm kiếm immages từ Docker HUB

  • Sử dụng lệnh docker search để tìm kiếm các images trên Docker HUB

     docker search ubuntu
  • Hoặc tìm chính xác phiên bản

     docker search ubuntu:14.04
  • Lệnh này sẽ thực hiện tìm kiếm images có tên là ubuntu từ internet, kết quả sẽ trả về các images có tên là ubuntu

     root@u14-vagrant:~# docker search ubuntu
     NAME                       DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
     ubuntu                     Ubuntu is a Debian-based Linux operating s...   5019      [OK]
     ubuntu-upstart             Upstart is an event-based replacement for ...   68        [OK]
     rastasheep/ubuntu-sshd     Dockerized SSH service, built on top of of...   49                   [OK]
     consol/ubuntu-xfce-vnc     Ubuntu container with "headless" VNC sessi...   29                   [OK]
     ubuntu-debootstrap         debootstrap --variant=minbase --components...   27        [OK]
     torusware/speedus-ubuntu   Always updated official Ubuntu docker imag...   27                   [OK]
     ioft/armhf-ubuntu          [ABR] Ubuntu Docker images for the ARMv7(a...   19                   [OK]
     nickistre/ubuntu-lamp      LAMP server on Ubuntu                           10                   [OK]
     nuagebec/ubuntu            Simple always updated Ubuntu docker images...   9                    [OK]
     nimmis/ubuntu              This is a docker images different LTS vers...   5                    [OK]
     maxexcloo/ubuntu           Base image built on Ubuntu with init, Supe...   2                    [OK]
     jordi/ubuntu               Ubuntu Base Image                               1                    [OK]
     darksheer/ubuntu           Base Ubuntu Image -- Updated hourly             1                    [OK]
     admiringworm/ubuntu        Base ubuntu images based on the official u...   1                    [OK]
     1and1internet/ubuntu-16    Ubuntu 16 Base Image                            1                    [OK]
     lynxtp/ubuntu              https://github.com/lynxtp/docker-ubuntu         0                    [OK]
     datenbetrieb/ubuntu        custom flavor of the official ubuntu base ...   0                    [OK]
     labengine/ubuntu           Images base ubuntu                              0                    [OK]
     webhippie/ubuntu           Docker images for ubuntu                        0                    [OK]
     vcatechnology/ubuntu       A Ubuntu image that is updated daily            0                    [OK]
     esycat/ubuntu              Ubuntu LTS                                      0                    [OK]
     konstruktoid/ubuntu        Ubuntu base image                               0                    [OK]
     widerplan/ubuntu           Our basic Ubuntu images.                        0                    [OK]
     ustclug/ubuntu             ubuntu image for docker with USTC mirror        0                    [OK]
     teamrock/ubuntu            TeamRock's Ubuntu image configured with AW...   0                    [OK]
     root@u14-vagrant:~#
  • Trong đó:

    • Cột NAME : tên của images
    • Cột DESCRIPTION: Mô tả ngắn gọn của images
    • Cột OFFICIAL: Là images chính thức do công ty Docker cung cấp. Trạng thái là OK.
  • Kết quả của lệnh docker search ubuntu:14.04

     root@u14-vagrant:~# docker search ubuntu:14.04
     NAME                                                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
     saltstack/ubuntu-14.04-minimal                                                                      7                    [OK]
     saltstack/ubuntu-14.04                                                                              5                    [OK]
     simphonyproject/ubuntu-14.04-remote                 Ubuntu 14.04 with Remote Access Support (l...   1                    [OK]
     fernandoacorreia/ubuntu-14.04-oracle-java-1.7       Docker image with Ubuntu 14.04 and Oracle ...   1                    [OK]
     linuxmalaysia/docker-ubuntu-14.04-harden            Docker Ubuntu harden for security with SSH...   1                    [OK]
     widerplan/ubuntu-14.04                              Basic Ubuntu 14.04 builds with a few utili...   1                    [OK]
     breezeight/test-kitchen-ubuntu-14.04                Ubunti 14.04 with chef omnibus installed        1                    [OK]
     stevendgonzales/ubuntu-14.04-salt-minion            Ubuntu 14.04 with Salt-MInion                   0                    [OK]
     technopreneural/docker-ubuntu-14.04-bind9           Run DNS server using bind9 on Ubuntu 14.04      0                    [OK]
     technopreneural/docker-ubuntu-14.04-apache2         Apache2 on Ubuntu 14.04                         0                    [OK]
     syseleven/ubuntu-14.04-puppet3                      ubuntu-14.04-puppet3                            0                    [OK]
     technopreneural/docker-ubuntu-14.04-ruby            Ruby environment on Ubuntu 14.04                0                    [OK]
     thenewvu/ubuntu-14.04                               Ubuntu 14.04 + Nearby package repos             0                    [OK]
     simphonyproject/ubuntu-14.04-webapp                 Ubuntu 14.04 with backend framework suppor...   0                    [OK]
     libero18/ubuntu-14.04                                                                               0                    [OK]
     technopreneural/docker-ubuntu-14.04-php5            PHP5 environment on Ubuntu 14.04                0                    [OK]
     salttest/ubuntu-14.04                                                                               0                    [OK]
     technopreneural/docker-ubuntu-14.04-apt-cacher-ng   Run apt-cacher-ng on Ubuntu 14.04               0                    [OK]
     technopreneural/docker-ubuntu-14.04-mysql           MySQL on Ubuntu 14.04                           0                    [OK]
     seresearch/opendavinci-ubuntu-14.04                 Docker image with all Ubuntu 14.04 depende...   0                    [OK]
     zanox/kitchen-ubuntu-14.04                          Docker image for kitchen with ubuntu 14.04      0                    [OK]
     edentsai/ubuntu-14.04-openssh                       Official Ubuntu 14.04 LTS and OpenSSH serv...   0                    [OK]
     mba811/ubuntu-14.04                                 镜像ubuntu:14.04的容器                               0                    [OK]
     technopreneural/docker-ubuntu-14.04-puppetserver    Run puppetserver on Ubuntu 14.04                0                    [OK]
     simphonyproject/ubuntu-14.04-vncapp                 Ubuntu-14.04 with VNC application framework     0                    [OK]
     root@u14-vagrant:~#
    
  • Sau khi xác định được images muốn sử dụng, bạn sử dụng tiếp lệnh docker pull để kéo images từ internet về host cài docker của bạn.

1.3. Tải images từ Docker Hub về host

  • Ví dụ tải images có tên là ubuntu về host

     docker pull ubuntu
     kết quả lệnh docker pull ubuntu
  • Để tạo một container từ image ubuntu, sử dụng lệnh docker run ubuntu

1.4. Kiểm tra các images tồn tại trên host.

  • Sử dụng lệnh docker images để kiểm tra danh sách các images

     docker images
  • Kết quả:

     root@u14-vagrant:~# docker images
     REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
     ubuntu              latest              f753707788c5        4 weeks ago         127.2 MB
     hello-world         latest              c54a2cc56cbb        4 months ago        1.848 kB
     training/webapp     latest              6fae60ef3446        18 months ago       348.8 MB
     root@u14-vagrant:~#

1.5 Tạo container từ images

  • Trong các tài liệu thường hay sử dụng lệnh docker run hello-world để chạy một container, sau khi chạy xong container này nó sẽ thoát. Tuy nhiên, đa số chúng ta lại cần tương tác nhiều hơn nữa với container (thao tác nhiều hơn).

  • Để chạy container và tương tác với container ta sử dụng tùy chọn -it trong lệnh docker run. Ví dụ:

     docker run -it ubuntu
  • Kết quả:

     root@u14-vagrant:~# docker run -it ubuntu
    
     root@4a7b498636b6:/# cat /etc/*release
     DISTRIB_ID=Ubuntu
     DISTRIB_RELEASE=16.04
     DISTRIB_CODENAME=xenial
     DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"
     NAME="Ubuntu"
     VERSION="16.04.1 LTS (Xenial Xerus)"
     ID=ubuntu
     ID_LIKE=debian
     PRETTY_NAME="Ubuntu 16.04.1 LTS"
     VERSION_ID="16.04"
     HOME_URL="http://www.ubuntu.com/"
     SUPPORT_URL="http://help.ubuntu.com/"
     BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
     UBUNTU_CODENAME=xenial
     root@4a7b498636b6:/#
  • Trong ví dụ trên, lệnh docker run -it ubuntu sẽ tạo một container từ image có tên là ubuntu và tương tác luôn với nó. Lệnh cat /etc/*release sẽ hiển thị phiên bản container ở trên. Số 4a7b498636b6 là ID của container

  • Có thể mở tab khác và sử dụng lệnh docker events để xem các thông tin về việc tạo container trong ví dụ trên (tab này cần được mở và chạy lệnh docker events trước khi thực hiện tạo container)

     016-11-11T15:28:07.918591204+07:00 container start 4a7b498636b618728c7b00307708a0382bc0e6d7b28bba5534a91dfa30c46074 (image=ubuntu, name=goofy_hypatia)
     2016-11-11T15:28:07.921514758+07:00 container resize 4a7b498636b618728c7b00307708a0382bc0e6d7b28bba5534a91dfa30c46074 (height=32, image=ubuntu, name=goofy_hypatia, width=146)
  • Để thoát nhưng vẫn đảm bảo container được hoạt động, sử dụng tổ hợp phím CTL + p, sau đó CTL + q. Còn nếu thoát và dừng container thì sử dụng CTL + c

  • Sử dụng lệnh docker attach ID_Container để truy cập vào container sử dụng.

     root@u14-vagrant:~# docker attach 4a7b498636b6
     root@4a7b498636b6:/#
     root@4a7b498636b6:/#

2. Push – Pull images using Docker Hub.

  • Để push 1 image vừa tạo lên hub để chia sẻ với mọi người, thì ta cần tạo 1 tài khoản docker hub và login vào bằng câu lệnh
docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username:cosy294
Password:
Login Succeeded
  • Sau khi login thành công ta tiến hành push image lên hub
$ docker push cosy294/test
The push refers to a repository [cosy294/test]
255c5f0caf9a: Image successfully pushed

Trong đó: cosy294/test là tên images.

  • Lưu ý: Nếu bạn muốn push images lên docker hub thì tên images phải có dạng: cosy294/test, trong đó cosy294 là id dockerhub và test là tên repo.

  • Để Pull một image từ Docker Hub: docker pull {image_name}

3. Create and use Docker Registry: Local Images Repo.

  • Tạo môi trường chứa image. Docker đã hỗ trợ chúng ta cài đặt các môi trường này duy nhất trong 1 container. Rất là đơn giản, chúng ta chạy lệnh sau.
docker run -d -p 5000:5000 --name registry registry:2
  • Khi đó, port 5000 sẽ được listen. Mọi thao tác pull, push image sẽ được thực hiện trên port này.

  • Cấu hình docker để pull, push image từ registry vừa tạo: vi /etc/default/docker

DOCKER_OPTS="--insecure-registry 172.16.69.239:5000"
  • Trong đó, 172.16.69.239 là địa chỉ ip máy chứa registry tạo ở trên.
  • Sau khi cấu hình xong, ta khởi động lại docker
service docker restart
  • Các thao tác pull và push image tương tự ở như là pull, push ở docker hub.

Về GauDev

Tôi là Gau Dev - thích viết lách, tìm hiểu công nghệ mới và không ngừng học hỏi!
Xem tất cả các bài viết của GauDev →