일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- #단축키
- 프로젝트 시작
- 2010
- #화면캡쳐 #macOS
- #Microservice
- Lambda
- bootstrap
- 분석 작업
- 방법론
- Microservices
- #Gradle Multi project with IntelliJ
- Spring Boot
- 평가인증
- WebJar
- java
- jv
- 년말
- docker #docker tutorial
- 토익
- 감사
- #정규표현식
- Today
- Total
사랑해 마니마니
Docker tutorial : 완벽한 IT 인프라 구축을 위한 Docker 본문
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가 동작함 ^^;
- docker container run -d -p 8080:80 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 값(축약해서 출력해 주기)만
- $(...) 입력 변수화