๐Ÿณ [Docker] AWS EC2์— Docker Registry ์„ค์น˜ํ•˜๊ธฐ

Uk-Jakeยท2024๋…„ 11์›” 27์ผ

Docker

๋ชฉ๋ก ๋ณด๊ธฐ
11/11
post-thumbnail

0. ๋“ค์–ด๊ฐ€๋ฉด์„œ

Docker ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ๋‚˜๋ฉด, ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด๋‚˜ ํŒ€์›๋“ค๊ณผ ์ด๋ฏธ์ง€๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด ๋ณดํ†ต Docker Hub๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐœ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์ธ Docker Hub๋Š” ๊ฐ„ํŽธํ•˜์ง€๋งŒ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ์ด๋ฏธ์ง€๊ฐ€ ์™ธ๋ถ€์— ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ณด์•ˆ ๋ฌธ์ œ
  • ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ ์†Œ์œ ๊ถŒ์ด Docker์— ์žˆ๋‹ค๋Š” ์ 

ํŠนํžˆ ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋ผ์ด๋น— ์ด๋ฏธ์ง€๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์ž์ฒด์ ์ธ ํ”„๋ผ์ด๋น— Docker ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ๋น„์šฉ ์ ˆ๊ฐ: Docker Hub์˜ ์ €์žฅ ๋น„์šฉ ์ ˆ๊ฐ
  • ๋ฐ์ดํ„ฐ ๋ณด์•ˆ ๊ฐ•ํ™”: ์™ธ๋ถ€ ๋…ธ์ถœ์„ ๋ฐฉ์ง€
  • ๋ฐ์ดํ„ฐ ์†Œ์œ ๊ถŒ ๊ด€๋ฆฌ: ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์Šค์Šค๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ

์˜ค๋Š˜์€ AWS EC2์— Docker Registry๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ“‹ ์‚ฌ์ „ ์ค€๋น„

์ด๋ฒˆ ์‹ค์Šต์€ EC2์— Docker๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. EC2 ์ƒ์„ฑ ๋ฐ Docker ์„ค์น˜ ๋ฐฉ๋ฒ•์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”:


โš™๏ธ ์‹ค์Šต ํ™˜๊ฒฝ

  • Local OS: Mac (Apple M2)
  • EC2 OS: Ubuntu 22.04

1. ๋„์ปค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ

  1. Docker Registry ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ
(EC2) docker pull registry
  1. Registry ์ด๋ฏธ์ง€๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰
(EC2) docker run -d --name private-registry -p 5000:5000 registry

2. EC2 ์ธ์Šคํ„ด์Šค ํฌํŠธ ํ—ˆ์šฉ

  • ์™ธ๋ถ€์—์„œ Private Registry์— ์ ‘๊ทผํ•˜๋ ค๋ฉด EC2 ๋ณด์•ˆ ๊ทธ๋ฃน์—์„œ 5000๋ฒˆ ํฌํŠธ๋ฅผ ์—ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • "์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ํŽธ์ง‘" ๋ฉ”๋‰ด๋กœ ์ด๋™ํ•ด 5000๋ฒˆ ํฌํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.


3. ๋„์ปค ์ด๋ฏธ์ง€ Push & Pull

๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. Nginx ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ
(mac) docker pull nginx
  1. Nginx ์ด๋ฏธ์ง€ ํƒœ๊ทธ ๋ณ€๊ฒฝ
(mac) docker tag nginx {ec2-instance-public-ip}:5000/nginx
  1. Nginx ์ด๋ฏธ์ง€ Private Registry๋กœ ํ‘ธ์‹œ
(mac) docker push {ec2-instance-public-ip}:5000/nginx

4. ์—๋Ÿฌ ๋ฐœ์ƒ: HTTPS ๊ด€๋ จ ๋ฌธ์ œ

Get โ€œhttps://{ec2-instance-public-ip}:5000/v2/โ€: http: server gave HTTP response to HTTPS client
  • ๋„์ปค์˜ push์™€ pull์€ ๊ธฐ๋ณธ์ ์œผ๋กœ HTTPS๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ํ˜„์žฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” HTTP๋งŒ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด, ํด๋ผ์ด์–ธํŠธ์˜ daemon.json ํŒŒ์ผ์— insecure-registries ์„ค์ •์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • daemon.json ํŒŒ์ผ ์ˆ˜์ •
    • ํŒŒ์ผ ์œ„์น˜:
      • Mac: ~/.docker/daemon.json
      • Linux: /etc/docker/daemon.json
      • Windows: C:\ProgramData\docker\config\daemon.json
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "features": { 
    "buildkit": true
  },
  "insecure-registries": [
    "{ec2-instance-public-ip}:5000"
  ]
}
  1. Docker ์žฌ์‹คํ–‰
  • Mac: ์ƒ๋‹จ๋ฐ”์—์„œ Docker ์•„์ด์ฝ˜ ํด๋ฆญ > Restart ์„ ํƒ

5. ์ด๋ฏธ์ง€ Push & ์„ฑ๊ณต ํ™•์ธ

# ์ด๋ฏธ์ง€ Push
(mac) docker push {ec2-instance-public-ip}:5000/nginx

# ์„ฑ๊ณต ์—ฌ๋ถ€ ํ™•์ธ
(mac) curl -X GET http://{ec2-instance-public-ip}:5000/v2/_catalog

# ์˜ˆ์ƒ ์‘๋‹ต
{"repositories":["nginx"]}
  • ์‘๋‹ต์— nginx๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด Docker Registry ์„ค์น˜๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค

๐Ÿ“š Reference

0๊ฐœ์˜ ๋Œ“๊ธ€