< Lesson 3-1. Docker command - Image control >
Image Download :
1) Docker hub를 통한 다운로드 -> hub.docker.com/
docker hub는 docker의 기본 이미지 저장소이며 도커 회사가 개발한 오피셜 이미지 뿐 아니라, 사용자들이 개발한 이미지들도 업로드 되어있다. 도커 허브에 저장된 이름은 " Hub_ID / 저장소 이름 " 의 형식으로 되어있다. 이미지를 hub의 search에서 찾을 수도 있고, 터미널에서도 search 키워드를 사용해 검색할 수 있다.
2) 명령어를 통한 docker image download
$ docker pull [Image name]
Image management :
$ docker images
Image remove :
$ docker rmi
이런식으로 layer들까지 잘 삭제된 것을 볼 수 있다. 만약 해당 레이어를 다른 컨테이너, 이미지가 사용하고 있다면 삭제하지 않는다. 이런 경우 삭제를 위해서는 -f 옵션을 사용할 수 있지만 별로 권장하지 않는 사항이다.
Image Inspect :
$ docker inspect
=> config 섹션 cmd ,volumes,workingDir,EntryPoint,RootFS
이미지 필드에 대한 설명 :
Name | Description | Stars | Official | Automated |
이미지 저장소 이름 | 이미지에 대한 설명 | 이미지에 대한 평가점수 | 공식 이미지 여부 | 자동화 빌드 여부 |
Image save, load :
고립된 네트워크 등 docker pull 을 사용할 수 없는 환경의 경우에, docker save와 load를 통해 도커 이미지 파일을 아카이브 파일로 복사하고, 이를 불러오는 save, load 명령어를 사용할 수 있다.
$ docker save
$ docker load
< Lesson 3-2. Docker command - Container control >
실행중인 컨테이너 확인 :
$ docker ps # -a옵션을 사용하면 호스트에 존재하는 모든 컨테이너를 출력한다
필드 | container id | Image | command | created | status | ports | names |
설명 | 컨테이너 고유ID | 컨테이너가 사용하는 이미지 | 실행중인 어플리케이션 | 생성된 날짜 | 현재 상태 | 사용중인 포트 | 이름 |
컨테이너 생성 :
$ docker create # create명령은 컨테이너 생성만 하며 실행은 하지 않는다
위 명령어를 통해 testcentos1이라는 centos 이미지를 실행하게 되면 해당 이름으로 컨테이너를 만들 수 있다.
중요 ※ 추가적으로 이미지를 실행했을때 접근해서 명령어를 수행할 수 있게 하기 위해서는 -i와 -t옵션 ( 줄여서 -it )을 사용해야 한다.
$ docker start -ai testcentos2 # testcentos2 컨테이너의 쉘에 접근한다
접속 성공!! 단 이때 exit명령어를 사용하면 쉘(컨테이너)이 닫히면서 나가게 된다... 이를 해결하기 위한 명령어는...
CTRL + P + Q !!!!!
컨테이너 실행 :
$ docker start # -i 옵션은 표준입력에 연결, -a는 표준출력/에러에 연결
포트 번호 80이 열려있고, 실행시킨 시간에 대한 정보 등을 알 수 있다.
다음과 같은 명령어를 수행하게 되면 ip주소를 확인 할 수도 있다. 또한 이를 curl을 찍어보면 다음과 같이 접근가능한 것을 알 수 있다.
$ docker inspect web1 | grep -i. ipaddress
컨테이너 생성 + 실행 :
$ docker run # 이게 create와 start가 합쳐진 것이였구나...
docker run 명령어를 사용하면 컨테이너를 바로 실행할 수 있다. 이 명령어를 사용하면 create와 start를 사용할 필요가 없다.
※ 만약 이 위에 명령어를 붙인다면(당연히 이미지 안에 존재하는 명령어) 사용자가 지정한 명령을 cmd로 저장할 수 있다.
※ --rm 옵션을 붙이면, 이미지를 컨테이너로 실행하고, 컨테이너가 종료되고 나면 해당 컨테이너를 자동으로 삭제해준다.
컨테이너 정보 확인 :
$ docker stats -a
stats 명령어는 지속적으로 컨테이너의 상태를 확인해 주기 때문에 스트림 옵션을 끄려면 --no-stream을 추가해주면 된다.
컨테이너 중지 :
$ docker stop
컨테이너 재시작 :
$ docker restart
컨테이너 삭제 :
$ docker rm
+ 컨테이너 실행 시 유용한 설정법 : (컨테이너 커스터마이징을 위한)
1) 환경 변수
$ docker run -it --name os3 -e "LAB=docker" centos:latest
2) CPU 제한
$ docker run -it --name os3 --cpus 0.3 centos:latest # cpu자원 30%만 사용하도록 한다
3) 메모리 제한
$ docker run -it --name os3 --memory 1024m centos:latest # 메모리 1024m만 사용하도록 한다
4) 자원제한 변경
$ docker update --memory 1400m os3 # os3의 메모리 재한을 1400m으로 증가시킨다
< Lesson 3-3. Docker command - Container Management>
컨테이너 접근 및 실행 :
분리모드로 실행중인 컨테이너에 직접 접근하지 않고 명령을 실행하는 방법으로 docker attatch와 docker exec이 있다.
$ docker attach
docker attach는 표준 입력, 표준 출력/에러를 포함하는 컨테이너에 연결할 수 있다. attatch 명령어를 통해 컨테이너를 사용하고 나서 Ctrl + P + Q를 사용하면 동일하게 나갈 수 있다.하지만 이 방법은 기본적으로 쉘 프로그램을 실행하고 있지 않으므로 docker attach 로 접근하지 않는 것이 좋다.
$ docker exec
exec는 컨테이너에서 내가 원하는 명령을 실행해 주는 커맨드 이다. 다음과 같이 사용할 수 있다.
컨테이너 프로세스 및 로그 확인 :
$ docker top
$ docker logs
먼저 docker run -d --name db1 mysql:5.7을 수행시키고 나서 docker logs로 오류를 찾아보자.
컨테이너에 파일 복사 및 확인 :
호스트에 있는 파일을 컨테이너에 복사하거나, 혹은 컨테이너에 있는 파일을 호스트로 복사할 수 있다(cp). 또한 컨테이너의 파일 시스템 중에서 어떤 것이 변경되었는지를 확인 할 수 있는 명령어도 있다(diff)
$ docker cp
$ docker diff
diff 명령은 컨테이너에서 파일의 변경상태를 체크할 수 있다. 이때 파일의 상태는 다음과 같이 나타낸다.
- A : 파일이 추가됨
- C : 파일이 변경됨
- D : 파일이 삭제됨
- 다음 포스팅에서는 도커 볼륨과 데이터 관리, 네트워크, Dockerfile 등등이 이어진다 -
'[DevOps] > [Docker]' 카테고리의 다른 글
[Docker] Buildx: Multi-Arch images 빌드하기 (linux/amd64, arm64) (0) | 2021.10.10 |
---|---|
[Docker] 이미 실행한 컨테이너 포트포워딩 재설정하기 (1) | 2021.10.05 |
[Docker] 컨테이너 인프라를 위한 DevOps 환경 구축-3.Docker volume(feat. 정보산업진흥원) (0) | 2020.10.13 |
[Docker] 컨테이너 인프라를 위한 DevOps 환경 구축-1.개요와 설치(feat. 정보산업진흥원) (0) | 2020.10.13 |
[ML/Lecture] Docker로 실습환경 구축 (2) | 2020.06.19 |