[Docker, EC2] Docker Private Registry를 활용한 EC2 서버 배포

Aubri·2023년 5월 28일
0

Aubri on AWS

목록 보기
1/1

How to deploy Node.js server app to EC2 Instance, using Docker Private Registry.

Making Priavte Registry

ec2 로그인

% ssh -i private-key.pem ec2-user@{your-own-ec2-service-address}.ap-northeast-1.compute.amazonaws.com
$ sudo yum install docker

$ sudo usermod -aG docker ec2-user

$ mkdir -p ~/docker-registry/cert
$ cd ~/docker-registry/cert
$ openssl req -new -key server.key -out server.csr

Country Name (2 letter code) [XX]:KR
State or Province Name (full name) []:Seoul
Locality Name (eg, city) [Default City]:Seoul
Organization Name (eg, company) [Default Company Ltd]:DreamIn
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:3.34.199.130
Email Address []:


$ nano server.ext

# cat server.ext
subjectAltName = @alt_names

[alt_names]
IP = 내 서버 ip 주소

## 꼭 이거를 해줘야 SAN -> 로그인이 잘 된다.. 이ㅓㄱ 때문에 삽질 많이 했다ㅠ


$ openssl x509 -req -days 365 -extfile server.ext -in server.csr -signkey server.key -out server.crt

$ openssl rsa -in server.key.origin -out server.key
$ cp server.key server.key.origin
$ openssl rsa -in server.key.origin -out server.key

Enter pass phrase for server.key.origin:
writing RSA key

$ cd ~/docker-registry/auth

$ htpasswd -Bbn admin(유저네임) 비밀번호 > ./htpasswd

$ mkdir -p ~/docker-registry/volume

#run registry
$ docker run -d \
-p 5000:5000 \
--restart=always \
--name dreamin-registry \
-v ~/docker-registry/auth:/auth \
-e REGISTRY_AUTH=htpasswd \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-v ~/docker-registry/volume:/data \
-e REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data \
-v ~/docker-registry/cert:/certs \
-e REGISTRY_HTTP_TLS_KEY=/certs/server.key \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt \
registry

#running 확인
$ curl -k https://ip address:443/v2/

내 맥에 파일 다운 받는 법

% scp -r -i ~/Downloads/private-key.pem ec2-user@{ec2-instance-public-domain}.ap-northeast-1.compute.amazonaws.com:~/docker-registry/cert ~/Desktop

맥에서 할 것

$ docker login ip adress --username 유저네임(admin)
$ docker build --platform amd64 -t dream-in-server:0.2.0 .
$ docker tag dream-in-server:0.2.0 {ec2 public ip}:5000/dream-in-server:0.2.0
$ docker push {ec2 public ip}:5000/dream-in-server:0.2.0  

CA 등록 : 이걸 해야 CA가 등록돼서, 도커 로그인이 가능하다..

$ sudo mkdir -p /etc/docker/certs.d/{pub ip}:5000/
$ sudo cp server.crt /etc/docker/certs.d/{pub ip}:5000/

도커 풀/런

$ docker login {ip address}:5000
$ docker pull 3.34.199.130:5000/dream-in-server:0.1.1
$ sudo systemctl restart docker

나는 .env 파일이 있고, 그거를 사용해야 하기 때문에 해당 파일을 인스턴스에 생성해준뒤 런할 때 전달 해줬다.

$ mkdir ~/docker-env
$ cd docker-env/
$ vim .env

내용 쓰기

$ docker run -d -p 80:8080 --name dream-in-server-container -v ~/docker-env/.env:/usr/src/app/.env 3.34.199.130:5000/dream-in-server:0.1.2

80-> 8080 으로 해서 https 적용 전에 자동으로 http 요청을 리다이렉트 할수 있도록 도커 컨테이너 런해준다.

##기본 명령어들
$ sudo systemctl restart docker  //docker 재시작


$ docker ps  //running 보기
$ docker ps -a | grep dreamin-registry  // 특정 컨테이너? 보기
$ docker images
$ docker logs {이미지 id or name}
$ docker rm 삭제할 컨테이너
$ docker image rm {삭제할 이미지 id/name}

Node.js 에서 Dockerfile 작성

#Dockerfile

FROM node:14
WORKDIR /usr/src/app
COPY package*.json .
RUN npm install
RUN npm i pm2 -g
COPY . .
EXPOSE 8000
CMD [ "pm2-runtime", "start","index.js" ]
#.dockerignore

#dependencies
/node_modules

#misc
.env


npm-debug.log*
yarn-debug.log*
yarn-error.log*

출처 저의 생명의 은인들
ec2 에서 registry만드는 법
https://junhyunny.github.io/information/docker/make-private-docker-registry-on-ec2/
https://bitgadak.tistory.com/5
https://docs.docker.com/registry/

nodejs/ec2 docker 적용
https://velog.io/@whrod/node.js-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-DockerEC2-%EB%B0%B0%ED%8F%AC
https://www.daleseo.com/docker-nodejs/
https://junhyunny.github.io/information/docker/install-docker-registry-on-ec2/

참고 했는지 안했는지 모르겠지만 열려 있었던 문서 중 일부..
https://velog.io/@nellholic108/Docker-EC2-%EB%A1%9C-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0
https://wooono.tistory.com/119

profile
Delivering Happiness.

0개의 댓글