<이론>
- 주제
- 컨테이너 이미지 관리 명령어
- 컨테이너 이미지 라이프 사이클 관련 명령어
- 동작중인 컨테이너 관리 명령어
컨테이너 이미지 관리 명령어
- 이미지 검색 docker search [옵션] <이미지이름:태그명> ex) docker search nginx
- automated : 자동 빌드 여부
- 컨테이너 이미지 앞에 “특정이름/” 이게 있으면 특정 커뮤니티나 벤더나 개인이 올린 레파지토리
- official : 도커허브가 관리하는, 믿을 수 있는 컨테이너
- 다운로드 docker pull [옵션] <이미지이름:태그명> ex) docker pull nginx
- 버전 다른 거 받아오면 이미지 아이디는 같지만 버전 태그가 다르기 땜에 서로 다른 게 생기게 되는 것임
- 다운받은 이미지 목록 출력 docker images ex) docker images
- --no-trunc옵션 : 이미지명을 풀네임으로 출력
- 다운받은 이미지 세부정보 보기 러닝중인 이미지 ip, 레이어 뭐 쓰는지, 컨테이너 내에서 사용하고 있는 리소스, IO속도, volumn mount... docker inspect [옵션] <이미지이름:태그명> ex) docker inspect nginx
- 특정 컨테이너의 정보만 표시해줌. - 多사용 ex) docker inspect --format '{{.NetworkSettings.IPAddress}}' webserver 특정 컨테이너의 ip주소만 표시해줌. 원하는 것만 특정해서 보기 위함. (json형태라서 json 객체 접근으로 표시하면돼)
- 이미지 삭제 docker rmi [옵션] <이미지이름:태그명> ex) docker rmi nginx
컨테이너 이미지 라이프 사이클 관련 명령어
- 컨테이너 실행 라이프 사이클 이미지 create -> start -> runningdocker pull 이미지 이름 : 태그 컨테이너이미지 다운 받아옴
- docker run 이미지이름:태그 러닝 시키면 메모리상에 어플리케이션이 됨 클라이언트가 접속하고 서비스가 운영되는 것
- 컨테이너 이미지 라이프 사이클 관련 명령어
- 생성 및 실행 프로세스
- 개별 명령어 - 이렇게는 잘 안씀
- 생성 docker create [옵션] <이미지이름:태그명> ex)docker create --name webserver nginx(컨테이너명 이미지명) create 명령어 : 도커호스트에서 다운받은 이미지를 컨테이너화 시켜준다.(default : 백그라운드 실행) ⇒ 컨테이너화된 이미지레이어가 만들어지면서 컨테이너로 만들어짐
- 컨테이너 실행 docker start [옵션] 컨테이너이름 - start : 컨테이너화된 것을 컨테이너 애플리케이션으로 실행시켜줌 ( ∵ 만들어진 거 ≠ 실행 ) => 이 단계가 돼야 어플리케이션 서비스가 실행됐다고 표현 가능 ex)docker start webserver
- 단독 명령어 - 多 사용 docker run [옵션] <이미지이름:태그명> 도커 컨테이너 받을 때의 프로세스 docker pull -> create -> start를 한번에 묶어놓은 것 ex) docker run --name webserver -d nginx:1.14 nginx:1.14를 현재 로컬호스트에 있는지 검색했는데 없으면 컨테이너이미지를 다운로드 받고 create 하고 start 해서 러닝상태까지 만들어주는 것
- 개별 명령어 - 이렇게는 잘 안씀
- 동작중 컨테이너 목록 확인 docker ps [옵션]
- COMMAND 컬럼 내용 : create 명령 시 cmmand에 적힌 명령어로 실행됨
- docker ps -a : create 된 모든 컨테이너 출력
- 컨테이너 정지 docker stop [옵션] 컨테이너이미지이름 ex) docker stop webserver
- 컨테이너 삭제 docker rm [옵션] 컨테이너이름 이미지는 그대로 남아있고 컨테이너를 삭제하는거야 ex)docker rm webserver
- 생성 및 실행 프로세스
동작중인 컨테이너 관리 명령어
- 실행중인 컨테이너 목록 확인 docker ps [옵션] 컨테이너이름
- 포그라운드로 실행중인 컨테이너에 연결 docker attach [옵션] 컨테이너이름 ex) docker attach centos
- 동작중인 컨테이너에 new 명령어 추가 실행 docker exec [옵션] 컨테이너이름 ex) docker exec -it webserver /bin/bash ex) docker exec webserver /bin/bash 현재 러닝중인 컨테이너에다가 /bin/bash라는 명령 실행시켜서 연결시켜줘라는 추가 명령 떄림
- 컨테이너에서 동작중인 프로세스 확인 docker top [옵션] 컨테이너이름 ex) docker top webserver 컨테이너 webserver에서 동작중인 전체 프로세스 확인
- 사용자이름 : root c: cpu 사용량 ppid : 부모 프로세스 tty : 사용중인 터미널 time : 현재 cpu 사용누적시간 컨테이너 웹서버에는 프로세스 몇개 실행중인지 뜬다
- 동작중인 컨테이너가 생성한 로그 보기 docker logs [옵션] 컨테이너이름 ex) docker logs webserver docker logs -f
- -f : follow 옵션.. 실시간 로그보기 명령
<실습>
- 컨테이너 이미지 관리 명령어 사용
- 컨테이너 실행 및 운영
- 컨테이너 종료
- 문제
컨테이너 이미지 관리 명령어 사용
컨테이너 실행 및 운영
- 커맨드라인 웹브라우저 이용해서 띄워진 서버 확인해보기 curl ip주소 하면 nginx가 제공해주는 웹페이지가 뜸 근데나는 에러가 났다.$ curl 172.17.0.2 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- 0:00:21 --:--:-- 0 curl: (28) Failed to connect to 172.17.0.2 port 80: Timed out
- 찾아보니까 포트 포워딩이 안되어있어서 그렇다는데 강사도 딱히 포트 설정을 안해줘는데 나는 왜 이딴 에러가 나는지 모르겠네ㅡㅡ 어쩄든 해결법을 찾아봄 https://tttsss77.tistory.com/155 원래 컨테이너 주소는 외부에서 접근이 불가능 하다고 한다.. 그래서 강사랑 다르게 설정을 해줘야함. docker run -p 8080:80 -d --name web httpd 이런식으로 직접 포트를 매핑하도록 실행할 때 create-start가 아닌 run으로 바로 해줘야한다.
- 동작중인 컨테이너에 연결해서 웹페이지 바꾸기 exec attch : 포그라운드로 실행중인 컨테이너였을 떄 가능함. docker exec -it [컨테이너명] /bin/bash exec 현재 실행중인 컨테이너에 접속해서 또다른 명령어를 추가해서 실행하겠다는 명령 쉘이있어야 연결되기때문에 쉘 실행해줘야함. -i : interactive -t : terminal 백그라운드에 실행중인 프로세스에다가 bash커맨드를 추가로 동작시켜서 직접 연결하겠따는 것
winpty docker exec -it webserver /bin/bash winpty: Windows의 Gitbash를 MinTTY로 사용할 때는 지원을 안 하나 보다.. 근데도 안되길래 구글링해서 bash,sh 다 해봤는데 안돼. 이건 걍 cmd에서 할 것.
엔터 누르면 현재 동작중인 nginx 웹서버에 연결된 상태가 돼 webserver의 문서를 보기로 한다. cd /usr/share/nginx/html에 index.html이 있어. 이게 바로 nginx 기본 웹페이지야
index.html의 파일내용을 바꿔주는 명령 작성 echo "CHANGED HOMPAGE" > index.html exit // 쉘 종료
컨테이너 안에 들어가서 웹문서를 바꾸고 종료한 것이야
curl 172.17.0.2 쳐보면 "CHANGED HOMEPAGE"가 뜬다. 변경되 ㄴ웹페이지 실행한 것.
컨테이너 종료
컨테이너 종료하기 DOCKER stop 컨테이너명 exit(0)상태가 돼
start 하면 다시 실행되는데 create 한 게 아니니까 아까 변경해준 웹페이지가 뜸 rm 해야 다 삭제돼
docker rm webserver running중인 거는 삭제 안돼 근데 그럼에도 삭제하려면 docker rm -f webserver -f: stop && 삭제
문제
'DEVOPS > Docker' 카테고리의 다른 글
[따배도] 8강 - 컨테이너 스토리지 관리 (0) | 2022.05.12 |
---|---|
[따배도] 7강 - 컨테이너 리소스 관리 (0) | 2022.05.12 |
[따배도] 5강 - 컨테이너 Registry (0) | 2022.05.12 |
[따배도] 4강 - 도커 컨테이너 만들어보기 (0) | 2022.05.12 |
[따배도] 3강 - 도커 컨테이너 살펴보기 (0) | 2022.05.12 |
Uploaded by Notion2Tistory v1.1.0