OS : Ubuntu 20.04
IDE : Intellij
vscode
node : 14.17.0
jdk : 11
MariaDB : 10.6
Docker version : 20.10.18
jenkins : lts
python : 3.9.14
FrontEnd: 80
BackEnd: 8080
MariaDB: 3306
Django : 9999
Jenkins: 8085
Redis : 6379
sudo apt-get update
sudo apt-get upgrate
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo chmod 666 /var/run/docker.sock
# 설치 되어있는지 확인 유무는
docker --version
docker-compose --version
docekr volume create {볼륨 이름}
# docker volume create jenkins
# docker volume create mariadb
docker volume ls
#로 확인
docker volume inspect {}
# inspect 명령어를 사용하여 세부 정보 확인
#docker volume
docker image pull {이미지이름 : 이미지 이름 : 버전}
#docker image pull jenkins/jenkins:lts
docker run --name {container 이름} -p {내가 노출하고자 하는 포트(웹으로 접속)}:8080 -p {java api 포트 주로 그대로 가져가는 듯?(50000)으로}:50000 -d -v /var/run/docker.sock:/var/run/docker.sock -v {jenkins 볼륨 이름}:{실질적으로 jenkins 볼륨이 저장될 위치} -u root jenkins/jenkins:lts
## 실제 예시 0831에 추가해야지
# sudo docker run -d -p 8085:8080 -p 50000:50000 -v /var/run/docker.sock:/var/run/docker.sock -v jenkins:/var/jenkins_home -v /homw/ubuntu/.ssh:/root/.ssh --name jenkins -e TZ=Asia/Seoul jenkins/jenkins:lts
순서대로 설명을 하면 docker run 은 도커를 실행하는 명령어 이고
$USER 부분은 각자의 계정명을 넣으면 된다.
sudo chmod 666 /var/run/docker.sock
sudo usermod -aG docker $USER
docker exec -it {contianer 이름} /bin/bash
docker exec -it -u root {container 이름} /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword
apt-get update && \ apt-get upgrade && \ apt-get -y install apt-transport-https \ ca-certificates \ curl \ gnupg2 \ software-properties-common && \ curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \ add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \ $(lsb_release -cs) \ stable" && \ apt-get update && \ apt-get -y install docker-ce
apt-get update && \
apt-get upgrade && \
apt-get -y install apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \ add-apt-repository \ "deb [arch=arm64] https://download.docker.com/linux/(. /etc/os-release; echo "$ID") \
$(lsb_release -cs) \
stable" && \
apt-get update && \
apt-get -y install docker-ce
이렇게 완료를 했으면 젠키스에 접속하여 설정을 진행한다.
-> 기본적으로 recommand로 진행하여 설치하였다.
젠킨스에 접속하여 플러그인 관리쪽으로 가서 필요한 플러그인들을 설치한다.
일단 난 docker & git & gitlab 과 관련된 플러그인들은 거의다 설치 했다.
그후
jenkins 새 아이템 생성을 하여 진행을 한다.
Repository URL 은 HTTPS 접근으로 복사 하여야 한다. = 빨간색 동그라미 클릭
그리고 주소를 복사하고 credentials 를 클릭하여 아래와 같이 완성을 한다.
ssh 접근을 사용한다면 좀 다른 방식으로 되겠지만
현재는 깃랩 id/ pw로 접근하는 설정이니 아래와 같이 완성작성하고 add를 누르고 방금전 생성한 계정으로 credentials를 설정해주면 gitlab 주소에 빨간 줄로 뜨는 에러가 사라진다.
Branches to build는 내가 원하는 branch 에서 push 이벤트가 발생할때 하게 끔 설정할 수 있다.
web hook 연결을 위해서
아래의 빌드 유발에서 URL 을 복사해두고, 고급을 클릭해서 나머지는 default 그대로 두고, secret token에서 generate 해서 내용을 복사해둔다.
그리고 build steps 에서 Add build step
클릭하여 내가 원하는 커멘드를 써주면 된다.
아래의 내용은 exec shell에 들어가는 내용과 각각의 코드 폴더에 최상단 내에존재하는 Dockerfile 내용이다.
cd {spring 이 있는 폴더}
chmod +x gradlew
./gradlew build
docker login -u {dockerhub 계정} -p {docker 비밀번호}
docker build -t {dockerhub 계정}/{이미지}:{버전} .
docker push {dockerhub 계정}/{이미지}:{버전}
docker stop {컨테이너 이름} && docker rm {컨테이너 이름}
docker run -d -p {밖에 노출되는 포트}:8080 --name {컨테이너 이름} {dockerhub 계정}/{이미지}:{버전}
Dockerfile
# Start with a base image containing Java runtime
FROM openjdk:{자바 버전}
# Add Author info
# 임시로 minseo의 이메일 저장
LABEL maintainer="test@test.com"
# Add a volume to /tmp
VOLUME /tmp
# Make port 8080 available to the world outside this container
EXPOSE 8080
# The application's jar file
ARG JAR_FILE=./build/libs/DongHang-0.0.1-SNAPSHOT.jar//
# Add the application's jar to the container
COPY ${JAR_FILE} a504.jar
# Run the jar file
ENTRYPOINT ["java","-jar","/a504.jar"]
cd {react파일이 있는 폴더}
docker login -u {dockerhub 계정} -p {docker 비밀번호}
docker build -t {dockerhub 계정}/{이미지}:{버전} .
docker push {dockerhub 계정}/{이미지}:{버전}
docker stop {컨테이너 이름} && docker rm {컨테이너 이름}
docker run -d -p {밖에 노출되는 포트}:80 --name {컨테이너 이름} {dockerhub 계정}/{이미지}:{버전}
Dockerfile
FROM node:latest as builder
# 작업 폴더를 만들고 npm 설치
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
ENV PATH /usr/src/app/node_modules/.bin:$PATH
COPY package.json /usr/src/app/package.json
RUN npm install --force
# force로 설정한 이유 : react 버전 18 로 처리를 해야하는데, 문제가 발생하여 강제처리를 하기 위해서
# 소스를 작업폴더로 복사하고 빌드
COPY . /usr/src/app
RUN npm run build
FROM nginx:latest
# nginx의 기본 설정을 삭제하고 앱에서 설정한 파일을 복사
RUN rm -rf /etc/nginx/conf.d
COPY conf /etc/nginx
# 위에서 생성한 앱의 빌드산출물을 nginx의 샘플 앱이 사용하던 폴더로 이동
COPY --from=builder /usr/src/app/build /usr/share/nginx/html
# 80포트 오픈하고 nginx 실행
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
cd {django 파일이 있는 폴더}
docker login -u {dockerhub 계정} -p {docker 비밀번호}
docker build -t {dockerhub 계정}/{이미지}:{버전} .
docker push {dockerhub 계정}/{이미지}:{버전}
docker stop {컨테이너 이름} && docker rm {컨테이너 이름}
docker run -d -p {밖에 노출되는 포트}:80 --name {컨테이너 이름} {dockerhub 계정}/{이미지}:{버전}
Dockerfile
FROM python:3.9.13
#내가 원하는 파이썬 버전
LABEL maintainer="test@test.com"
RUN pip install --upgrade pip
# pip 설치
WORKDIR /usr/src/app
# /usr/src/app 이라는 디렉토리 생성
COPY . .
# 현재 폴더 내용을 복사
WORKDIR ./donghang
#manage.py를 실행할 수 있는 디렉토리로 이동합니다.
RUN pip install -r requirements.txt
# 내 장고 설정들을 저장한 requirements.txt
# pip freeze > requirements.txt 로 추출
# manage.py와 같은 위치에 둔다.
CMD ["python3", "manage.py", "runserver", "0.0.0.0:8080"]
#이동한 디렉토리에서 django를 가동시켜주는 코드를 작성합니다. 여기서 port는 8000로 실행시키겠습니다.
EXPOSE 8080
작업을 마치면 저장을 한후, git lab 페이지로 돌아와 webhook을 작성해준다.
위에 보이는 웹훅을 클릭해서 들어가서 아까 복사해둔 URL 과 token을 여기에 저장을한다.
trigger에서 push 이벤트가 발생했을때를 클릭하여 원하는 브랜치를 설정한다.
아까 위에서 설정한 브랜치와 동일한 이름 이어야 한다.
아래로 내려와 test push event설정후 200이 뜬다면 save changes 를 하면 끝이 난다.
젠킨스에서 빌드 시 아래와 같은 권한 에러 발생
🚨 Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied
docker exec -it -u root jenkins /bin/bash
chmod 666 /var/run/docker.sock
sudo crontab -e
@reboot sudo chmod 666 /var/run/docker.sock
위와 같은 에러가 발생할 경우
🚨 Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied
sudo chmod 666 /var/run/docker.sock
앞의 내 블로그 내용으로 설정을 함.
mariadb 설정
docker run --name redis -d -p 6379:6379 -v redis:/data redis --requirepass "{비밀번호}"