겉바속촉

[DOCKER] 도커_컨테이너 생성, 시작, 정지 본문

IT 일기 (상반기)/DOCKER

[DOCKER] 도커_컨테이너 생성, 시작, 정지

겉바속촉 2020. 12. 30. 23:57
728x90
반응형

 

 

DOCKER에 대해서

 

공부해보도록 하겠습니다

 

!^^!

 

 

 


 

Docker Container

 

 

도커 컨테이너에 대해서 알아보도록 하겠습니다

 

컨테이너는 라이프 사이클을 가지고 있습니다

생성 - 시작 - 정지 - 삭제

요런 사이클이에요

 

 

 

 

기본명령 1. 컨테이너 생성

 

docker container create

 

  • 이미지에 포함될 디렉토리와 파일들의 스냅샷을 취함
  • 스냅샷 = 스토리지 안에 존재하는 파일과 디렉토리를 특정 타이밍에 추출한 것
  • 스냅샷이라서 정적인 상태가 root로 마운트되는 것

 

생성 및 시작

 

run = create + start

 

 

 

기본명령 2. 컨테이너 시작

 

정지 중인 컨테이너 시작할 때 사용

 

 

기본명령 3. 컨테이너 정지

 

docker container stop

 

  • 실행 중인 컨테이너 정지시킬 때 사용
  • 재시작 하려면 --> docker container restart

 

 

기본명령 4. 컨테이너 삭제

 

docker container rm

 

  • 컨테이너 삭제할 때 사용
  • 일시 정지하고 싶을때는 docker container pause

 

 

 

 

 


 

 

 

다음과 같이 종료된 컨테이너까지 보려면

ps -a

 

 

그 중에서 다음 표시한 컨테이너를 삭제시켜보도록 하겠습니다:)

 

 

다써줄 필요없이 두글자까지만 입력해도 인식합니다:)

그래서 docker rm b7 명령 주기

 

 

docker ps -a 뒤에 -q 옵션을 붙였습니다:)

여기서 q는 quiet 입니다

id만 볼 수 있게 해주는 거에요

 

docker rm 을 사용하긴 할 건데 그 뒤에 명령 하나 더 넣으려고 합니다

docker rm $(docker ps -a -q)

 

그럼 우선순위는 괄호가 먼저!

id만 볼 수 있게 하고 ---> 컨테이너들을 지우겠다는 뜻이에요:)

 

하지만 에러메세지가 출력됩니다

실행중인 컨테이너는 지우지 못하기 때문에!!!

 

 

 

이제 ps -a로 확인해보니

실행중인 것만 남아있쥬?

 

 

 


 

컨테이너를 생성 및 시작하게 하는 run을 해보도록 하겠습니다:)

 

 

 

docker container run 옵션 이미지이름

 

옵션

  • -a, --attach : 표준 입력, 표준 출력, 표준 오류 출력에 어태치
  • --cidfile : 컨테이너 id를 파일로 출력
  • -d, --detach : 컨테이너 생성 + 백그라운드에서 실행 ; 컨테이너를 딱 물고 있다가 놓는 것
  • -i, --interactive : 컨테이너 표준 입력 열기
  • -t, --tty : 단말기 디바이스 사용

i랑 t랑 결합해서 많이 쓴다

 

 

 

 

 

 

<컨테이너 대화식 실행>

 

docker run -it --name test1 centos /bin/cal 이라는 명령을 줄게요:)

 

test1이라는 컨테이너를 실행할건데

이미지명은 centos고

컨테이너 내부에서는 /bin/cal이라는 커맨드를 수행해서

콘솔에 결과를 출력해줘

 

라는 뜻입니다:)

이 컨테이너는 calendar만 출력해내고 종료가 됩니다

그래서 docker ps -a 명령으로 보면

저 커맨드를 수행하고 나면 컨테이너가 종료되버리는 것을 확인할 수 있죠

 

그럼 아마 docker ps 명령으로는 확인할 수 없는 컨테이너겠죠

 

 

이번에는 -it 를 빼고 명령내릴게요

 

docker logs test1 명령으로 test1 수행했던 것을 확인할 수 있습니다

logs 명령은 보통 디버깅할 떄 사용하는 명령어

컨테이너의 출력 내용을 확인할 수 있기 때문

 

 

어쩃든 -it의 유무 차이점을 우리가 확실히 알 수가 없네요

 

 

 

 

그럼 한 가지 더 해볼게요!!

 

 

 

-it 옵션 없는 상태로 명령내려보기

 

bash는 명령 해석기인데 뒤에 명령을 아무것도 주지 않은 상태

사용자는 이 쉘 (명령 해석기)을 가지고 명령을 주고 enter 주면

쉘은 또 결과 출력해주고....

이런 대화형식으로 주고 받아야 하는 데

 

쉘을 띄우려면 반드시 터미널을 부여해주어야 가능한 것입니다

그래야 컨테이너에 커넥트를 할 수 있는 거에요

 

 

그럼 얘는 처리할 커맨드가 없어서 할일 없이 종료되고 끝

 

 

이번에는 -it 옵션 추가해서 명령내려보기

터미널이 할당이 되었기 때문에 다음과 같이 출력

 

컨테이너 파일 시스템은 현재 overlay 쓰고 있는 것 확인 가능

 

그리고 exit로 로그아웃!!

 

 

 

동작중인 컨테이너에 연결하기

 

docker exec -it web /bin/bash

터미널 할당 된 후에 /usr/share/nginx/html/로 들어가주기

그리고 ls로 파일 봤습니다:)

 

 

cat 명령으로 index.html 파일 내용보니까

welcome 페이지네요!!!!

 

 

 

이 웰컴 페이지를 수정해볼게요

This is web container test page

라는 문구가 나오도록 말이죠!!

 

그리고 cat으로 확인!

 

이 상태에서 다음 명령어들을 내려보면

어떤 것은 수행하고 어떤 것은 오류나는 것을 확인할 수 있습니다:)

 

 

/bin 디렉토리로 들어가보면

우리가 쓸 수 있는 것들이 쭈르르르륵 나옵니다:)

 

 

 

 

docker run -it --restart=always --name test5 centos /bin/bash

 

언제나 다시 restart 될 수 있도록 옵션 추가

 

나와준 후에

 

docker ps 내려보니

다시 실행이 되었기 때문에 살아있음 ==> restart = always 라고 주었기 때문

 

 

 

 

이번에는 종료된 컨테이너들이 알아서 삭제되었으면 좋겠다면

docker run -it --rm --name text6 centos /bin/bash

 

 

그리고 로그아웃!

 

 

확인해보니 알아서 삭제되어서 test6가 없는 것 확인되네요:)

 

 

 

 

docker container run의 백그라운드 실행

 

docker container run -d centos /bin/ping localhost

 

centos라는 이미지로 컨테이너를 만들고

localhost에 대해 ping 명령을 내린 것입니다

 

-d는 백그라운드에서 컨테이너를 실행한다는 것 --> 이게 바로 디태치 모드!!

 

대화식으로 명령을 실행한 경우는 콘솔에 나왔겠지만

지금은 아니기 때문에 그냥 컨테이너 id가 나옵니다

 

그래서 백그라운드에서 실행되고 있는지 확인해야합니다

host 이름을 안줘서 저기 나온 컨테이너 id로 명령 내릴게요

 

docker logs b6 명령 내리니까 계속 ping 하고 있군요:)

 

 

이제 강제로 지워버릴게요

 

 

 

컨테이너 안에 호소트 네임 주는 명령

docker run -it --rm --hostname ljh --name test6 centos /bin/bash

 

hostname 이라는 명령으로 확인도 가능합니다

 

로그아웃 하고 docker ps로 확인해보면 당연히 제거되어 있겠죠??

728x90
반응형