Docker는 개인 공부하면서 쓰는 정도라 전문적인 사용법을 알고 있지는 않다.
자주 쓰는 명령어를 기록해 둔다.
docker 19.03.5 기준 작성
기본적인 Docker 명령어 사용
# docker [COMMAND]
docker
docker 명령어는 모두 docker [COMMAND]의 형태이다.
'docker' 명령어만 실행하면 사용할 수 있는 명령어가 모두 나열된다.
docker를 사용하면 docker hub에서 docker image를 가져와서 container를 만든다.
수많은 명령어가 있는데 자주 쓰는 명령어는 다음과 같다.
모든 명령어의 자세한 내용을 확인하고 싶은 경우 docker COMMAND --help를 추가하면 된다.
예를 들어 run 명령어의 자세한 내용은 다음과 같이 확인할 수 있다.
docker run --help
container 생성 및 실행 관련 명령어
- container 생성 및 실행 : run
- container 중지 : stop
- container 실행 : start
- conatiner 재실행 : restart
container 관리 관련 명령어
- container 확인 : ps
- container 삭제 : rm
container 실행 관리 관련 명령어
- container log 확인 : logs
- container에 명령어 수행 : exec
image 관리 관련 명령어
- image 확인 : images
- image 삭제 : rmi
- image 다운로드하기 : pull
- image 업로드하기 : push
- image 태그 지정하기 : tag
위 명령어들을 사용하면 docker image를 가져와서 container를 생성하고 실행, 중지, 삭제를 하는 기본적인 사용을 할 수 있게 된다.
container 생성 및 실행 관련 명령어
run
docker image를 가져와서 docker container를 생성하기 위한 명령어
# docker run [도커 이미지]
docker run mariadb
하지만 보통 저렇게만 쓰지 않는다.
다양한 option과 arguments를 추가해서 사용해야 원하는 대로 사용할 수 있다.
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
사용할 수 있는 옵션은 아래 명령어를 통해 확인할 수 있다.
docker run --help
run --name [string] 옵션
먼저 가장 많이 사용하는 옵션은 --name이다.
name 없이 생성한 container는 임의의 name이 지정되어 중지하거나 시작할 때 대상의 name을 매번 체크해야 해서 번거롭다.
그래서 생성 시 name을 지정하는 게 좋다.
아래는 image 이름과 동일하게 container name을 지정한 경우이다.
# docker run --name [string] [IMAGE]
docker run --name mariadb mariadb
이렇게 이름을 지정하면 해당 이름으로 container를 시작/중지할 수 있다.
run -d (--detach) 옵션
-d 옵션 없이 run을 실행하면 백그라운드 실행이 아니기 때문에 터미널 종료 시 container도 같이 종료된다.
따라서 -d 옵션도 필수이다.
# docker run -d [IMAGE]
docker run -d mariadb
run -p (--publish) 옵션
container는 외부와 단절되어 있다.
특정 port에 대해 허용을 해야 해당 port를 통해 접근이 가능하다.
오픈 소스 서버들은 기본으로 사용하는 포트들이 있다.
따라서 -p 옵션도 필수이다.
#docker run -p [외부포트:내부포트] [image]
dockekr run -p 3306:3306 mariadb
mariadb, mysql은 3306, jenkins, zeppelin은 8080, PostSQL은 5432, MongoDB는 27017, Nexus는 8081과 같은 기본 포트 설정이 되어 있다.
각 컨테이너 내부 포트는 기본 포트를 사용하더라도 외부 포트는 충돌이 나지 않도록 관리해주어야 한다.
만약 여러 개의 포트를 허용하려면 -p 옵션을 여러 번 사용하면 된다.
docker -p 1234:1234 -p 5678:5678 mariadb
run -v (--volume) 옵션
예를 들어 jenkins container를 만들었다면 이후 jenkins버전이 변경되더라도 설정한 내용은 유지하고 container를 새로운 버전으로 pull 받아 만들기를 원하게 된다.
이런 경우처럼 사용자의 데이터는 유지하면서 컨테이너는 다른 버전을 사용하고자 하는 경우 -v 옵션으로 컨테이너 내 특정 위치를 외부로 연결해 두어 새로 컨테이너를 만들더라도 해당 위치의 데이터는 유지할 수 있다.
#docker run -v [외부위치]:[내부위치] [IMAGE]
docker run -v /data/jenkins:/var/jenkins_home jenkins/jenkins:lts
-p 옵션과 마찬가지로 여러 번 사용하여 마운트 할 수 있다.
run -e (--env) 옵션
사용하려는 이미지가 외부 변수를 전달받아 container 내부에서 사용할 수 있도록 작성되어 있는 경우 지정된 외부 변수를 전달하는 -e 옵션을 사용하면 된다.
-p나 -v와 마찬가지로 여러 번 사용할 수 있다.
#docker run -e [키=값] [IMAGE]
docker run -e POSTGRES_PASSWORD=bluesky -e POSTGRES_USER=bluesky postgres
run --network 옵션
여러 개의 container를 사용하면 container를 삭제/재생성하더라도 container 간 접근을 유지하기 위해 network 옵션을 사용해야 한다.
network를 만들고 run 명령 시 사용할 network를 지정하면 된다.
network에 대해서는 이전에 한번 소개한 글이 있으니 해당 글을 참고하면 된다.
2019/07/26 - [Study/CI&CD] - Docker network 사용하기
run 사용 예제
위에서 옵션을 하나하나 설명하였는데 이제 사용하는 경우를 몇 가지 나열해 본다.
# network 생성
docker network create bluesky-network
# nexus 생성
docker run -d -p 8081:8081 --name nexus --network bluesky-network sonatype/nexus3
# jenkins 생성
docker run -d --name jenkins -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock -v c:/data/jenkins:/var/jenkins_home -v c:/data/jenkins_m2:/root/.m2 --network bluesky-network -u root jenkins/jenkins:lts
# mongodb 생성
docker run -d --name mongo -p 27017:27017 -v /data/mongo:/data/db --network bluesky-network mongo
# mariadb 생성
docker run -d --name mariadb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --network bluesky-network mariadb --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
stop
run 명령어는 image pull + container create + container start를 동시에 처리해 준다.
이렇게 실행된 container를 중지하는 명령어는 stop이다.
#docker stop [CONTAINER]
docker stop mariadb
여러 개를 중지하고 싶은 경우 container를 여러 개 열거한다.
docker stop mariadb rabbitmq jenkins
start
중지된 container를 시작한다.
#docker start [CONTAINER]
docker start mariadb
여러 개를 시작하고 싶은 경우 container를 여러 개 열거한다.
docker start mariadb rabbitmq jenkins
container 실행 관리 관련 명령어
logs
container 내 지정된 로그를 확인할 수 있는 명령어
# docker logs [OPTIONS] [CONTAINER]
docker logs mariadb
마지막 몇 줄의 로그만 확인하고 싶은 경우 -f 옵션을 사용한다.
docker logs -f --tail=100 mariadb
exec
exec는 container에 명령을 수행하는 명령어이다.
주로 사용하는 건 logs로 확인하지 못하는 다른 내용들을 확인하고자 할 경우 container에 직접 들어가기 위해 사용한다.
#docker exec [OPTIONS] [CONTAINER] [ARG...]
docker exec -it mariadb bash
어떤 이미지는 bash alias가 설정되지 않은 경우가 있다.
이 경우는 /bin/sh로 호출한다.
docker exec -it mariadb /bin/sh
container 관리 관련 명령어
ps
현재 실행 중인 container를 확인할 수 있다.
# 현재 실행중인 container 확인
docker ps
# 모든 container 확인
docker ps -a
rm
container를 삭제한다.
실행 중인 container는 삭제할 수 없기 때문에 stop 한 후 삭제하여야 한다.
#docker rm [CONTAINER]
docker rm mariadb
만약 실행 중인 container가 있다면 중지하고 삭제하는 것을 동시에 하고 싶다면 -f 옵션을 사용하면 된다.
docker rm -f mariadb
여러 개를 삭제하고 싶은 경우 container를 여러 개 열거한다.
docker rm mariadb rabbitmq jenkins
여기까지 나열된 명령어를 사용하면 원하는 오픈소스의 image를 docker hub 저장소에서 다운로드하여 container를 만들고 실행하고 중지하고 지우고 원하는 옵션을 추가해 다시 재 실행하는 사이클을 반복할 수 있다.
대부분의 오픈 소스들은 docker hub 페이지에 어떻게 사용하면 되는지에 대한 사용법을 가이드해주고 있기 때문에 사용하는데 그리 어려움은 없는 편이다.
dockekr hub는 누구나 이미지를 올릴 수 있는 저장소이기 때문에 해당 오픈소스에서 제공하는 official image인지 표시해주고 있다.
image 관리 관련 명령어
images
run 명령어를 사용하면 image를 다운로드하여 container를 생성한다.
다운로드한 이미지를 확인하고 싶은 경우 images 명령어를 사용한다.
docker images
rmi
image를 삭제한다.
해당 image를 사용하는 container가 있다면 삭제할 수 없으므로 container를 삭제한 후 삭제하여야 한다.
#docker rmi [CONTAINER]
docker rmi mariadb
여러 개를 삭제하고 싶은 경우 image를 여러 개 열거한다.
docker rmi mariadb rabbitmq jenkins
rm과 rmi의 예제를 보고 헷갈릴 수 있는데 rm은 container를 삭제하는 것이고 rmi는 image를 삭제하는 것이다.
mariadb, rabbitmq, jenkins라는 이름을 동일하게 사용하였지만 rm에서는 container name을 지정하여 삭제한 경우이고 rmi에서는 image name을 지정하여 삭제한 경우이다. (예제는 단순히 container name과 image name이 같다고 가정하고 설명하였다.)
pull
image를 가져온다.
#docker pull [IMAGE]
docker pull mariadb
보통 run 명령어를 사용하면 해당 기능까지 같이 수행하기 때문에 자주 쓰지 않게 되는 것 같다.
image history
이미지의 history를 확인한다.
생성된 용량을 확인할 수 있다.
#docker image history [IMAGE]
docker image history mariadb
push
생성된 이미지를 registry에 업로드한다.
docker hub에 업로드하는 경우도 있고 혹은 따로 구축한 repository에 업로드하는 경우도 있다.
push를 위해선 login이 선행되어야 한다.
#docker push [OPTIONS] NAME[:TAG]
docker push 내이미지
login
push 할 registry에 login을 한다.
#docker login [OPTIONS] [SERVER]
docker login localhost:8083
서버를 지정하지 않으면 docker hub로 로그인을 한다.
push를 하는 경우 로그인을 한 후 push 시 [SERVER]/[IMAGE]:[TAG]를 지정하여 업로드 처리를 한다.
위와 같이 localhost:8083에 업로드하는 경우 아래처럼 push 한다.
docker push localhost:8083/bluesky-someimage:latest
tag
bluesky-someimage:latest라는 이미지를 생성한 경우서 push를 위해선 서버를 지정하기 위해 tag를 사용한다.
#docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker tag bluesky-someimage:latest localhost:8083/bluesky-someimage:latest
위와 같이 사용하면 localhost:8083/bluesky-someimage:latest 란 태그가 붙은 이미지가 링크되고 해당 이미지를 push 하면 지정된 repository로 업로드하게 된다.
sytstem 관련 명령어
events
도커 데몬에서 어떤 일이 일어나고 있는지 실시간 스트림 로그로 확인 (아래 둘 중 하나를 사용)
docker system events
docker events
만약 특정 항목에 대한 출력 결과만 보고 싶은 경우 --filter 옵션 사용
docker events --filter 'type=image'
stats
실행 중인 모든 container의 자원 사용량을 스트림으로 출력
docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
42974ae6b3de k8s_jenkins_jenkins-deployment-5588f7bb5c-g5dsl_default_fa3b66be-cb49-4878-b46c-1feed41f564e_0 0.06% 663.1MiB / 7.007GiB 9.24% 0B / 0B 129MB / 3.36MB 39
f78d2227ac3a k8s_zoo3_zoo3-c46589699-pcrgn_default_4913bdf9-3c6d-420e-ab21-57c13d7817d3_5 0.09% 84.12MiB / 7.007GiB 1.17% 0B / 0B 36.6MB / 20.5kB 46
65927c7c5d35 k8s_redis_redis-deployment-c96fb6784-qb6gn_default_581f2b98-2dd0-457b-87c2-1a14cfc06b52_11 0.08% 2.039MiB / 7.007GiB 0.03% 0B / 0B 9.11MB / 0B 5
a1107316f2e2 k8s_zoo1_zoo1-65cff9f54c-bqmdr_default_893412ca-d476-4093-aae4-b031ed40e62d_5 0.07% 49.63MiB / 7.007GiB 0.69% 0B / 0B 10.5MB / 16.4kB 38
236f6e932a9d k8s_mariadb_mariadb-deployment-79b57c4d79-fr576_default_374d6934-6ba9-4bd4-9b27-07e9a9dfef65_18 0.01% 28.57MiB / 7.007GiB 0.40% 0B / 0B 57.7MB / 19MB 8
e091bd863d44 k8s_zoo2_zoo2-67669cb7f-m68x7_default_3df5ebb2-fedb-4be6-9253-64e9e45252cb_5 0.05% 65.04MiB / 7.007GiB 0.91% 0B / 0B 63MB / 24.6kB 38
5a39902ec10e k8s_mongo_mongo-deployment-6ff7cd6656-zc24r_default_bbbf56a4-d0f6-485c-a547-b9860e975bad_18 0.22% 31.82MiB / 7.007GiB 0.44% 0B / 0B 79.1MB / 163MB 32
173ff76869f2 k8s_nexus_nexus-deployment-557b544497-t6hf4_default_1cd3d78d-67cf-4c49-8b7e-c848faa13db8_18 0.27% 1.379GiB / 7.007GiB 19.67% 0B / 0B 272MB / 147kB 93
33dd67c01f0d k8s_zeppelin_zeppelin-deployment-b7875cd89-vv9jt_default_6cfe9831-4832-408c-912d-63af12a090ad_18 0.28% 365.3MiB / 7.007GiB 5.09% 0B / 0B 255MB / 106kB 24
39b808663fa1 k8s_spring_bluesky-cloud-config-server-deployment-766cfcd769-sr24h_default_2b3136e7-db3f-451f-970a-0149884976b5_18 0.03% 248.5MiB / 7.007GiB 3.46% 0B / 0B 69.1MB / 13.1MB 47
2c47c876b355 k8s_bluesky-cloud-admin-server_bluesky-cloud-admin-server-deployment-7bfcc88d68-wf5sk_default_b0556eaf-22c7-4462-b682-34a4b3aae356_18 0.07% 266.3MiB / 7.007GiB 3.71% 0B / 0B 87.1MB / 86kB 46
66d5e5271975 k8s_spring_bluesky-cloud-netflix-eureka-server-deployment-5878b6bcd5-q7h9q_default_3bcc4ec0-d751-4083-a97f-34085228ea1d_18 0.30% 214.4MiB / 7.007GiB 2.99% 0B / 0B 112MB / 0B 68
3273f2dd00a5 k8s_mssql_mssql-deployment-999b7c7b9-q5z5h_default_f26c048b-3137-454b-9075-feeb39abc627_18 0.59% 966.1MiB / 7.007GiB 13.46% 0B / 0B 1.36GB / 1.56MB 143
스트림이 아닌 한 번만 출력을 원하는 경우 --no-stream 옵션 사용
docker stats --no-stream
df
docker에서 사용하고 있는 image, container, volume의 현황 확인
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 128 21 49.99GB 41.19GB (82%)
Containers 86 45 4.469MB 562.3kB (12%)
Local Volumes 239 24 29.66GB 28.75GB (96%)
Build Cache 157 0 213B 213B
삭제 관련 명령어
오래된 container나 image를 삭제할 때 rm, rmi 또는 image prune 명령어를 사용한다.
다음과 같이 조합하여 사용한다.
사용하지 않는 conatiner 삭제
docker rm -v $(docker ps --filter status=exited -q --no-trunc 2>/dev/null) 2>/dev/null
사용하지 않는 image 삭제
dangling=true 옵션은 tag가 <none>으로 설정된 이미지를 검색한다.
https://docs.docker.com/engine/reference/commandline/images/
docker rmi $(docker images --filter dangling=true -q --no-trunc 2>/dev/null) 2>/dev/null
날짜 기준 이미지 삭제
지정된 날짜 또는 일정 시간 이전의 이미지를 강제로 삭제할 수 있다.
docker image prune -a --force --filter "until=2017-01-04T00:00:00"
docker image prune -a --force --filter "until=8760h" // 24*365
'Study > Docker & Kubernetes' 카테고리의 다른 글
로컬 docker-desktop의 kubernetes (k8s)에 elasticsearch, kibana 설치해보기 (0) | 2022.10.08 |
---|---|
Window에서 Docker Desktop 없이 docker, kubernetes 사용하기 (Rancher Desktop 사용하기) (0) | 2021.12.01 |
kubernetes kubectl 명령어 모음 (0) | 2021.08.13 |
Dockerfile 명령어 (0) | 2021.07.02 |
개인 공부용 Docker Desktop kubernetes 설정 모음 (0) | 2021.06.02 |
Docker Desktop Community 2.3.0.2 이후 Windows 10 Home 지원 시작 (0) | 2020.05.17 |
window docker desktop 2.3.0.2에서 kubernetes volume mount가 되지 않는 현상 (0) | 2020.05.12 |
Docker compose 사용하기 (0) | 2019.08.01 |
Docker network 사용하기 (0) | 2019.07.26 |
Docker 에 설치한 Jenkins container 에서 java 11 과 Docker 사용하기 (0) | 2019.02.24 |