[Docker] 도커 기본 명령어

2023. 8. 5. 11:48초기 과업/DevSecOps

작성자알 수 없는 사용자

728x90
반응형

안녕하세요. 기깔나는 사람들에서 DMSO를 맡고있는 정우입니다.

지난번 [Docker]도커 설치하기 + 컨테이너에 서비스 설치까지 를 하면서 

잠깐 언급이 되었지만 기본 명령어에 대해서 더 자세하게 정리해 보겠습니다.

 

https://giggal-people.tistory.com/entry/%EB%8F%84%EC%BB%A4-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

 


 

1. ps 명령어

ps => Process을 줄인 명령어

대표적인 옵션인 all의 -a 옵션을 사용할 수 있습니다.

all옵션을 사용하게되면  컨테이너에 설치했을때의 이름까지 자세하게 확인가능

 

$ docker ps

$ docker ps -a

2. Stop 명령어

실행중인 컨테이너를 중지하는 명령어 입니다.

 

생명주기 : 

생성(create) -> 시작(start) -> 실행(run)-> 중지(stopped) -> 삭제(delete)

 

$ docker stop [OPTIONS] CONTAINER [CONTAINER...]

# 기본적인 사용
$ docker stop [Container Name] 또는 [Container ID]

 


실행중인 컨테이너를 하나 또는 여러개 (띄어쓰기) 중지할 수 있습니다.

$ docker stop mysql wordpress

 

 

docker stop과 kill의 차이점

- stop

Stop은 Gracefully 하게 중지를 시킵니다.
자비롭게 그동안 하던 작업들을 ( 메시지를 보내고 있었다면 보내고 있던 메시지 ) 완료하고 컨테이너를 중지시킨다.

$ docker run alpine ping localhost

 

 

다른 워크스페이스를 켜고

 

$ docker ps -a

$ docker stop 3e560ed8a0cf

 

조금 천천히 중지되는게 보입니다. 

- kill 

Kill 같은 경우는 Stop과 달리 어떠한 것도 기다리지 않고  바로 컨테이너를 중지시킨다.

$ docker kill f1d1521bb078

 

바로 중지되는 걸 알 수 있습니다. 

 


3. rm 명령어

docker rm [OPTIONS] CONTAINER [CONTAINER...]

mysql, wordpress를 제외한 컨테이너를 제거하세요.
rm 명령어

 

 

 


4. logs 명령어

docker logs [OPTIONS] CONTAINER

 

컨테이너가 정상적으로 동작하는지 확인하는 좋은 방법은 로그를 확인하는 것 입니다.

$ docker logs <컨테이너ID 또는 Name>

 

-f 옵션

$ docker -f <컨테이너ID 또는 Name>

후에 엔터를 눌러주면

 

끝날때까지 로그 상황을 보여줍니다.

이상태로 서버에 접속해볼게요

localhost :8080

 

 

다시 돌아가보면 이렇게 로그가 실시간으로 들어오는 것을 확인할 수 있습니다. 

 

 


5. images 명령어

컨테이너안에서 image를 다운받아 사용하는데

다운받은 이미지를 볼수 있습니다. 

$ docker images [OPTIONS] [REPOSITORY[:TAG]]

 

$ docer images

 


6.  pull명령어

기존에 배웠던 run명령어로 실행하게되면 자동으로 새로 다운을 받고 실행을 하게 되는데

pull을 사용하면 수동으로 다운 받을수 있는 명령어 입니다.

 

$ docker pull ubuntu:latest

 

 

7. rmi 명령어

이미지를 삭제하는 명령어 입니다

$ docker rmi [OPTIONS] IMAGE [IMAGE...]

 

images 명령어를 통해 얻는 이미지 목록에서 이미지 ID를 입력하면 삭제가 됩니다. 

단, 컨테이너가 실행중인 이미지는 삭제되지 않습니다.

 

 

$ docker images

를 실행해 삭제하고 싶은 이미지를 선택합니다. 

 

저는  http-echo를 삭제해볼게요

$ docker rmi hashicorp/http-echo

이미지를 삭제하고 

다시 imges를 보면 삭제된 것을 확인할 수 있습니다.

 

 

 

한 번에 사용하지 않는 컨테이너, 이미지, 네트워크 모두 삭제하고 싶다면?

$ docker system prun



- 도커를 쓰지 않을 때 모두 정리하고 싶을 때 사용해주면 좋습니다! 
- 하지만 이것도 실행 중인 컨테이너에는 영향을 주지 않습니다.

$ docker ps -a

 


9. exec 명령어

이미 실행 중인 컨테이너에 명령어를 전달하고 싶을때 사용합니다

 

사용방법: 

docker exec [options] [컨테이너ID] [사용할 명령어]

 

현재 nginx가 실행중인데 여기에 exec 명령어를 써서 디렉토리를 검색해볼게요

$ docker ps -a

$ docker exec 94a5d3c9bc31 ls

 

-it 옵션 : 계속 명령어를 사용할 수 있도록 하는 옵션 ( 자주 사용하니 외워둘것 )

* it옵션 사용 시 Control + C로 못나오고 Control + D를 통해 나와야함!!

  



10. network create 명령어

 

wordpress와 mysql 연결 시에 살펴봤는데요


도커 컨테이너끼리 이름으로 통신할 수 있는 가상 네트워크를 만듭니다.

이전에 그냥 두개만 실행하는 것만으로는 실행이 안됐는데

이렇게 하면 하나의 그룹으로 묶기게 됩니다.

$ docker network create [OPTIONS] NETWORK

 

지난번 DB와 Wordpress를 연동했을때 사용했습니다! 

 


app-network 라는 이름으로 wordpress와 mysql이 통신할 네트워크를 만듭니다.

 

 

 

volume mount (-v) 명령어

$ docker stop mysql
$ docker rm mysql
$ docker run -d -p 3306:3306 \ --network=wp-network \ -e MYSQL_ALLOW_EMPTY_PASSWORD=true \ --name mysql \ mariadb:10.9

 

다시 서버에 연결하면 db 연결에러 발생

 

 

이렇게 다시 삭제후 다시 설치하면

데이터가 컨테이너가 사라지면서 다 사라집니다

 

그래서 볼륨을 사용하는데, 이는 컨테이너가 사라져도 데이터는 남아있을 수 있도록 해주는 것입니다

-v 옵션을 주고 다시 설치해볼게요

$ docker stop mysql

$ docker rm mysql

$ docker run -d -p 3306:3306 \
--network=wp-network \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--name mysql \
-v [내디렉토리 위치]:/var/lib/mysql \
mariadb:10.9

 

보통 기본설정위치 /opt/lib/mysql 로 마운트 합니다.

 

우선 저 위치에 mysql파일을 만들어줄게요! 

 

다시 테이블을 생성 합니다.

 

서버 접속해보면

 

 

 

 

오늘은 명령어를 자세하게 알아보았는데, 

다음시간엔 도커 컴포즈에 대해 알아보겠습니다!

 

 


참고자료

🔗 - 인프런 - 초보를 위한 도커 안내서

🔗 - 인프런 - 따라하며 배우는 도커와 CI환경

 

 

 

 

728x90
반응형