1. EC2 포트 열어둔 상태
2. server starter로 EC2 서버 접속 (ubuntu)
3. docker 설치
sudo usermod -aG docker $USER
sudo 없이 도커 명령어 쓰기!
4. jenkins container
-v /var/run/docker.sock:/var/run/docker.sock
docker.sock : 도커 컨테이너 내부에서 데몬과 상호 작용을 할 수 있게 해주는 Unix 소캣
EC2의 도커 소켓( var/run/docker.sock )과 jenkins 내의 도커 소켓 ( var/run/docker.sock ) 을 연동한다.
jenkins에서 도커 명령어를 입력해도 서버에 반영되고, 반대로도 반영 된다.
도커 컨테이너 안에서 도커를 사용하기 위해 Host의 /var/run/docker.sock를 컨테이너에서 bind mount하는 것이다.
-v /home/jenkins:/var/jenkins_home \
서버의 /home/jenkins와 jenkins 컨테이너의 /var/jenkins_home이 공유폴더처럼 연동된다.
sudo mkdir /home/jenkins
sudo docker run \
--name jenkins \
-d \
-p 5000:8080 \
-p 50000:50000 \
--restart=always \
-v /home/jenkins:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-u root \
jenkins/jenkins:lts
# jenkins container 접속
docker exec -it jenkins /bin/bash
# linux 버전 확인
cat /etc/issue
# --------------- OS --------------------------------
# root@DESKTOP-R4P59B3:/home/opendocs# cat /etc/issue
# Ubuntu 20.04.4 LTS \n \l
# --------------- jenkins Container OS --------------------------------
# root@DESKTOP-R4P59B3:/home/opendocs# docker exec -it jenkins /bin/bash
# root@8fc963af71bb:/# cat /etc/issue
# Debian GNU/Linux 11 \n \l
# Docker 설치
## - Old Version Remove
apt-get remove docker docker-engine docker.io containerd runc
## - Setup Repo
apt-get update
apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
## - Install Docker Engine
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
docker logs -f jenkins 에서 jenkins 초기 비밀번호 가져온다
plugin 다운로드
계정 설정
ec2에 프로젝트 git clone 으로 가져옴.
프로젝트 안에서 dockerfile 만들어야 하는데
** vscode
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host jina
HostName 13.125.96.73
User ubuntu
IdentityFile ~/Desktop/ec2/jina.pem
vscode로 하기 위해 설정해야 함
ssh config
FROM dreamjh/morehae:2.0.0
WORKDIR /root/
COPY ./final-pjt-back .
CMD cd /root/final-pjt-back && gunicorn --bind 0.0.0.0:8000 movie_rand.wsgi:application
EXPOSE 8000/tcp
Dockerfile만들었음
docker build --tag movierand:lts .
ec2의 dockerfile 있는 위치에서 해당 도커파일로 이미지를 만든다.
docker run -itd -p 8000:8000 --restart=always --name movierand movierand:lts
컨테이너 만들어서 실행!
이 작업을 .... jenkins에서 자동화 해준다.
execute shell
docker stop movierand || true
docker rm movierand || true
docker rmi movierand:lts || true
docker build --tag movierand:lts .
docker run -itd -p 8000:8000 --restart=always --name movierand movierand:lts
front
FROM node:lts-alpine as build-stage
WORKDIR /app/
COPY ./final-pjt-front .
RUN npm install --force
RUN npm run build
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
도커파일만들고
build 했는데 안됨...
front 파일에서 npm i, npm run build 해서 dist 폴더 생성
ec2로 이동시키기 위해서 파일 압축하고
scp 명령어로 보낸다.
tar -cvf dist.tar dist/
scp -i '/c/Users/SSAFY/Desktop/jina_server/jina.pem' dist.tar ubuntu@52.78.128.112:~/
ec2 접속하면 ~ 위치에 압축파일이 존재한다.
tar -xvf dist.tar
docker cp dist/ jenkins:/root/
jenkins 안의 root로 옮겼다.
FROM nginx:stable-alpine as production-stage
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
도커파일
그냥 엔진엑스임...
docker stop front || true
docker rm front || true
docker rmi front:lts || true
docker build -t front:lts ./final-pjt-front
docker run -itd -p 80:80 --restart=always --name front front:lts
docker cp /root/dist front:/usr/share/nginx/html
빌드...
jenkins에서는 git 에서 가져온 소스랑 jenkins 내부의 파일만 이용할 수 있다.
(그래서 jenkins 로 dist를 옮겼던 것임..)
./final-pjt-front 위치에 있는 도커파일로 엔진엑스 컨테이너 만들고 jenkins /root에 있는 dist를 nginx html 폴더로 옮겨야 한다.
docker exec -it front sh
front(nginx) 접속하면 /usr/share/nginx/html 경로에 dist 폴더가 옮겨졌다.
근데 여기엔 폴더가 아니라 dist안에있는 html 파일이 있어야함..
cd dist
mv ./* ../
요렇게 폴더 안에 있는 파일을 옮겼다.
자동화
FROM nginx:stable-alpine as production-stage
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
docker stop front || true
docker rm front || true
docker rmi front:lts || true
docker build -t front:lts ./final-pjt-front
docker run -itd -p 80:80 --restart=always --name front front:lts
'Back-end' 카테고리의 다른 글
nginx 기본 정리 (기능, 설치, 구조, 실행) (0) | 2023.01.26 |
---|