사랑해 마니마니

Docker tutorial : 완벽한 IT 인프라 구축을 위한 Docker 본문

카테고리 없음

Docker tutorial : 완벽한 IT 인프라 구축을 위한 Docker

분리불안증후군 2020. 1. 4. 16:22

Docker의 기능

  • Docker image 생성 : 명령어는 docker image <...>
  • Docker container 동작 : 명령어는 docker container <...>
  • Docker image 공개 및 공유 :

Docker 설치 방법 및 동작확인

Docker 설치 방법 은 Googling을 통해서 해결하면 되고
잘 설치되었는지 확인 하는 방법은 설치 후
docker --version
그리고 모두가 다하는 'Hello World'를 사용해 보자
docker container run ubuntu:latest /bin/echo 'Hello world'

docker container run ubuntu:latest /bin/echo 'Hello world'
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
2746a4a261c9: Pull complete
4c1d20cdee96: Pull complete
0d3160e1d0de: Pull complete
c8e37668deea: Pull complete
Digest: sha256:250cc6f3f3ffc5cdaa9d8f4946ac79821aafb4d3afc93928f0de9336eba21aa4
Status: Downloaded newer image for ubuntu:latest
Hello world

Docker image 지정

이미지[:tag명]
예) centos:7
tag명에 latest를 기술하면 공개 repository에서 최신 버전 image를 의미함

Docker image 머시깽이들


Docker image 다운로드 (어디서? Docker Hub에서)

docker image pull <..>

$ docker image pull centos:latest
latest: Pulling from library/centos
729ec3a6ada3: Pull complete
Digest: sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

다운로드한 docker image 목록 출력

dockdr image ls
docker image ls --digest // digest값도 함께 출력(SHA256 구분값)

이제 다운로드한 이미지 세부 정보를 살펴보자

docker image inspect
예) docker image inspect centos

제공하는 정보는

  • image id
  • 생성일
  • Docker version
  • image 생성자
  • CPU

내 Local에 있는 docker image를 삭제하기

docker image rm
docker image rm -f //이미지 강제 삭제

Docker Hub에서 이미지 검색해 보기

docker search [옵션]
예) docker search ubuntu
볼 중요한 값은 [OFFICIAL], 공식 Docker image인 경우 OFFICIAL값에 'OK'가 표시됨


Docker container 머시깽이들 (생성, 구동, 중지 ...)

Docker container는 Docker image가 Runtime에 실행되는 instance/process라고 생각하면 될 것같다
(정확한 설명은 아니지만 실용적으로 크게 문제될 수준은 아니니 그냥 이렇게 이해해 보자)
docker container create 명령어를 실행하면 실행된는 상태가 아니기 때문에 container는 snapshot에 가까움

Docker container lifecycle

생성 > 구동 > 중지 > 삭제

명령어 씨리즈들

  • 생성: docker container create
  • 구동: docker container start
    • 생성+구동: docker container run
    • 중지된 container 구동: docker container start
  • 중지: docker container stop
  • 삭제: cocker container rm

Docker container 생성

생성하는 방법은 (다운로드 받은) image로 부터 생성함
현재 docker image를 다운로드 받았으니깐

Docker container 생성과 실행하기

이미 docker image는 받았으니

$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              549b9b86cb8d        2 weeks ago         64.2MB

docker container run <...>

컨테이너에 무언가를 입력시키고 싶다면 '-it'옵션

docker container run -it --name "ubuntu-ex" ubuntu

  • -it: i, t 옵션으로 i는 컨테이너에 무언가를 입력할 수 있는 상태, t는 tty(단말기)로 입력 도구 정도
  • --name: 생성할 container의 이름(내 마음대로), 여기서는 ubuntu-ex
  • 마지막은 containery 생성할 base가 될 image명

이렇게 입력하면 base image를 기반으로 container가 (--name, 이름으로) 생성(create)되고 실행(run)되고 이후에 표준 입력(-i)를 할수 있는 입력창(-t)가 열리면서 프롬프트도 container로 바뀜(여기서는 root@7907e7bb0f10:/# _)
이제 container내에 ubuntu 명령어를 막 날릴 수 있음 ^^;

root@7907e7bb0f10:/# exit 로 빠져 나오기

이렇게 -i & -t or -it를 입력하면 forground 프로세스로 떠서 입력을 하고 잡다한 일을 할 수 있지만 ..

만약 background로 무언가를 실행시키는 작업을 하고 싶다면 '-d'옵션

docker container run -d \<imagename\> \<command\>
예) docker container run -d centos /bin/ping localhost //centos image를 기반으로 container를 실행시키고, centos 명령어 ping localhost를 background로 실행시킴

  • 혹시 centos image가 없다는 에러가 나오면 빨리 다운로드 받고 다시 시작해 보자: docker image pull centos

잘 동작하는지 확인해 보는 방법은? 뭐 여러가지 있지만 log를 까보는 방법이 있으니 그걸 사용해 보자

container의 로그를 확인해 보자

docker container logs
이렇게 하면 option을 입력하라고 나옴. 옵션 T.T

결과를 확인할 터미널이 필요하니 (-t옵션을 사용하면 될 것같다)
docker container logs -t <container id>

그런데 container id를 모르잖아. 음냐
docker container ls 이 명령어를 입력하고 container id를 찾아서 다시 시도해 보자
docker container logs -t 42aa75a861d9 //이 container id 값은 달라질 수 있음

뭐가 확지나갔다. OK

몇가지 중요한 container run 옵션들: 포트매핑 -p 호스트포트:컨테이너 포트

  • 표준입력, 출력을 위해서 -it
  • background로 실행 -d
  • 포트매핑 -p 호스트포트:컨테이너포트
    • docker container run -d -p 8080:80 httpd
      //container의 httpd 80포트를 호스트의 8080포트로 매핑, 즉 호스트 8080 포트로 리퀘스트가 들어오면 container의 80포트로 매핑되어 container의 httpd가 동작함 ^^;

몇가지 중요한 container run 옵셕들: 환경 변수

  • -e, --env=[환경변수]
    • spring boot에 환경변수 값을 입력하거나 할 때 사용하면 좋을 듯

더 많은 환경 변수가 있는 데 오늘은 더이상 정리안하기로 함

컨테이너 목록 확인해 보기

docker container ls
이렇게 명령어를 날리면 default로 현재 동작(run) 중인 컨테이너 목록만 보여줌
나는 죽은놈 동작하는 놈 모두 보고 싶으면
-a 옵션 사용(구동, 중지 상태의 모든 container 목록) docker container ls -a

컨테이너 상태 확인해 보기

docker container stats <container id or name>
name, cup %, mem usage/limit, mem%, net i/o, block i/o, pids 등이 막출력됨
이제 그만 보고 싶어서 빠져 나가고 싶으면 ctrl + c

이미 만들어 놓은 컨테이너 실행하기: start

Docker container start

동작중인 컨테이너 중시지시키: stop

docker container stop <container id or name>
docker container ls에서 출력되는 놈들을 중지 시킬수 있음

별로 필요할 것같지 않지만(아닌가?) 재시작하기: restart

docker container restart <container id or name>

미니멀리즘을 위해 컨테이너를 삭제해 보자: rm

docker container rm <container id or name>

동작하고 있는 놈도 정리하고 싶다면 ls > stop > rm

그냥 죽이고 싶어... 동작하는 놈을 삭제할려고 했더니만

$ docker container rm ...
Error response from daemon: You cannot remove a running container ...

우리가 잘 알고 있는 옵션 -f
docker contaniner rm -f <container id or name>

진짜로 모든 놈들을 다 주이고 싶어.이름하여 일괄 삭제
docker contaniner rm -f 'docker container ls -a -q'
책대로 하면 동작안함. 파이프를 잘 확인해 봐야 할 것같다. 그래서 구글링해 봤더니

docker container rm -f $(docker container ls -aq)
일괄 삭제됨 (잘 못하면 망할 수 있으니 ... 그러니 조심하삼

  • -a 모든 container(동작중이거나, 죽었거나)
  • -q sha256 값(축약해서 출력해 주기)만
  • $(...) 입력 변수화

Tobe continue

Comments