반응형

Docker 중급 명령어 : https://i5i5.tistory.com/343

 

 만약 Permission denied가 뜨면 앞에 sudo를 붙여서 명령어를 입력해주세요. 슈퍼유저 권한으로 명령어를 실행하시길 바랍니다.

ex) $ sudo docker ps

Docker 이미지 명령어

이미지 목록 보기

$ docker images

이미지 삭제

$ docker rmi <이미지 ID>
// -f를 붙이면 컨테이너도 삭제 후 이미지 삭제
$ docker rmi -f <이미지 ID>

이미지 빌드 명령어

// docer build <옵션> <docker 이미지 이름 혹은 id> <docker file 경로>

// 현재 경로에서 'dockerfile'이라는 파일 찾아 그 file 빌드하기.
$ docker build -t <사용자 지정 이미지 이름> .

// 특정 dockerfile 지정하여, 그 file을 빌드하기.
$ docker build -t <사용자 지정 이미지이름> -f <특정 docker file>

// 캐시 비활성화
docker build --no-cache -t something:tag .

// [예시]
docker build -t ngins:test .

no-cache의 의미
-> 처음 빌드할 때와 동일하게 모든 레이어를 다시 빌드하게 됩니다.

Docker 컨테이너 명령어

컨테이너 목록 보기

// 현재 실행중인 컨테이너 확인
$ docker ps
// 실행중인 컨테이너 및 중지중인 컨테이너까지 모두 확인
$ docker ps -a

 아래의 --filter 명령을 활용하면 컨테이너의 상태를 대상으로 필터링해서 목록을 볼 수 있습니다. filter로 쓸 수 있는 STATUS는 다음과 같습니다. created, restarting, running, removing, paused, exited, dead

$ docker ps --filter status=running

CONTAINER ID        IMAGE                  COMMAND             CREATED             STATUS              PORTS               NAMES
715ebfcee040        busybox                "top"               16 minutes ago      Up 16 minutes                           i_am_nostalgic
d5c976d3c462        busybox                "top"               23 minutes ago      Up 23 minutes                           top
9b6247364a03        busybox                "top"               24 minutes ago      Up 24 minutes        

컨테이너 실행

$ docker run <옵션> <이미지 이름 or 이미지 ID> <실행할 파일>
// mariadb 실행
$ docker run --name testdb -e MYSQL_ROOT_PASSWORD=(패스워드) -d mariadb:10.0

// "ubuntutest" 이름의 컨테이너를 가진
// ubuntu라는 이름의 이미지를 실행함, 그 후에 /bin/bash를 실행한다.
$ docker run -i -t --name ubuntutest ubuntu /bin/bash

$ docker run -it dock-image/ubun:latest /bin/bash
$ docker run -d -p 80:80 -p 443:443 nginx:latest

보통 -itd 옵션을 많이 씁니다.

  • -i, --interactive=false: 표준 입력(stdin)을 활성화하며 컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지합니다. 보통 이 옵션을 사용하여 Bash에 명령을 입력합니다.
  • -t, --tty=false: TTY 모드(pseudo-TTY)를 사용합니다. Bash를 사용하려면 이 옵션을 설정해야 합니다. 이 옵션을 설정하지 않으면 명령을 입력할 수는 있지만 셸이 표시되지 않습니다.
  • --name=””: 컨테이너에 이름을 설정합니다.
  • -d, --detach=false: Detached 모드입니다. 보통 데몬 모드라고 부르며 컨테이너가 백그라운드로 실행됩니다.
  • -p, --publish=[]: 호스트에 연결된 컨테이너의 특정 포트를 외부에 노출합니다. 보통 웹 서버의 포트를 노출할 때 주로 사용합니다.

  • <호스트 포트>:<컨테이너 포트> 예) -p 80:80
  • <IP 주소>:<호스트 포트>:<컨테이너 포트> 호스트에 네트워크 인터페이스가 여러 개이거나 IP 주소가 여러 개 일 때 사용합니다. 예) -p 192.168.0.10:80:80
  • <IP 주소>::<컨테이너 포트> 호스트 포트를 설정하지 않으면 호스트의 포트 번호가 무작위로 설정됩니다. 예) -p 192.168.0.10::80
  • <컨테이너 포트> 컨테이너 포트만 설정하면 호스트의 포트 번호가 무작위로 설정됩니다. 예) -p 80

컨테이너 종료

// 컨테이너에서 나오고 종료하고 싶을 때
$ docker exit

(ref. https://itholic.github.io/docker-enter-container/)

컨테이너 중지

$ docker stop <컨테이너 이름 혹은 ID>

컨테이너 삭제

// 아마 컨테이너를 중지한 후에
// 삭제가 가능할 겁니다.
// 컨테이너 ID 값으로 삭제
$ docker rm [CONTAINER_ID]

// 컨테이너 이름으로 삭제
$ docker rm [CONTAINER_NAME]

컨테이너 시작 및 재시작

$ docker start <컨테이너 이름 혹은 ID>

컨테이너 접속

$ docker attach <컨테이너 이름 혹은 ID>

컨테이너 접속 2

$ docker exec <컨테이너 이름 혹은 ID>
// 보통은 /bin/bash 명령어를 쓰고 싶으면 아래와 같이 실행합니다.
$ docker exec -it <컨테이너 이름 혹은 ID> /bin/bash

// 만약 root 권한을 얻은채로 실행하고 싶다면 아래와 같이 실행합니다.
$ docker exec -itu 0 <컨테이너 이름 혹은 ID> /bin/bash

 여기서 attach와 exec의 차이점은

 attach는 실행되고 있는 container에 접속할 떄 사용합니다. 웹서버와 같이 백그라운드에서 실행되는 container에 attach로 접속하면 커맨드는 입력할 수 없고 로그만 볼 수 있습니다.

 

*주의

만약 attach로 접속하고 ctrl + c로 종료해버리면, 컨테이너가 종료(Exit)됩니다. 이렇게되면,서버가 종료되므로 주의하셔야합니다. 그래서 exec로 접속하는걸 권장드립니다. (물론 종료가 되도 docker start로 다시 시작해도 되긴 하지만, 실시간 성이 중요시되는 서버라면, 서버가 종료되는 건 안좋은 결과입니다.)

 

 exec는 container에 새로운 프로세스를 실행시킬 때 사용합니다. container에 bin/bash를 실행시켜서 쉘을 띄우는 데도 사용합니다. exec를 사용해서 실행되는 명령어는 pid 1이 살아있을 때만 실행되고 container가 재시작 될 때는 같이 재시작되지 않습니다. 그리고 만약 container가 pause되면 docker exec 명령어는 에러를 내고 실행이 실패하게 됩니다.

 

 참고로 container의 pid 1은 리눅스에 의해 특별히 관리되고 있습니다. 그래서 기본 액션 시그널을 무시합니다. 그래서 따로 코드 상에서 정해놓지 않은 이상 SIGINT 또는 sigterm 같은 것으로 종료되지 않습니다.

 

참고 자료

이미지 run 명령어

pyrasis.com/book/DockerForTheReallyImpatient/Chapter20/28

 

이미지 build 명령어

 

 

 

twofootdog.github.io/Docker-Docker-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%A0%95%EB%A6%AC/

 

 

 

 
반응형