๋ฐ๊ฐ๋ค ์๋ !
์ฐ๋ฆฌ๊ฐ ๋ฐฑ์๋์์ ๋ฐฐํฌ๋ผ๋ ๊ฒ์ ํ๋ ์ด์ ๋ฅผ ์๊ฐํด๋ณด์.
๋ฐฐํฌ๋ผ๊ณ ํ๋ฉด ์๊ฐ๋ณด๋ค ๋๋จํ ํ๋์ ํ๋ ๊ฒ ์ฒ๋ผ ๋ณด์ด๋ ๊ฒฝํฅ์ด ๋์๊ฒ ์์ฃผ ์์๋ค.
ํ์ง๋ง ์ ๋ง ๋จ์ํ๊ฒ ์๊ฐํด์ ๋ฐฐํฌ๋,
public IP๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ปดํจํฐ์์ ํ๋ก์ ํธ๋ฅผ ์คํ์ํค๋ ๊ฒ์ด๋ค.
์ด๋ฐ ๋ฐฐํฌ๋ฅผ ์งํํ๊ธฐ ์ํด์ ๋ด ์ปดํจํฐ์ ๊ณต๊ฐ IP๋ฅผ ๊ฐ์ง๊ฒ ํ๊ณ , ์ปดํจํฐ์์ ํ๋ก์ ํธ๋ฅผ ์คํ์ํจ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
์ด๋ฐ ์ํ์ ๊ฐ์ํ๊ณ ๋ด ์ปดํจํฐ์์ ๋ฐฐํฌ๋ฅผ ์งํํ๋ค?
๊ธฐ์กด์ ec2์๋ฒ๋ฅผ ์ด์ฉํ ๋ฐฑ์๋ ๋ฐฐํฌ๋ฅผ ๋ช ๋ฒ ํด๋ณด์์ง๋ง, ์ด๋ฒ์ ๋ฌธ์ํ๋ฅผ ํด๋ณด๋ฉด์ ํด๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
๋๋ ubuntu 22.0.4๋ฅผ ์ด์ฉํ ๋ฐฐํฌ๋ฅผ ํ ๊ณํ์ด๋ค. ์ด ๋ 64๋นํธ์ ์ํคํ ์ณ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.
์๋์ ์ธ์คํด์ค ์ ํ์ t2.micro๋ฅผ ์ด์ฉํ ๊บผ์๋ค. ์๋๊ณ ?
young wild and free!!!
์ดํ์ ์๋์์ ํค ํ์ด๋ฅผ ์์ฑํด์ฃผ์ด์ผ ํ๋ค.
์์ฑํ ํค ํ์ด๋ ๋ค์ด๋ก๋๋ฅผ ๋ฐ๊ฒ ๋๋๋ฐ, ์ด๋ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
ํ์ ssh ๋ก ์๋ฒ์ ์ ์ํ ๋ ํด๋น pemํค(๋งฅ ๊ธฐ์ค)์ ์ฌ์ฉํ๊ฒ ๋๋ค.
๋คํธ์ํฌ ์ค์ ์ ํ ์ ์๋ค. ์ฌ๊ธฐ์์ ๋ณด์ ๊ทธ๋ฃน์ ์ด๊ธฐ ์ค์ ํด์ค ์ ์์ง๋ง,
์ฌ๊ธฐ์์๊ฐ ์๋, ํ์ ๋ณด์๊ทธ๋ฃน ์ค์ ํญ์์ ์ง์ ์ค์ ํ๋ ๊ฒ์ด ๋์๊ฒ ๊ฐ์ธ์ ์ผ๋ก ๋ ๋ง์์ ๋ค์๋ค.
์คํ ๋ฆฌ์ง ๋ณผ๋ฅจ์ ์ค์ ํ ์ ์๋๋ฐ, ์ต์ ํฌ๊ธฐ์ ์ต๋ ํฌ๊ธฐ์ ์ ํ์ด(ํ๋ฆฌํฐ์ด ๊ธฐ์ค์ผ๋ก ) ์กด์ฌํ๋ค.
์ต๋ ์คํ ๋ฆฌ์ง ๋ณผ๋ฅจ์ ๊ฐ์ง๊ฒ ์ค์ ํ๋ค.
์ด์ ๋ ์๋ค.
์ด๋ ๊ฒ ์์์ ํด์ฃผ์๋ค.
๊ทธ๋ฌ๋ฉด ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์์๊น?
์ด๋ ๊ฒ ๋๊ธฐ์ค์ผ๋ก ์๋ก์ด ์ธ์คํด์ค๊ฐ ๋์จ๋ค.
๊ธฐ๋ค๋ฆฌ๋ฉด ์คํ์ค์ผ๋ก ๋ฐ๋๋ค. ์ธ์คํด์ค id๋ฅผ ํด๋ฆญํด๋ณด์.
์ธ์คํด์ค ์ธ๋ถ ์ ๋ณด์ค์ public ipv4๊ฐ ์กด์ฌํ๋ค. ์ด๊ฑธ ๋ณต์ฌํ๋ค.
๋งฅ ๊ธฐ์ค์ผ๋ก๋ ํฐ๋ฏธ๋์ ์ด์ด, ๋ค์ด๋ก๋ ํญ์ผ๋ก ์ด๋ํ์.
ํญ์ ์กด์ฌํ๋ pemํค๋ฅผ ๊ฐ์ง๊ณ ssh ์ ํต์ ์์ฒญ์ ํด์ผํ๋ค.
chmod 400 ${pemํค ์ด๋ฆ}.pem
์ด๋ฐ ๋ช ๋ น์ด๋ฅผ ํตํด pemํค์ ๋ํ ์๊ธฐ ์์ ์ ์ฝ๊ธฐ ๊ถํ์ ์ค ์ ์๋ค.
ํด๋น ์ฝ๊ธฐ ๊ถํ์ผ๋ก pemํค ํ์ผ์ ์ฝ๊ณ , ๊ฑฐ๊ธฐ์ ์๋ ์ํธํค๋ก EC2 ์ธ์คํด์ค์ ์๊ฒฉ ์ ์์ ํ ์ ์๋ค.
ssh -i `์ฃผ์/pemํค` ubuntu@`ํผ๋ธ๋ฆญ IPv4`
์ด๋ฐ ๋ช ๋ น์ผ๋ก ์๋ฒ์ ์ ์์ ํ ์ ์๋ค.
์ด์ ๋ฐฐํฌ์ ๋ํ Hello World๋ฅผ ์ฑ๊ณตํ๋ค.
์ฝ๊ฒ ๋ฐฐํฌ๋ฅผ ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก git clone, docker์ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ณด์๋ค. ํ์ง๋ง, git clone์ ํ์ ๋, ๋ด๊ฐ ์๊ฐํ๋ ๊ฐ์ฅ ํฐ ๋ช ๊ฐ์ง ๋ฌธ์ ๋ฅผ ์๊ฐํด๋ณด์๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์, ๋์ปค๋ผ๋ ๋ ๋ฆฝ๋ ํ๊ฒฝ์์ ํ๋ก์ ํธ๋ฅผ ์คํ์ํค๊ณ , ํ๋ก์ ํธ๋ฅผ ๋ ๋ ๊ทธ ํ๊ฒฝ์ ๊บผ๋ฒ๋ฆฌ๋ ๊ฒ์ด๋ค.
๋์ปค๋, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋ํ ์ํค๊ธฐ ์ํ ํ๋ซํผ์ด๋ค. ๊ฐ ์ปจํ ์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์ , ๊ทธ๋ฆฌ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์ํค๊ธฐ ์ํ ๋ ๋ฆฝ๋ ํ๊ฒฝ์ด๋ค. ๋ผ๋ ๋ง์ด ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ๋งํด์ฃผ๋ ๊ณต์์ ์ธ ๋ต๋ณ์ด๋ค.
๊ทธ๋์ ๋๋ ๋๋ง์ ๋ฐฉ์์ผ๋ก ๊ฐ๋ ์ ๋ค์ ์ ๋ฆฌํด๋ณด๊ธฐ ์์ํ๋ค.
๋ ๋ฆฝ๋ ํ๊ฒฝ, ์ฆ ๋ ๋ฆฝ๋ ๊ฐ์์ ์ปดํจํฐ(?!)๋ฅผ ์ฌ์ฉํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฆฌ๊ฒ ๋๋ค.
ํด๋น ์ปดํจํฐ๋ ์ ๋ง๋ก ๊ทธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์ํค๊ธฐ ์ํ ์ต์ํ์ ํ๊ฒฝ์ ๊ฐ์ง๊ฒ ๋๋ค.
์ด๋ฌํ ์ต์ํ์ ํ๊ฒฝ/์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ง ๊ฐ์์ ์ปดํจํฐ๋ค์ ์ฐ๋ฆฌ๋ ์ปจํ ์ด๋๋ผ๊ณ ํ๋ค.
์ด๋ฐ ์ปจํ ์ด๋๋ฅผ ํต์งธ๋ก ์ฎ๊ธธ ๋, ์ฐ๋ฆฌ๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด ์ฃผ๊ณ ๋ฐ๋๋ค๊ณ ํ๋ค.
์ด๋ฏธ์ง๋ผ๋ ๊ฒ์, ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํฌํ๋ฆฟ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์ค์ ํ๊ฒฝ์ ๋ค ๋ง๋ค๊ณ , ์ด ํ๊ฒฝ ์ ์ฒด๋ฅผ ํด๋ผ์ฐ๋์ ์ฌ๋ฆฌ๊ณ ๋ฐ๊ธฐ๋ณด๋จ,
์ด ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ์ด์์ฒด์ , ์คํํ๊ฒฝ, ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์ข ์์ฑ ๋ฑ์ ์๋ ค์ฃผ๋ ์ค๋ช ์์ธ ๊ฒ์ด๋ค.
ํด๋น ์ค๋ช ์๋ฅผ ํด๋ผ์ฐ๋์ ์ฌ๋ฆฌ๊ณ ๋ฐ๊ธฐ๋ฅผ ํตํด์, ์ฐ๋ฆฌ๋ ๋ ๊ฐ๋ณ๊ฒ ๊ณต์ ๋ฅผ ํ๊ณ , ๊ณต์ ๋ฐ์์ ๋ ์ค๋ช ์๋๋ก ๋์ปค๊ฐ ๋๋ฑ๋๋ฑํด์ ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ณ
๋ง๋ ์ปจํ ์ด๋๋ฅผ docker run์ ์ปจํ ์ด๋๋ผ๋ ๊ฐ์์ ์ปดํจํฐ๋ฅผ ์คํ์์ผ์ฃผ๋ ๊ฒ์ด๋ผ๊ณ ์ดํดํ๋ค.
๋์ปค ์ค์น๋ฒ์ ์ฌ๊ธฐ๋ฅผ ๋ณด์.
์ฌ๊ธฐ ๊ฐ๋ณด๋ ์ค๋ช ์ด ํ๋์ฉ ์์๋ค.
์ค๋ช ๋๋ก ๋์ปค๋ฅผ ์ค์นํ๋ค.
๋ด ์ปดํจํฐ์๋ ๋์ปค๋ฅผ ์ค์นํด์คฌ๋ค. (ubuntu, mac, window๋ฑ์ ์ฐพ์์ ์ง์ ํ์!!!)
์ดํ์ ์ ๋ก๋ํ ์๋ฒ์, ๋ด ๋ก์ปฌ ์ปดํจํฐ์ ๋ชจ๋ docker login์ ํด์ฃผ์. (๊ฐ์ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํด์ผ ํ๋ค)
์ดํ sudo su ๊ด๋ฆฌ์ ๊ถํ์ผ๋ก ๋์๋ค์ ์คํ์ํค๊ฒ ์ค์ ํ๋ค.
์ดํ, docker ์์ ๋ก๊ทธ์ธ์ ์์ฒญํด๋ณด์!!!
docker login -u ${username}
์ ๋ฐฉ์์ผ๋ก ๋ก๊ทธ์ธ์ ์งํ์ํฌ ์ ์๊ณ , ์ด ๋ ์๋์ password๋ฅผ ๋ฑ๋ก์ํฌ ์ ์๋ค.
์ ๋ ฅํด์ฃผ๋ฉด? Login Succeeded๋ผ๋ ๋ฉ์์ง๊ฐ ๋์จ๋ค. ์ฆ, ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ค๋ ๋ป์ด๋ค
(๋ง์ฝ ์คํจํ๋ค๋ฉด sudo๋ก ๋ค์ํ๊ฑฐ๋, ๋ค์ ์ค์นํด๋ณด์!)
์๋ฒ์ ์ ๋ก๋ํ ์ปดํจํฐ์์ ๋ก๊ทธ์ธ์ด ๋๋ฌ๋ค๋ฉด, ์ด์ ํด์ผํ ๊ณผ์ ๋ค์ด ์๋ค.
sudo docker build -t ${username}/${repository name}:${tag} --platform linux/amd64 .
// ๋ก์ปฌ : ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด์ค๋ค.
sudo docker push ${username}/${{repository name}:${tag}
// ๋ก์ปฌ : ๋์ปค ์ปจํ
์ด๋๋ฅผ ์ด๋ฏธ์ง๋ก ์
๋ก๋(push) ํ๋ค.
sudo docker pull ${username}/${repository name}:${tag}
// ์๋ฒ : ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋(pull) ํ๋ค.
docker run -d -p 80:8080 -e TZ=Asia/Seoul --name ${name} ${username}/${repository name}:${tag}
// ์๋ฒ : ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ปจํ
์ด๋๋ก ์คํ์ํจ๋ค.
๊ฐ์์ ๊ณผ์ ์ ๋ํด์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณด์๋ฉด,
sudo docker build -t ${username}/${repo name}:${tag} --platform linux/arm64 .
sudo docker push ${username}/${repo name}:${tag}
sudo docker pull ${username}/${repository name}:${tag}
docker run -d -p 80:8080 -e TZ=Asia/Seoul --name ${name} ${username}/${repository name}:${tag}
--name ${name}
: ์ปจํ
์ด๋๋ฅผ ํด๋น ์ด๋ฆ์ผ๋ก ์คํ์์ผ์ค๋ค. ํ์ ์ ํํ ์ด๋ฏธ์ง๋ช
์ด ์๋, ํด๋น name์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฃผ๋ id๋ก ์ ๊ทผํ ์ ์๊ฒ ํด์ค๋ค.์๊ฒฉ ์๋ฒ์์ pull์ ํ ๋, ๊ทธ๋ฆฌ๊ณ Push๋ฅผ ํ ๋ tag๊ฐ ๋ช ์๋์ด์์ง ์๋ค๋ฉด,
๋ณด๋ ๊ฒ๊ณผ ๊ฐ์ด defaultํ๊ทธ๋ก latest๋ก ๋ฐ์์ง๋ค.
์ดํ์ ์คํ์ ์์ผ์ค ์ ์๋ค.
docker run -d -p 80:8080 -e TZ=Asia/Seoul --name server teamndd/test
์ด ๋ช ๋ น์ ๋ด๋ ค์ฃผ๋ฉด, ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ปจํ ์ด๋ํ์์ผ ์คํ์์ผ์ค๋ค.
๋์ปค์ ๋ํ ๋ ๊น์ ์ด์ผ๊ธฐ๋ค์ ํ์ฌ ๋๋ docker ๊ณต์๋ฌธ์์์ ํ๋ ์ค์ด๋ค.
์ฐ๋ฆฌ ๋ชจ๋ ๋ค๊ฐ์ด ๊ณต๋ถํฉ์๋ค
๊ทธ๋ผ...twenty thousand...๐ฅ