โป 44bits ๋ธ๋ก๊ทธ์์ ์์ฑํ ๊ธ์ ๋ณด๊ณ ๋๋ฆ์ ์ ๋ฆฌ๋ฅผ ๋ํด๋ดค์ต๋๋ค. ์ข์ ๊ธ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! ์๋ฌธ์ ๋งํฌ.
๋์ปค๋ ์ปจํ ์ด๋ ๊ธฐ๋ฐ์ ์คํ์์ค ๊ฐ์ํ ํ๋ซํผ์ด๋ค.
๋ผ๊ณ ํ ์ค ์ค๋ช ์ ๋ค์ด๋ ๋๋ ์ ์ดํด๊ฐ ์๋๋ค. ์ง๊ธ๊น์ง ๋ด๊ฐ ์ดํดํ๊ธฐ๋ก๋, ์ผ์ข ์ ๊ฐ์ํ๊ฒฝ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์ง์ ๊ฐ์ํ๊ฒฝ์ ๊น๊ณ , ํ์ํ ํ๋ก๊ทธ๋จ์ ์ค์นํ๊ณ , ์ข ์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ชจ๋ ์ผ๋ จ์ ๊ณผ์ ์ ํ ํ์ ๋๋ด๋ฒ๋ฆฌ๋ ์์ฃผ ๊น๋ํ ๊ฐ์ํ ํ๋ซํผ์ธ ๊ฒ์ด๋ค. ๋ฌผ๋ก ์ด๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋ค์ํ๊ณ ์ด๋ก์ด ๊ธฐ๋ฅ๋ค์ด ๋ง์ง๋ง, ์ ์ด๋ ์ฒ์ ๊ณต๋ถํ ๋ ๋ด๊ฐ ์๊ฐํ ์์ฝ์ ์ด๋ฌ๋ค.
๋ด ํ๋ก๊ทธ๋จ์ด 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
- ๋์ปค ํ์ผ ์์ฑ
- FROM์ผ๋ก ์์ํด์ RUN์ ํ์ฉํด ๋ฆฌ๋ ์ค ๋ช ๋ น์ด ์ฌ์ฉํ๋ฏ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ค.
- ํจํค์ง ๊ด๋ฆฌ์๋ก ์ ํ๋ฆฌ์ผ์ด์ ์คํ ํ๊ฒฝ ๊ตฌ์ถ + ์คํํ ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ด๋ก๋ / ๋ณต์ฌ
- COPY๋ ADD ์ง์์๋ก ๋ก์ปฌ ํ์ผ ๋ณต์ฌ
- Dockerfile์ ์ค๊ฐ์ค๊ฐ ๋น๋ํ๋ฉด์ ์์ ํ๋ ๊ฒ์ด ์ข๋ค.
- ๋น๋๋ง์ผ๋ก ์ด๋ ต๋ค๋ฉด ์ด๋ฏธ์ง์ ์ง์ ๋ค์ด๊ฐ์(bash shell ์คํ) ํ๋ก๋น์ ๋์ ํด๋ณด๊ณ Dockerfile๋ก ์์ฑ
- ๋์ปค์ ์ด๋ฏธ์ง ๋น๋ ๊ณผ์
- 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} .
์ด๋ ๊ฒ ์ธํ ํด์ ๋น๋๋ฅผ ํด์ค์ผํ๋ค๊ณ ํ๋ค.
'๐ณ Docker & Kubernetes' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker + ELK] Docker ELK๋ฅผ ์ฌ์ฉํด์ PostgreSQL DB ๋ชจ๋ํฐ๋ง ํ๊ธฐ (1) | 2023.12.21 |
---|---|
[Docker] Anaconda/Jupyter notebook์ dockerfile๋ก ์ค์น + ์ปค์คํ ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ (0) | 2022.08.19 |