Cấu hình Docker sử dụng HTTP Proxy Server

Cấu hình Docker sử dụng HTTP Proxy ServerCuongquach.com | Khi dịch vụ Docker của bạn được chạy trong một hệ thống mạng nội bộ, ngăn biệt với hệ thống public internet thì khá là khó khăn để có thể ‘pull‘ những Docker Image từ bên ngoài như Docker Hub, kết nối public từ Docker Container đang chạy. Vậy thì thường các hệ thống đó sẽ có một máy chủ proxy đi public như Squid và các máy chủ nội bộ sẽ đi thông qua máy chủ này để đảm bảo vấn đề bảo mật nhưng vẫn kết nối Internet public được.

Nhu cầu chúng ta trong bài này, đó là cấu hình dịch vụ Docker sử dụng thông tin HTTP Proxy Server để kết nối Internet Public cho phép tải các Docker Image về sử dụng hoặc cho Docker Container đi public internet qua Proxy Server. Nếu không thì bạn sẽ hay gặp các trường hợp lỗi như sau .

Creating network "nginx_default" with the default driver
Pulling nginx (nginx:latest)...
ERROR: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

Vậy bài viết sẽ giúp bạn xử lý 3 trường hợp:

  • Pull image từ Docker public khi dùng lệnh ‘docker pull‘.
  • Pull image base khi build Docker Image.
  • Kết nối internet public từ Docker Container

cau-hinh-docker-su-dung-http-proxy-server

Contents

1. Pull docker image

Đây là mô hình đầu tiên đó là cấu hình thông tin HTTP Proxy Server để dịch vụ Docker có thể kết nối ra Internet Public. Docker client sẽ tạo các truy vấn REST đến dịch vụ Docker, từ đó dịch vụ Docker sẽ đảm nhận các phần việc còn lại.

Tạo một file chứa thông tin biến môi trường về Proxy Server dành cho Docker sử dụng.

+ CentOS 6

# vi /etc/sysconfig/docker
http_proxy="http://10.13.92.251:3128"
https_proxy="http://10.13.92.251:3128"
no_proxy="127.0.0.1, localhost"

+ CentOS 7

# vi /etc/sysconfig/docker
http_proxy="http://10.13.92.251:3128"
https_proxy="http://10.13.92.251:3128"
no_proxy="127.0.0.1, localhost"

Xác định file khởi động của dịch vụ Docker.

+ systemd (CentOS 7+ / Ubuntu 16.04+)

# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
...

Yeah, file khởi động dịch vụ Docker trên hệ thống systemd đây : /usr/lib/systemd/system/docker.service

Giờ thêm dòng cấu hình sau vào file này dưới section [Service] , để khi dịch vụ Docker khởi động lại sẽ load các biến môi trường từ file ‘/etc/sysconfig/docker‘ mà bạn quy định.

# vi /usr/lib/systemd/system/docker.service
..
[Service]
EnvironmentFile=/etc/sysconfig/docker
..

Khởi động lại dịch vụ Docker để load thông tin biến môi trường.

# systemctl daemon-reload
# systemctl restart docker

Thử pull lại Docker Image nào.

# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
6ae821421a7d: Pull complete
da4474e5966c: Pull complete
eb2aec2b9c9f: Pull complete
..

+ init (CentOS 6- / Ubuntu 14.04-)
Tạo file môi trường thông tin proxy server cho docker.

# vi /etc/default/docker
export http_proxy="http://10.13.92.251:3128"
export https_proxy="http://10.13.92.251:3128"
export no_proxy="127.0.0.1, localhost"

Với CentOS 6 thì nếu file /etc/default/docker không work, thì bạn cho nội dung proxy vào file /etc/sysconfig/docker thử rồi restart như dưới.

Khởi động lại dịch vụ Docker.

# service docker restart

2. Build docker image

Khi mà bạn build một Docker Image thì dịch vụ Docker sẽ khởi tạo một Container từ Base Image để build cũng như hoạt động khác là Docker Container được khởi chạy từ Image, thì các Container này cũng có nhu cầu truy xuất Internet Public qua HTTP Proxy Server.

Khi build docker image thì bạn cần truyền các biến môi trường riêng về thông tin Proxy Server cho quá trình build hoạt động xử lý tải dữ liệu từ bên ngoài public như cài đặt chương trình, cập nhật chương trình,…

# docker build \
--build-arg http_proxy=http://10.13.92.251:3128 \
--build-arg https_proxy=http://10.13.92.251:3128 \
-t yourimage .

3. Docker Container sử dụng Proxy

Bạn cần truyền biến môi trường về Proxy Server vào trong Container khi chạy một Docker Container từ Image . Lúc này Container sẽ có thông tin về HTTP Proxy Server để có thể thực hiện các kết nối public khi có nhu cầu.

# docker run \
--env http_proxy=http://10.13.92.251:3128 \
--env https_proxy=http://10.13.92.251:3128 \
myimage

Khá là đơn giản để xử lý tình huống sử dụng Docker trong hệ thống nội bộ cần kết nối Proxy Server để có thể kết nối Internet public. Chúc các bạn thành công.

Nguồn: https://cuongquach.com/

Previous articleTài liệu Quản Trị Mạng MCSA 2012 Lab – Windows Server 70-410 – TT Nhất Nghệ
Next articleGiáo trình Mạng Máy Tính Tổng Hợp (PDF)
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !