๐Ÿณ Docker & Kubernetes

[Docker] Docker ์ž…๋ฌธ - Docker Image, Container, ๋ฒ„์ „ ๊ด€๋ฆฌ์™€ moniwiki ๋ฐฐํฌ ์˜ˆ์ œ๊นŒ์ง€

darly213 2023. 4. 27. 16:37
728x90

โ€ป 44bits ๋ธ”๋กœ๊ทธ์—์„œ ์ž‘์„ฑํ•œ ๊ธ€์„ ๋ณด๊ณ  ๋‚˜๋ฆ„์˜ ์ •๋ฆฌ๋ฅผ ๋”ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ์ข‹์€ ๊ธ€ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ์›๋ฌธ์€ ๋งํฌ.

 

๋„์ปค(Docker) ์ž…๋ฌธํŽธ: ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์„œ๋ฒ„ ๋ฐฐํฌ๊นŒ์ง€

๋„์ปค(Docker)๋Š” 2013๋…„ ๋“ฑ์žฅํ•œ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ™” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์–ด ์™ธ๋ถ€ ์„œ๋ฒ„์— ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์€ ๋„์ปค๋ฅผ ์‹œ

www.44bits.io

๋„์ปค ๋กœ๊ณ . ๊ท€์—ฝ๋‹ค.

๋„์ปค๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ์†Œ์Šค ๊ฐ€์ƒํ™” ํ”Œ๋žซํผ์ด๋‹ค. 

๋ผ๊ณ  ํ•œ ์ค„ ์„ค๋ช…์„ ๋“ค์–ด๋„ ๋‚˜๋Š” ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๋๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๊ธฐ๋กœ๋Š”, ์ผ์ข…์˜ ๊ฐ€์ƒํ™˜๊ฒฝ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ์ง์ ‘ ๊ฐ€์ƒํ™˜๊ฒฝ์„ ๊น”๊ณ , ํ•„์š”ํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜๊ณ , ์ข…์†์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ชจ๋“  ์ผ๋ จ์˜ ๊ณผ์ •์„ ํ•œ ํ์— ๋๋‚ด๋ฒ„๋ฆฌ๋Š” ์•„์ฃผ ๊น”๋”ํ•œ ๊ฐ€์ƒํ™” ํ”Œ๋žซํผ์ธ ๊ฒƒ์ด๋‹ค. ๋ฌผ๋ก  ์ด๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋‹ค์–‘ํ•˜๊ณ  ์ด๋กœ์šด ๊ธฐ๋Šฅ๋“ค์ด ๋งŽ์ง€๋งŒ, ์ ์–ด๋„ ์ฒ˜์Œ ๊ณต๋ถ€ํ•  ๋•Œ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ์š”์•ฝ์€ ์ด๋žฌ๋‹ค.

๋‚ด ํ”„๋กœ๊ทธ๋žจ์ด 123๊ฐœ์˜ ์ข…์† ํŒจํ‚ค์ง€๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š”๋ฐ, 3๋ช…์˜ ์‚ฌ๋žŒ์ด ๊ฐ๊ฐ ์œˆ๋„์šฐ, ๋ฆฌ๋ˆ…์Šค, mac os๋ฅผ ์“ฐ๊ณ  ์žˆ๋‹ค๋ฉด ํŒจํ‚ค์ง€ ์„ค์น˜๋ถ€ํ„ฐ ์•„์ฃผ ๋‚œ๊ฐํ•ด์ง„๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์„ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ปจํ…Œ์ด๋„ˆ ์œ„์—์„œ ์‹คํ–‰ํ•˜๋„๋ก ๋ฐฐํฌํ•ด์ฃผ๋ฉด? ๋ชจ๋‘๊ฐ€ ๊ฐ™์€ ํ™˜๊ฒฝ ์œ„์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. 123๊ฐœ์˜ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค ์ผ์ผ์ด ์„ค์น˜ํ•  ํ•„์š”๋„ ์—†๋‹ค. ์™œ๋ƒ๋ฉด ๋„์ปค ํŒŒ์ผ ์•ˆ์—์„œ ๋‹ค~ ์•Œ์•„์„œ ์„ค์น˜ํ•˜๋„๋ก ์„ค์ •ํ•ด์„œ ๋ฐฐํฌํ•ด์ฃผ๋‹ˆ๊นŒ!

ํ˜์‹ ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐ”๋กœ ์ด๋ก ์œผ๋กœ ๋“ค์–ด๊ฐ€๋ณด์ž.

Docker Image ๊ธฐ์ดˆ

Image : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ํ™˜๊ฒฝ(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ์œ„ํ•œ ํŒŒ์ผ์˜ ์ง‘ํ•ฉ)

$ docker ps # ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ
$ docker pull centos # centos image pull -> local์— ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ docker hub์—์„œ ๊ฒ€์ƒ‰
$ docker pull centos
Using default tag: latest
latest: Pulling from library/centos
52f9ef134af7: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
  • ์ด๋ฏธ์ง€ ์ด๋ฆ„:ํƒœ๊ทธ ⇒ centos:lastest
    • ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด lastest
  • ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋ฅผ repository๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

Docker Hub

Docker Hub๋Š” ์ด๋ฏธ์ง€ ํ˜ธ์ŠคํŒ… ์„œ๋น„์Šค์ด๋‹ค. ๋„์ปค ์‚ฌ์—์„œ ๊ณต์‹์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์ด๋ฏธ์ง€์™€ ์‚ฌ์šฉ์ž๋“ค์ด ๋งŒ๋“ค์–ด ์˜ฌ๋ฆฐ ์ด๋ฏธ์ง€๋กœ ๋‚˜๋‰˜์–ด์ง„๋‹ค.

๋„์ปค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ด๋ฏธ์ง€์—๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค(/ ์•ž ์ด๋ฆ„)๊ฐ€ ์—†๋‹ค.

  • ๊ณต์‹ ์ด๋ฏธ์ง€ ์ด๋ฆ„ ⇒ ex) mysql
  • ์‚ฌ์šฉ์ž ์ปค์Šคํ…€ ์ด๋ฏธ์ง€ ⇒ ex) mysterias/pythonetq

Container ์ดํ•ดํ•˜๊ธฐ

Container : ์ด๋ฏธ์ง€์˜ ํ™˜๊ฒฝ ์œ„์—์„œ ์‹คํ–‰๋˜๋Š” ํŠน๋ณ„ํ•œ ํ”„๋กœ์„ธ์Šค

$ docker run -it centos:lastest bash
[root@fabcb4039f76 /]# 

centos bash๋กœ shell์ด ๋ณ€๊ฒฝ๋จ.

⇒ ํ˜ธ์ŠคํŠธ์™€ ๊ฒฉ๋ฆฌ๋œ centos ํ™˜๊ฒฝ์—์„œ bash ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ–ˆ๋‹ค.

$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED              STATUS              PORTS     NAMES
fabcb4039f76   centos    "bash"    About a minute ago   Up About a minute             stupefied_wescoff
  • centos image์—์„œ ์‹คํ–‰๋œ ์ปจํ…Œ์ด๋„ˆ
  • command๋Š” /bin/bash
  • container ID / name ์œผ๋กœ ์กฐ์ž‘ ๊ฐ€๋Šฅ
    • docker run —name “name” ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์ œ์—์„œ๋Š” command๋ฅผ ์ง€์ •ํ•ด์„œ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๋ณดํ†ต ์ด๋ฏธ์ง€๋Š” ๋ช…๋ น์–ด ๊ธฐ๋ณธ ๊ฐ’(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ / ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ)์ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.

์ด ๋ช…๋ น์–ด๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๋„ ์ข…๋ฃŒ(exit) ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. docker ps -a๋กœ ์ข…๋ฃŒ๋œ ์ปจํ…Œ์ด๋„ˆ๋„ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.(์‚ญ์ œ๋˜์ง€ ์•Š์€)

$ docker restart fabcb4039f76

docker restart ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•ด์„œ ๋˜์‚ด๋ฆฌ๊ธฐ ๊ฐ€๋Šฅ → ์‰˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋Š” ์•„๋‹˜

  • ๊ทธ๋ƒฅ ์ข…๋ฃŒ๋œ ๊ฒƒ์„ daemon๊ณผ ๋น„์Šทํ•œ ์ƒํƒœ๋กœ ์‚ด๋ ค์ฃผ๋Š” ๊ฒƒ?
  • ์ปจํ…Œ์ด๋„ˆ ์•ˆ์œผ๋กœ ๋“ค์–ด๊ฐ„ ๊ฒŒ ์•„๋‹ˆ๋ผ ๋ฐ–์—์„œ ๋Œ์•„๊ฐ€๊ฒŒ๋งŒ ๋งŒ๋“ค์–ด์คŒ
$ docker attach fabcb4039f76
[root@fabcb4039f76 /]#

attach ๋ช…๋ น์–ด๋กœ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์•ˆ์œผ๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒ์‹œํ‚ค๋Š” stop ๋ช…๋ น์–ด์™€ ์ข…๋ฃŒ๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•˜๋Š” —rm ํ”Œ๋ž˜๊ทธ๋„ ์žˆ๋‹ค.

!์ค‘์š”ํ•œ ์ !

  • ์ด๋ฏธ์ง€๋Š” ๊ฐ€์ƒ๋จธ์‹ ๊ณผ ๋น„์Šทํ•˜๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฒฉ๋ฆฌ ํ”„๋กœ์„ธ์Šค๋‹ค. ๊ฐ€์ƒ๋จธ์‹ ์ด ์•„๋‹ˆ๋ผ!!!!!!

๋„์ปค์™€ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ

๐Ÿ’ก ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์•„๋ฌด๋ฆฌ ๋ฐ”๊ฟ”๋„ ์ด๋ฏธ์ง€๋Š” ๋ถˆ๋ณ€ํ•œ๋‹ค.

์ด๋ฏธ์ง€๋Š” immutableํ•œ ์ €์žฅ๋งค์ฒด์ด๋‹ค.

→ ๋Œ€์‹  ์ปจํ…Œ์ด๋„ˆ๋Š” mutable์ž„.

๊ณ„์ธตํ™”๋œ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ด๋ฏธ์ง€๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ์ปจํ…Œ์ด๋„ˆ์— ๋ณ€ํ™”๋ฅผ ์ฃผ๊ณ  ๋ณ€๊ฒฝ๋œ ์ƒํƒœ๋ฅผ ์ƒˆ ์ด๋ฏธ์ง€๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. → ๊นƒ์—์„œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ!

$ docker pull ubuntu:bionic
$ docker run -it ubuntu:bionic bash

์šฐ๋ถ„ํˆฌ ํ™˜๊ฒฝ์„ ๊ฐ€์ ธ์™€์„œ ์‹คํ–‰์‹œํ‚จ๋‹ค. ๊ทธ๋ฆฌ๊ณ  docker diff ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด

$ docker diff 7addbb0cb989

๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—†์œผ๋ฏ€๋กœ ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

  • docker diff ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ์ง€์™€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์ œ ์ปจํ…Œ์ด๋„ˆ์— git์„ ์„ค์น˜ํ•ด๋ณด์ž.

root@7addbb0cb989:/# apt update
root@7addbb0cb989:/# apt install -y git
root@7addbb0cb989:/# git --version
git version 2.17.1

๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์‰˜์—์„œ docker diff๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋ฉด

$ docker diff 7addbb0cb989 | head
C /etc
A /etc/perl
A /etc/perl/CPAN
A /etc/perl/Net
A /etc/perl/Net/libnet.cfg
C /etc/alternatives
A /etc/alternatives/rcp
A /etc/alternatives/rsh
C /etc/alternatives/pager
A /etc/alternatives/rlogin

์•„์ฃผ ๋งŽ์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ณด์ธ๋‹ค. ์ด์ œ ์ด ์ด๋ฏธ์ง€์—์„œ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค๊ณ  git์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋ฉด

$ docker run -it ubuntu:bionic bash
root@cdfbba14af33:/# git --version
bash: git: command not found
root@cdfbba14af33:/# exit

์—†๋‹ค! ์ด๋ฏธ์ง€๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ฐ ์ปจํ…Œ์ด๋„ˆ(ํ”„๋กœ์„ธ์Šค)๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ์ด๋ฏธ์ง€๋Š” ๋ถˆ๋ณ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ์ง€์—์„œ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ํ•œ๋“ค ์ด๋ฏธ์ง€์— git์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ์ƒˆ ์ปจํ…Œ์ด๋„ˆ์—๋„ git์ด ์—†๋‹ค.

๊ทธ๋Ÿผ ์ด๋ฏธ์ง€์— git์„ ์—…๋ฐ์ดํŠธ ํ•ด๋ณด์ž.

$ docker commit {container-id} ubuntu:git

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒˆ ์ด๋ฏธ์ง€๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. docker images ๋กœ ํ™•์ธํ•ด๋ณด๋ฉด ์ƒˆ ํƒœ๊ทธ ubuntu:git์„ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

$ docker images
REPOSITORY                          TAG         IMAGE ID       CREATED          SIZE
ubuntu                              git         0605132dd4d4   12 seconds ago   176MB

์ด ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ container๋ฅผ ์ƒ์„ฑํ•˜๊ณ  git --version์„ ์‹คํ–‰ํ•ด๋ณด์ž.

$ docker run -it ubuntu:git bash
root@e33aec20331c:/# git --version
git version 2.17.1

๊นƒ์ด ์ž˜ ์„ค์น˜๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!

์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ •๋ฆฌํ•  ๋•Œ๋Š” ํŒŒ์ƒ๋œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•œ๋‹ค. docker ps -a๋กœ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ๋ฉˆ์ถ˜ container๊นŒ์ง€ ๋‹ค ํ™•์ธ์„ ํ•˜๊ณ , ubuntu:git ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•œ ํ›„ ์ด๋ฏธ์ง€๋ฅผ ์ง€์šด๋‹ค.

$ docker ps -a
$ docker rm {container-id}
$ docker rmi {image-id}

Dockerfile๋กœ ์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ธฐ

Dockerfile๋กœ Git์ด ์„ค์น˜๋œ ์šฐ๋ถ„ํˆฌ ์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ธฐ

์ƒˆ ํด๋”๋กœ shell์„ ์ด๋™์‹œํ‚จ ๋‹ค์Œ ๊ฐ„๋‹จํ•œ docker file์„ ์ƒ์„ฑํ•œ๋‹ค.

# Dockerfile
FROM ubunto:bionic
RUN apt-get update
RUN apt-get install -y git
  • FROM: ์ด๋ฏธ์ง€๋ฅผ ์–ด๋А ์ด๋ฏธ์ง€๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑํ•  ๊ฒƒ์ธ์ง€ ์ง€์ •
  • RUN: ๋ช…๋ น์–ด ์‹คํ–‰

๋นŒ๋“œ

$ docker build -t ubuntu:git-from-dockerfile .
[+] Building 50.5s (7/7) FINISHED
 => [internal] load build definition from Dockerfile                                                                                          0.0s
 => => transferring dockerfile: 109B                                                                                                          0.0s
 => [internal] load .dockerignore                                                                                                             0.0s
 => => transferring context: 2B                                                                                                               0.0s
 => [internal] load metadata for docker.io/library/ubuntu:bionic                                                                              0.0s
 => [1/3] FROM docker.io/library/ubuntu:bionic                                                                                                0.0s
 => [2/3] RUN apt-get update                                                                                                                 40.4s
 => [3/3] RUN apt-get install -y git                                                                                                          9.8s
 => exporting to image                                                                                                                        0.3s
 => => exporting layers                                                                                                                       0.3s
 => => writing image sha256:5f93945d133cdacafd705dcb2b17e818ca8eb55fb309ecd5fc703c2e094ad65d                                                  0.0s
 => => naming to docker.io/library/ubuntu:git-from-dockerfile

์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๋ฐ ๊นƒ ์„ค์น˜ ํ™•์ธ

$ docker run -it ubuntu:git-from-dockerfile bash
root@5c4f07519ee4:/# git --version
git version 2.17.1

๊นƒ์ด ์ž˜ ์„ค์น˜๋˜์–ด ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ชจ๋‹ˆ์œ„ํ‚ค(moniwiki) ๋„์ปค ํŒŒ์ผ ์ž‘์„ฑํ•˜๊ธฐ

์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ์‹คํ–‰์„ ์œ„ํ•œ ๋„์ปค ์ด๋ฏธ์ง€ ์ž‘์„ฑ

  • ๋ชจ๋‹ˆ์œ„ํ‚ค : php์™€ apache ๊ธฐ๋ฐ˜ ๋™์ž‘
$ git clone <https://github.com/nacyot/docker-moniwiki.git>
$ cd docker-moniwiki/moniwiki

Dockerfile ์—ด์–ด์„œ ํ™•์ธํ•ด๋ณด์ž

FROM ubuntu:14.04

RUN apt-get update &&\\
  apt-get -qq -y install git curl build-essential apache2 php5 libapache2-mod-php5 rcs

WORKDIR /tmp
RUN \\
  curl -L -O <https://github.com/wkpark/moniwiki/archive/v1.2.5p1.tar.gz> &&\\
  tar xf /tmp/v1.2.5p1.tar.gz &&\\
  mv moniwiki-1.2.5p1 /var/www/html/moniwiki &&\\
  chown -R www-data:www-data /var/www/html/moniwiki &&\\
  chmod 777 /var/www/html/moniwiki/data/ /var/www/html/moniwiki/ &&\\
  chmod +x /var/www/html/moniwiki/secure.sh &&\\
  /var/www/html/moniwiki/secure.sh

RUN a2enmod rewrite

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80
CMD bash -c "source /etc/apache2/envvars && /usr/sbin/apache2 -D FOREGROUND"

ํ•˜๋‚˜์”ฉ ๋œฏ์–ด๋ด…์‹œ๋‹ค

FROM ubuntu:14.04
  • ubuntu:14.04 ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ
RUN apt-get update &&\\
  apt-get -qq -y install git curl build-essential apache2 php5 libapache2-mod-php5 rcs
  • ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‹คํ–‰์ž. ๋‘ ๊ฐœ์˜ ๋ช…๋ น์–ด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
    • RUN apt-get update : apt-get update
    • apt-get -qq -y install git curl build-essential apache2 php5 libapache2-mod-php5 rcs : ํ•„์š” ์šฐ๋ถ„ํˆฌ ํŒจํ‚ค์ง€ ์„ค์น˜
  • docker์—์„œ Dockerfile ํ•œ ์ค„ ํ•œ ์ค„์ด ์ด๋ฏธ์ง€์˜ ๋ ˆ์ด์–ด๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— run ๊ฐœ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด ๋ ˆ์ด์–ด๋„ ์ค„๊ณ  ์บ์‹œ ๊ด€๋ฆฌ๋„ ์‰ฌ์›Œ์ง„๋‹ค.
WORKDIR /tmp
  • ์ดํ›„์— ์‹คํ–‰๋˜๋Š” ์ž‘์—…์˜ ์‹คํ–‰ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. shell์—์„œ cd๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ์‰ฌ์šธ ๊ฒƒ ๊ฐ™์Œ. ์‹คํ–‰ ์œ„์น˜๋ฅผ ๊ณ ์ •์‹œ์ผœ์ค€๋‹ค.
RUN \\
  curl -L -O <https://github.com/wkpark/moniwiki/archive/v1.2.5p1.tar.gz> &&\\
  tar xf /tmp/v1.2.5p1.tar.gz &&\\
  mv moniwiki-1.2.5p1 /var/www/html/moniwiki &&\\
  chown -R www-data:www-data /var/www/html/moniwiki &&\\
  chmod 777 /var/www/html/moniwiki/data/ /var/www/html/moniwiki/ &&\\
  chmod +x /var/www/html/moniwiki/secure.sh &&\\
  /var/www/html/moniwiki/secure.sh
  • github์˜ ๋ชจ๋‹ˆ์œ„ํ‚ค ๋‹ค์šด๋กœ๋“œ
  • php์ฝ”๋“œ ์••์ถ• ํ•ด์ œ
  • ์•„ํŒŒ์น˜ ์ ‘๊ทผ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌ
  • ์ ‘๊ทผ๊ถŒํ•œ ์„ค์ •
RUN a2enmod rewrite
  • ์•„ํŒŒ์น˜2์˜ ๋ชจ๋“ˆ ํ™œ์„ฑํ™”
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
  • ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • → ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ํ™˜๊ฒฝ์— ์ ์šฉ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑ ์‹œ์—๋„ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •๊ฐ’์„ ๋ฐ›์•„์„œ ์ ์šฉ ๊ฐ€๋Šฅ
    • ์•„ํŒŒ์น˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
EXPOSE 80
CMD bash -c "source /etc/apache2/envvars && /usr/sbin/apache2 -D FOREGROUND"
  • ๊ฐ€์ƒ๋จธ์‹ ์— ์˜คํ”ˆํ•  ํฌํŠธ
  • ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด
    • docker run ์œผ๋กœ bash๋ฅผ ์“ฐ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์•„ํŒŒ์น˜ ์„œ๋ฒ„๋ฅผ FOREGROUND์— ์‹คํ–‰ํ•œ๋‹ค.
    • ๊ธฐ๋ณธ ๊ฐ’์ด๊ณ  ์‹คํ–‰์‹œ์— ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ๋‹ค.

๋„์ปค ํŒŒ์ผ์„ ๋นŒ๋“œํ•œ๋‹ค.

$ docker build -t nacyot/moniwiki:lastest .
$ docker run -dp 9999:80 nacyot/moniwiki:lastest
  • docker run ์—์„œ -p ํ”Œ๋ž˜๊ทธ๋Š” {ํ˜ธ์ŠคํŒ…๋จธ์‹  ํฌํŠธ} : {์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ํฌํŠธ} ๋กœ ๋งคํ•‘ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๋™์˜ํ•œ ํ›„ wiki page๋กœ ์ด๋™ํ•œ๋‹ค.

http://127.0.0.1:9999/moniwiki/wiki.php/

 

Create this page๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ์ ๋‹นํžˆ ๋‚ด์šฉ์„ ์“ฐ๊ณ  save๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ

ใ…

์˜ค๋ฅธ์ชฝ์ฒ˜๋Ÿผ ์ž˜ ๋ฐ˜์˜๋˜๋ฉด ์„ฑ๊ณต์ด๋‹ค.

Tips for docker

  1. ๋„์ปค ํŒŒ์ผ ์ž‘์„ฑ
    • FROM์œผ๋กœ ์‹œ์ž‘ํ•ด์„œ RUN์„ ํ™œ์šฉํ•ด ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด ์‚ฌ์šฉํ•˜๋“ฏ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•œ๋‹ค.
    • ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ํ™˜๊ฒฝ ๊ตฌ์ถ• + ์‹คํ–‰ํ•  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹ค์šด๋กœ๋“œ / ๋ณต์‚ฌ
    • COPY๋‚˜ ADD ์ง€์‹œ์ž๋กœ ๋กœ์ปฌ ํŒŒ์ผ ๋ณต์‚ฌ
    • Dockerfile์€ ์ค‘๊ฐ„์ค‘๊ฐ„ ๋นŒ๋“œํ•˜๋ฉด์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
    • ๋นŒ๋“œ๋งŒ์œผ๋กœ ์–ด๋ ต๋‹ค๋ฉด ์ด๋ฏธ์ง€์— ์ง์ ‘ ๋“ค์–ด๊ฐ€์„œ(bash shell ์‹คํ–‰) ํ”„๋กœ๋น„์ €๋‹์„ ํ•ด๋ณด๊ณ  Dockerfile๋กœ ์ž‘์„ฑ
  2. ๋„์ปค์˜ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๊ณผ์ •
    • Dockerfile์—์„œ FROM, RUN, WORKDIR ์ง€์‹œ์ž ํ•˜๋‚˜ ํ•˜๋‚˜๊ฐ€ ์Šคํ…์ด ๋œ๋‹ค.
    • ์ด๋ฏธ์ง€๋กœ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ → ์ง€์‹œ์ž ์ˆ˜ํ–‰ → ์ด๋ฏธ์ง€๋กœ commit(์ €์žฅ) → ๋‹ค์Œ ์ง€์‹œ์ž ์ˆ˜ํ–‰
    • ์ด ์ž‘์—…์„ ์ง€์‹œ์ž ์ˆ˜ ๋งŒํผ ๋ฐ˜๋ณตํ•œ๋‹ค.
    • docker history {image-id} ๋กœ ์ค‘๊ฐ„ ์ž„์‹œ ์ด๋ฏธ์ง€๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ด๋ฏธ์ง€๊ฐ€ <missing>์ธ ๊ฒฝ์šฐ์—๋Š” ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€์—์„œ ๋นŒ๋“œ๋œ ๋‚ด์šฉ. ๋กœ์ปฌ ๋จธ์‹ ์—์„œ ์ง์ ‘ ๋นŒ๋“œ๋  ๋•Œ๋งŒ ์ค‘๊ฐ„ ์ด๋ฏธ์ง€๊ฐ€ ์ƒ์„ฑ๋จ.
      • ์ค‘๊ฐ„ ์ด๋ฏธ์ง€์—์„œ๋„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์‹ค์ „ : docker image๋กœ ์„œ๋ฒ„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌํ•˜๊ธฐ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„œ๋ฒ„์—์„œ ์šด์˜ํ•˜๋ ค๋ฉด ์„œ๋ฒ„ ํ™˜๊ฒฝ์„ ์ค€๋น„ํ•˜๋Š” ํ”„๋กœ๋น„์ €๋‹ ๋‹จ๊ณ„๊ฐ€ ๊ผญ ํ•„์š”ํ•˜๋‹ค. ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ”„๋กœ๋น„์ €๋‹ ๊ณผ์ •์ด ์•„์˜ˆ ์—†์–ด์ง€๋Š” ๊ฑด ์•„๋‹ˆ์ง€๋งŒ(๋„์ปคํŒŒ์ผ๊ณผ ์ด๋ฏธ์ง€๋ฅผ ์ค€๋น„ํ•˜๋Š” ๊ฒŒ ํ”„๋กœ๋น„์ €๋‹์ด๋‹ค) ์„œ๋กœ ๋‹ค๋ฅด๊ณ  ๊ณ„์† ๋ณ€ํ™”ํ•˜๋Š” ์„œ๋ฒ„ ํ™˜๊ฒฝ์— ๋น„๊ต์  ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  ์ค€๋น„๋œ ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์žฅ์ ์ด๋‹ค.

์ด๋ฏธ์ง€ ์—†์ด ๋„์ปคํŒŒ์ผ๋งŒ ์žˆ๋‹ค๋ฉด ๋นŒ๋“œ๊ฐ€ ์ž˜ ๋  ์ˆ˜๋„ ์žˆ๊ณ  ์•„๋‹ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ผ๋‹จ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ์œผ๋ฉด ์˜ค๋ž˜๋œ ๊ฒƒ๋„ ์ž˜ ์ž‘๋™ํ•˜๋Š” ํŽธ์ด๋‹ค.

์ด์ œ ๋‹ค๋ฅธ ์„œ๋ฒ„์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜จ๋ผ์ธ ์ƒ์— ๋ชจ๋‹ˆ์œ„ํ‚ค๋ฅผ ๋ฐฐํฌํ•ด๋ณด์ž.

Docker Hub์— ์ด๋ฏธ์ง€ ์˜ฌ๋ฆฌ๊ธฐ

๋„์ปค ์ด๋ฏธ์ง€์˜ ํ’€๋„ค์ž„์—๋Š” ๋„์ปค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋‹ค.

$ docker info | grep Registry
Registry: <https://index.docker.io/v1/>

ubuntu:bionic ⇒ docker.io/library/ubuntu:bionic ์ด ํ’€๋„ค์ž„

  • ๋„์ปค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์„œ๋ฒ„ ์ฃผ์†Œ / ๋„์ปค ๊ณต์‹ ์ด๋ฏธ์ง€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค / ์ด๋ฏธ์ง€ ์ด๋ฆ„

๋„์ปค ํ—ˆ๋ธŒ์— ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ ๋กœ๊ทธ์ธ์„ ํ•ด์ค€๋‹ค.

$ docker login

๋„์ปค ์ด๋ฏธ์ง€ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•œ๋‹ค.

$ docker tag nacyot/moniwiki {dockerhub-name}/moniwiki:lastest

๊ทธ๋ฆฌ๊ณ  push

$ docker push mysterias/moniwiki:lastest

ํ•˜๋ฉด ๋กœ๊ทธ์ธํ•œ dockerhub์— ์˜ฌ๋ผ๊ฐ„๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด๋‘๊ณ  ๋‹ค๋ฅธ ํ™˜๊ฒฝ/์„œ๋ฒ„์—์„œ docker run -dp 9999:80 mysterias/moniwiki:lastest ๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋ฐ›์•„์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

M1 ubuntu ๊ฐ€์ƒํ™˜๊ฒฝ ๋นŒ๋“œ ์‹œ ์ถ”๊ฐ€์ž‘์—…

digitalocean์—์„œ ์‹œํ—˜ํ•ด๋ณด๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ๋…ธํŠธ๋ถ์ด M1 ์นฉ์„ ์‚ฌ์šฉํ•˜๋Š” ์ƒํƒœ์—์„œ ubuntu ๊ฐ€์ƒํ™˜๊ฒฝ์œผ๋กœ ๋นŒ๋“œํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ๊นŒ ์ œ๋Œ€๋กœ ์•ˆ๋œ๋‹ค. ์ด๊ฑด ๋ณ„๋„์˜ ์ „ํ›„์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.

WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested
/ docker run -dp 9999:80 --platform linux/amd64 mysterias/moniwiki:lastest

์—ฌ๊ธฐ์„œ ๋‹ค์‹œ ์‹คํ–‰์„ ํ•˜๋ฉด

/ exec format error /bin/bash

์ด๋Ÿฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๊ฒƒ๋„ ์ฐพ์•„๋ณด๋‹ˆ M1์นฉ์—์„œ ๋นŒ๋“œํ•  ๋•Œ 

$ docker buildx build --platform linux/arm64 -t {image} .

์ด๋ ‡๊ฒŒ ์„ธํŒ…ํ•ด์„œ ๋นŒ๋“œ๋ฅผ ํ•ด์ค˜์•ผํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

 

728x90