[Cloud] Docker ๊ด€๋ฆฌ

MeltingOlafยท2022๋…„ 5์›” 9์ผ
0

[Cloud]

๋ชฉ๋ก ๋ณด๊ธฐ
6/25

โญ๏ธ ์ตœ์‹  docker ๋ช…๋ น ๊ตฌ์กฐ

$ docker container <sub-command>
$ docker image <sub-command>
$ docker network <sub-command>
$ docker volume <sub-command>

โญ๏ธ ์ด๋ฏธ์ง€

  • ๋กœ์ปฌ ์ด๋ฏธ์ง€ ๋ชฉ๋ก ํ™•์ธ
$ docker images
  • Docker Hub ์ด๋ฏธ์ง€ ๊ฒ€์ƒ‰
$ docker search <TERM>
  • ์ด๋ฏธ์ง€ ํ’€๋ง
$ docker pull <IMAGE>:<TAG>
$ docker pull <IMAGE>@<HASH>

latest ํƒœ๊ทธ๋Š” ๊ฐ€๋Šฅํ•˜๋ฉด ์ ˆ๋Œ€ ์‚ฌ์šฉX

  • ์ด๋ฏธ์ง€ ์‚ญ์ œ
$ docker rmi <IMAGE>
  • ์ด๋ฏธ์ง€ ์ƒ์„ธ์ •๋ณด ํ™•์ธ
$ docker inspect <IMAGE>

ContainerConfig vs Config

  • ContainerConfig: ์ด๋ฏธ์ง€ ์ตœ์ดˆ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ–ˆ๋˜ ์„ค์ •

  • Config: ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ด๋ฏธ์ง€ ์ƒ์„ฑ์‹œ ์‚ฌ์šฉํ–ˆ๋˜ ์„ค์ •

  • Config
    - Env
    - Cmd
    - ExposedPorts
    - WorkingDir
    - Volumes
    - Entrypoint

$ docker inspect centos:7 --format '{{ .Config.Cmd }}'

์ด๋ฏธ์ง€ ์ €์žฅ/์•„์นด์ด๋ธŒ

$ docker save <IMAGE> -o <FILE>

์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ

$ docker load -i <FILE>

โญ๏ธ ์ปจํ…Œ์ด๋„ˆ

create -> start -> (pause) -> (unpause) -> (kill) -> (restart) -> stop -> rm
run ---------->

์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก

  • ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก
$ docker ps
  • ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก
$ docker ps -a
  • ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
$ docker run <IMAGE>
$ docker run --name <NAME> <IMAGE>

๋™์ผํ•œ ์ด๋ฆ„์˜ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ X

  • ์˜ต์…˜ ์—†์Œ: Docker Daemon --stdout/stderr-> Docker Clinet
    - --name ์˜ต์…˜ X
  • -it: Attach ๋ชจ๋“œ(stdin/stdout/stderr ์—ฐ๊ฒฐ) -> Foreground
    - -i: stdin ์œ ์ง€
    - -t: Terminal ํ• ๋‹น
    - ctrl-p-q
    - docker attach ๋ช…๋ น์œผ๋กœ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ
  • -d: Detach ๋ชจ๋“œ(stdin/stdout/stderr ์—ฐ๊ฒฐ ํ•ด์ œ) -> Background ์‹คํ–‰
  • -itd

ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ์—๋Š” ํ•˜๋‚˜์˜ Application๋งŒ ์‹คํ–‰ ์›์น™

  • ์žฌ์‹œ์ž‘ ์ •์ฑ…
$ docker run --restart <no|always|on-failure|unless-stopped> <IMAGE>
  • ์ด๋ฏธ์ง€ ํ’€ ์ •์ฑ…
$ docker run --pull <missing|always|never> <IMAGE>
  • ์ปจํ…Œ์ด๋„ˆ์˜ ํ”„๋กœ์„ธ์Šค ๋ชฉ๋ก ํ™•์ธ
$ docker top <CONTAINER>

์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋งŒ ํ™•์ธ

  • ์ปจํ…Œ์ด๋„ˆ์—์„œ (์ถ”๊ฐ€)์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰
$ docker exec <CONTAINER> <COMMAND>
$ docker exec -it a8 bash
$ docker exec a8 cat /etc/httpd/conf/httpd.conf
  • ์ปจํ…Œ์ด๋„ˆ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ
$ docker stats
$ docker stats --no-stream
  • ์ปจํ…Œ์ด๋„ˆ (cpu/memory) ๋ฆฌ์†Œ์Šค ์ œํ•œ
$ docker run --cpus 0.1 --memory 100m ubuntu sha256sum /dev/zero
  • ์ปจํ…Œ์ด๋„ˆ ๋ฆฌ์†Œ์Šค ์ œํ•œ ๋ณ€๊ฒฝ
$ docker update --cpus 0.2 da
$ docker update --memory 200m da
  • ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ(stdout/stderr) ํ™•์ธ
/var/lib/docker/container/<ID>/<ID>-json.log
$ docker logs <CONTAINER>

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋กœ๊ทธ๋„ ์‚ญ์ œ๋จ

  • ํ™˜๊ฒฝ๋ณ€์ˆ˜
$docker run -e A=100 ubuntu
$docker run -d -e MYSQL_ROOT_PASSWORD=P@ssw0rd -e MYSQL_DATABASE=wordpress mysql:5.7

์ผ๋ถ€ ์ด๋ฏธ์ง€๋Š” ์‹คํ–‰์‹œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•จ

  • ์ปจํ…Œ์ด๋„ˆ ์ •๋ณด ํ™•์ธ
$ docker inspect <CONTAINER>
  • ์ปจํ…Œ์ด๋„ˆ IP ํ™•์ธ
$ docker inspect 16a -f '{{ .NetworkSettings.IPAddress }}'
  • ์ปจํ…Œ์ด๋„ˆ Discovery
$ docker run --name mysqldb -d -e MYSQL_ROOT_PASSWORD=P@ssw0rd mysql:5.7 
$ docker run -it --link mysqldb ubuntu bash

> cat /etc/hosts
>> 172.17.X.X mysqldb
$ docker run -it --link mysqldb:xyz ubuntu bash

> cat /etc/hosts
>> 172.17.X.X mysqldb xyz
$ docker run -it --link mysqldb:xyz mysql:5.7 mysql -h xyz -u root -p
  • ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ๋ฅผ ํ˜ธ์ŠคํŠธ์˜ ํฌํŠธ๋กœ ํฌ์›Œ๋”ฉ (ํฌํŠธ ํฌ์›Œ๋”ฉ)
$ docker run -p <HOST>:<CONTAINER> <IMAGE>
$ docker run -d -p 80:80 httpd

Wordpress + MySQL

$ docker run --name wp-db -d -e MYSQL_ROOT_PASSWORD=P@ssw0rd /
-e MYSQL_DATABASE=wordpress /
-e MYSQL_USER=wpadm /
-e MYSQL_PASSWORD=P@ssw0rd --restart always /
--cpus 0.5 --memory 1000m mysql:5.7
docker run --name wp-web -d --link wp-db:mysql -e  WORDPRESS_DB_HOST=mysql /
-e WORDPRESS_DB_USER=wpadm /
-e WORDPRESS_DB_PASSWORD=P@ssw0rd /
-e WORDPRESS_DB_NAME=wordpress --restart always /
--cpus 0.5 --memory 500m -p 80:80 wordpress:5-apache
profile
How R U Today :)

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