Docker Registry là gì?
Docker registry là nơi chứa các image trong quá trình khởi động các container. Khi sử dụng câu lệnh docker pull để pull image về tức là chúng ta kết nối đến Docker hub chính thức. Ở đó bạn có thể tạo và lưu trữ image cho mình nhưng nếu không trả phí bạn phải public image của bạn. Nếu muốn lưu trữ Docker image sử dụng nội bộ chúng ta phải triển khải Docker Registry cho riêng mình. Bài viết này sẽ hướng dẫn các bạn tạo và sử dụng Private Docker Registry trên Localhost.
Xem thêm:
Truyền lệnh từ Host vào Docker Container
Sử dụng Docker: Export/Import, Save/Load Container
Tạo và sử dụng Docker Registry
Cài đặt Docker Registry và Web UI
Để cài đặt Docker Registry, trước hết phải cài đặt Docker cho server, nếu chưa cài đặt bạn có thể xem hướng dẫn tại đây
Cài đặt Docker Registry
Cài đặt Docker Registry v2 bằng lệnh sau:
docker run -d -p 5000:5000 --restart=always --name registry-srv registry:2
Trong đó
- registry-srv -> tên container.
- -p 5000:5000 -> map port 5000 của host và container
- –restart=always -> luôn luôn bật container
- registry:2 -> tên image
Cài đặt Web UI cho Registry
Trước khi cài đặt Web UI chúng ta tạo file config bằng cách sau:
mkdir -p /opt/conf cd /opt/conf nano config.yml
Thêm nội dung file như sau:
registry: # Docker registry url url: http://registry-srv:5000/v2 # Docker registry fqdn name: localhost:5000 # To allow image delete, should be false readonly: false auth: # Disable authentication enabled: false
Trong đó
- readonly: false -> cho phép xóa image
- enabled: false -> không cần login registry
Cài đặt Web UI cho Registry bằng lệnh sau:
docker run -it -p 8080:8080 --restart=always --name registry-web --link registry-srv -v $(pwd)/config.yml:/conf/config.yml:ro hyper/docker-registry-web
Trong đó
- registry-web -> tên container.
- -p 8080:8080 -> map port 8080của host và container
- –restart=always -> luôn luôn bật container
- –link registry-srv -> liên kết với docker registry container đã tạo ở trên
- hyper/docker-registry-web -> tên image
Sau khi cài đặt xong các bạn truy cập vào Registry Server theo đường dẫn http://IP:8080 Kết quả trả về như sau là cài đặt thành công.
Sử dụng
Để kiểm tra Docker registry hoạt động hay không, từ một máy client bất kì đã cài docker, ta tiến hành test như sau:
Pull Centos Image
[root@localhost ~]# docker pull centos:latest Trying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos aeb7866da422: Pull complete Digest: sha256:67dad89757a55bfdfabec8abd0e22f8c7c12a1856514726470228063ed86593b Status: Downloaded newer image for docker.io/centos:latest [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos latest 75835a67d134 33 hours ago 200 MB [root@localhost ~]#
Tạo image tag cho registry
docker image tag centos 192.168.1.93:5000/centos:latest
Push image lên Docker Registry
Với môi trường Localhost chúng ta sẽ gặp lỗi security về https như sau:
[root@localhost ~]# docker push 192.168.1.93:5000/centos:latest The push refers to a repository [192.168.1.93:5000/centos] Get https://192.168.1.93:5000/v1/_ping: http: server gave HTTP response to HTTPS client
Để fix lỗi trên, có 2 trường hợp
- Đối với docker-io bạn chỉnh sửa file /etc/docker/daemon.json và thêm vào dòng { “insecure-registries”:[“192.168.1.93:5000”] }
- Đối với docker ce: chỉnh sửa file /usr/lib/systemd/system/docker.service. Tìm đến dòng ExecStart=/usr/bin/dockerd
thay thế bằng ExecStart=/usr/bin/dockerd –insecure-registry 192.168.1.93:5000 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock - Sau đó thực thi lệnh systemctl daemon-reload và systemctl restart docker để khởi động lại docker
Tiến hành push image sau khi fix lỗi https
[root@localhost ~]# docker push 192.168.1.93:5000/centos:latest The push refers to a repository [192.168.1.93:5000/centos] f972d139738d: Pushed latest: digest: sha256:dc29e2bcceac52af0f01300402f5e756cc8c44a310867f6b94f5f7271d4f3fec size: 529
Refresh lại Web UI nếu kết quả như bên dưới là thành công
Pull thử image vừa push
[root@localhost ~]# docker pull 192.168.1.93:5000/centos:latest Trying to pull repository 192.168.1.93:5000/centos ... latest: Pulling from 192.168.1.93:5000/centos aeb7866da422: Pull complete Digest: sha256:dc29e2bcceac52af0f01300402f5e756cc8c44a310867f6b94f5f7271d4f3fec Status: Downloaded newer image for 192.168.1.93:5000/centos:latest
Trên đây là cách đơn giản để Tạo và sử dụng Docker Registry trong môi trường localhost phục vu học tập, nghiên cứu cũng như làm việc. Chúc các bạn thành công.