[Setting | Docker] jenkins 설치

도커에 젠킨스를 설치하는 방법을 정리한다.


작성일 : 2022-05-28

1> 컨테이너 설치 및 실행

# 네트워크 확인 & opdnet IP 대역확인
sudo docker network ls
# - 없을 경우 생성
sudo docker network create --gateway 172.20.0.1 --subnet 172.20.0.0/21 opdnet
# - 네트워크 확인
sudo docker inspect opdnet
# ------------------------------------------
# IPAM > Config > Gateway와 같은대역 IP 지정해야함
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.20.0.0/16",
                    "Gateway": "172.20.0.1"
                }
            ]
        },
# Containers에 사용중인 IP는 중복되지 않아야함
        "Containers": {
            "d4c422b0ceb65ab5f45e2efe2c7da3137b7d66a985f3f222b1b974763529ea7c": {
                "Name": "sample",
                "EndpointID": "e0dc778cf7fe452b45c5bec1737050395c553d764de75f3a88aef565fe00166d",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.20.0.2/16",
                "IPv6Address": ""
            }
        },
# ------------------------------------------

# 컨테이너 설치 및 실행 (고정IP지정)
sudo mkdir /home/opendocs/jenkins
sudo docker run \
--name jenkins \
--network opdnet --ip 172.20.0.102 \
-d \
-p 8888:8080 \
-p 50000:50000 \
-v /home/opendocs/jenkins:/var/jenkins_home \
-u root \
jenkins/jenkins:lts

2> 젠킨스 접속

위와 같은 이미지가 뜨면 컨테이너 ID 로그로 비밀번호 확인

# CONTAINER ID 확인
sudo docker ps -a
# log 확인
sudo docker logs [CONTAINER ID]
-----------------------------------------
# 혹은 아래와 같이도 확인가능
## 1. 링크된 볼륨
cat /home/opendocs/jenkins/secrets/initialAdminPassword
## 2. 컨테이너 접속해서 확인
docker exec -it jenkins /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

3> 플러그인 설치


4> 간단한 계정생성과 접속주소 설정을 하면 설치완료

[Setting | Docker] Private Registry 구축 및 사용

생성한 도커이미지를 내부적으로 관리하기 위하여 registry 이미지를 설치하고 사용하는 방법을 정리한다.


작성일 : 2022-05-27

1> 컨테이너 설치 및 실행

docker run -dit --name registry -p 5000:5000 registry
# --name : 컨테이너명
# -p : 할당포트
# -d : 백그라운드모드

2> 이미지 빌드

sudo docker build --tag 127.0.0.1:5000/nginx-opendocs:1.0 .

3> 이미지 푸시

sudo docker push 127.0.0.1:5000/nginx-opendocs:1.0

[Setting | Docker] NGINX 설치

도커에 환경 설정 파일을 변경하여 NGINX를 설치(Dockerizing)하는 방법을 정리한다.


작성일 : 2022-05-27

1> Dockerizing

Docker 컨테이너를 사용하여 어플리케이션을 패킹 & 배포하는 과정을 말함
아래와 같이 설정파일 (Dockerfile)과 리소스를 빌드하여 이미지를 배포함


2> conf.d폴더에 default.conf 파일 생성

server {
    listen       80;
    server_name  van.com;
    location / {
        root   /mnt/c/_Work/source/home;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

3> (변경 필요시) nginx.conf 파일 생성

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    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;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

4> Dockerfile 생성

# nginx최신 stable 버전 컨테이너를 커스텀
FROM nginx:1.22.0

# 기존 설정파일 삭제
RUN rm /etc/nginx/conf.d/default.conf
# 수정한 설정파일을 복사
COPY conf.d/default.conf /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/nginx.conf

# nginx 기동
CMD ["nginx", "-g", "daemon off;"]

# 포트는 80
EXPOSE 80

5> 컨테이너 생성 및 실행

Dockerfile이 위치한 같은 폴더에서 실행해야함

# 이미지 빌드
sudo docker build --tag nginx-opendocs:1.0 .

# 네트워크 확인 & opdnet IP 대역확인
sudo docker network ls
# - 없을 경우 생성
sudo docker network create --gateway 172.20.0.1 --subnet 172.20.0.0/21 opdnet
# - 네트워크 확인
sudo docker inspect opdnet
# ------------------------------------------
# IPAM > Config > Gateway와 같은대역 IP 지정해야함
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.20.0.0/16",
                    "Gateway": "172.20.0.1"
                }
            ]
        },
# Containers에 사용중인 IP는 중복되지 않아야함
        "Containers": {
            "d4c422b0ceb65ab5f45e2efe2c7da3137b7d66a985f3f222b1b974763529ea7c": {
                "Name": "sample",
                "EndpointID": "e0dc778cf7fe452b45c5bec1737050395c553d764de75f3a88aef565fe00166d",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.20.0.2/16",
                "IPv6Address": ""
            }
        },
# ------------------------------------------

# 컨테이너 설치 및 실행 (고정IP지정)
sudo docker run \
--name nginx-opendocs \
--network opdnet --ip 172.20.0.100 \
-d -p 80:80 \
-it \
-v /mnt:/mnt \
nginx-opendocs:1.0

6> 컨테이너 쉘에 접속하여 확인

컨테이너와 OS간 공유볼륨(5>에서 생성된 볼륨 > /mnt) 확인도 필요함

sudo docker run --rm -it nginx-opendocs:1.0 /bin/bash