2015-01-04 20 views
15

Tôi chỉ mới bắt đầu sử dụng Docker và theo hướng dẫn sau đây: https://docs.docker.com/engine/admin/using_supervisord/Làm thế nào để sử dụng docker container như máy chủ apache?

FROM ubuntu:14.04 
RUN apt-get update && apt-get upgrade 
RUN apt-get install -y openssh-server apache2 supervisor 
RUN mkdir -p /var/lock/apache2 /var/run/apache2 /var/run/sshd /var/log/supervisor 
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf 
EXPOSE 22 80 
CMD ["/usr/bin/supervisord"] 

[supervisord] 
nodaemon=true 

[program:sshd] 
command=/usr/sbin/sshd -D 

[program:apache2] 
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND" 

xây dựng và chạy:

sudo docker build -t <yourname>/supervisord . 
sudo docker run -p 22 -p 80 -t -i <yourname>/supervisord 

Câu hỏi của tôi là, khi Docker chạy trên máy chủ của tôi với IP http://88.xxx.x.xxx/, làm cách nào tôi có thể truy cập vào localhost apache chạy bên trong vùng chứa docker từ trình duyệt trên máy tính của tôi? Tôi muốn sử dụng một container docker như một máy chủ web.

Trả lời

20

Bạn sẽ phải sử dụng cổng chuyển tiếp để có thể truy cập vào thùng chứa Docker của bạn từ thế giới bên ngoài.

Từ Docker docs:

By container Docker mặc định có thể làm cho các kết nối với thế giới bên ngoài, nhưng thế giới bên ngoài không thể kết nối với container.

Nhưng nếu bạn muốn các thùng chứa chấp nhận các kết nối đến, bạn sẽ cần cung cấp các tùy chọn đặc biệt khi gọi docker run.

Vì vậy, điều này có nghĩa là gì? Bạn sẽ phải chỉ định một cổng trên máy chủ của bạn (thường là cổng 80) và chuyển tiếp tất cả các kết nối trên cổng đó đến vùng chứa docker. Vì bạn đang chạy Apache trong vùng chứa docker của bạn, bạn có thể muốn chuyển tiếp kết nối đến cổng 80 trên vùng chứa docker.

Điều này được thực hiện tốt nhất thông qua tùy chọn -p cho lệnh docker run.

sudo docker run -p 80:80 -t -i <yourname>/supervisord 

Phần lệnh cho biết -p 80:80 có nghĩa là bạn chuyển tiếp cổng 80 từ máy chủ đến cổng 80 trên vùng chứa.

Khi cài đặt này được thiết lập chính xác, bạn có thể sử dụng trình duyệt để lướt lên http://88.x.x.x và kết nối sẽ được chuyển tiếp đến vùng chứa như dự định.

Docker docs mô tả kỹ lưỡng tùy chọn -p. Có một vài cách để xác định lá cờ:

# Maps the provided host_port to the container_port but only 
# binds to the specific external interface 
-p IP:host_port:container_port 

# Maps the provided host_port to the container_port for all 
# external interfaces (all IP:s) 
-p host_port:container_port 

Edit: Khi câu hỏi này ban đầu được đăng tải không có thùng chứa Docker chính thức cho máy chủ web Apache. Bây giờ, một phiên bản hiện có tồn tại.

Cách đơn giản nhất để khởi động và chạy Apache là sử dụng official Docker container. Bạn có thể bắt đầu nó bằng cách sử dụng lệnh sau:

$ docker run -p 80:80 -dit --name my-app -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4 

Bằng cách này bạn chỉ cần gắn một thư mục trên hệ thống tập tin của bạn để nó có sẵn trong các thùng chứa Docker và cổng máy chủ của bạn được chuyển tiếp đến các cảng container như mô tả ở trên .

+0

Có thể truy cập Apache trong vùng chứa như vậy bằng cách duyệt đến tên miền được đặt tên chứ không phải địa chỉ IP không? Tôi có một container chạy mà tôi có thể truy cập bằng cách duyệt đến 'http: // 127.0.0.1 /', nhưng tôi muốn thay đổi nó thành, ví dụ, 'http: // website.localhost /'. –

+0

Nó bằng cách nào đó không hoạt động như thế. Ngoài ra, tôi đã thêm một máy chủ Nginx để yêu cầu từ trang web.localhostto 127.0.0.1, sau đó nó hoạt động. –

12

Có một hình ảnh chính thức cho apache. Tài liệu hình ảnh chứa hướng dẫn về cách bạn có thể sử dụng hình ảnh chính thức này làm cơ sở cho hình ảnh tùy chỉnh.

Để xem cách nó được thực hiện mất một peek tại Dockerfile sử dụng bởi các hình ảnh chính thức:

https://github.com/docker-library/httpd/blob/master/2.4/Dockerfile

Ví dụ

Đảm bảo các file có thể truy cập để nhổ tận gốc

sudo chown -R root:root /path/to/html_files 

Máy chủ này tệp sử dụng hình ảnh docker chính thức

docker run -d -p 80:80 --name apache -v /path/to/html_files:/usr/local/apache2/htdocs/ httpd:2.4 

tập tin có thể truy cập trên cổng 80.

Các vấn đề liên quan