[Docker] --link를 이용해 nginx와 jenkins 연결하기
며칠 전부터 Docker를 학습하고 있는데, 집에 있는 서버에 docker를 이용해 jenkins를 띄워보고 싶었다. jenkins 뿐만 아니라 여러가지 서비스를 nginx에 연결해서 사용하고 싶었다. nginx 역시 마찬가지로 docker로 사용하기로 했다.
설명을 보지 않고 바로 사용하고 싶다면 github을 보자.
docker에 기본 명령어는 설명하지 않을 것이다. 기본 설명은 여기를 참고하자.
hub.docker.com
hub.docker.com에는 docker 사용자들이 만들어 놓은 docker image 들이 존재하기 때문에 우리가 사용하고자 하는 image가 필요하다면 여기서 먼저 검색해보자.
jenkins 설치
jenkins 역시 docker hub에 존재한다.
먼저 jenkins image를 pull 받자.
$docker pull jenkins
jenkins docker image를 모두 pull 받았다면 컨테이너를 실행한다.
$docker run -p 8080:8080 -p 50000:50000 --name jenkins -v jenkins_home:/var/jenkins_home jenkins
- -p : host와 docker 에 8080 port와 50000 port를 연결
- --name : docker 컨테이너 이름
- -v : host directory(jenkins_home)과 docker directory(/var/jenkins_home)과 연결
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | daemon off; user www-data; worker_processes 2; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; use epoll; accept_mutex off; } http { include /etc/nginx/mime.types; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; client_max_body_size 300m; client_body_buffer_size 128k; gzip on; gzip_http_version 1.0; gzip_comp_level 6; gzip_min_length 0; gzip_buffers 16 8k; gzip_proxied any; gzip_types text/plain text/css text/xml text/javascript application/xml application/xml+rss application/javascript application/json; gzip_disable "MSIE [1-6]\."; gzip_vary on; include /etc/nginx/conf.d/*.conf; } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | server { listen 80; server_name ""; access_log off; location / { proxy_pass http://jenkins:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto http; proxy_max_temp_file_size 0; proxy_connect_timeout 150; proxy_send_timeout 100; proxy_read_timeout 100; proxy_buffer_size 8k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } } | cs |
- server_name (3라인) : 80 port로 접속 시 사용될 domain명
- "" 으로 설정하면 localhost(127.0.0.1)가 기본으로 셋팅된다.
- 예를 들어 210.192.168.12라는 IP에 jenkins.woniper.net이라는 도메인 호스트를 추가한 경우 server_name을 jenkins.woniper.net으로 설정 후 요청하면 nginx 내부적으로는 http://jenkins:8080 (8라인)으로 proxy하는 설정이다.
- proxy_pass (8라인) : localhost:80으로 접속 시 http://jenkins:8080으로 접속되는 설정
- jenkins는 앞서 생성한 jenkins docker 컨테이너 이름(--name jenkins)이다.
- 8080은 jenkins docker 컨테이너 생성 시 사용된 -d 8080:8080 포트를 의미한다.
3. Dockerfile 작성
다음은 Dockerfile을 작성할 것이다. Dockerfile은 docker image를 생성(build) 하기 위한 실행 파일이라고 생각하면된다. Dockerfile은 conf 디렉토리 밑에(../) 생성한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | FROM ubuntu:14.04 MAINTAINER woniper <leekw3747@gmail.com> RUN apt-get update && apt-get install -y nginx && rm -rf /var/lib/apt/lists/* RUN chown -R www-data:www-data /var/lib/nginx COPY conf/jenkins.conf /etc/nginx/conf.d/jenkins.conf COPY conf/nginx.conf /etc/nginx/nginx.conf VOLUME ["/data", "/etc/nginx", "/var/log/nginx"] WORKDIR /etc/nginx CMD ["nginx"] EXPOSE 80 EXPOSE 443 | cs |
- COPY (7,8라인) : host에 conf/jenkins.conf와 conf/nginx.conf 파일을 docker nginx에 복사한다. 복사 위치는 /etc/nginx 밑에 생성한다.
- conf/jenkins.conf 가 실행되기 때문에 conf 디렉토리 밑에 Dockerfile을 생성하는 것이다.
- --link : 앞서 생성한 jenkins docker 컨테이너와 run 명령어로 생성될 web과 연결
- 물론 -- link 명령어가 실행될 때는 연결하려는 docker 컨테이너(여기서는 jenkins docker 컨테이너)가 실행되어 있는 상태여야한다. (컨테이너 실행 확인 명령어 : $docker ps)
'컨테이너 > docker' 카테고리의 다른 글
Docker - Docker image 빌드시 Dockerfile이 아닌 커스텀한 dockerfile명을 이용할때 (0) | 2021.04.25 |
---|---|
Docker - Docker로 MongoDB 설치하기. (0) | 2021.04.25 |
Docker - docker oracle11g 설치 (0) | 2021.04.25 |
[Docker] nginx + spring-boot 연동 (0) | 2020.09.08 |
[Docker] 활용 사례 (1) | 2020.09.08 |
[Docker] 써야하는 이유 (0) | 2020.09.08 |
[Docker] 이미지와 컨테이너 (0) | 2020.09.08 |
[Docker] Docker란 무엇인가? (0) | 2020.09.08 |