티스토리 뷰
Docker는 컨테이너 플랫폼으로 굉장히 유용하게 다양한 분야에서 사용되어질 수 있습니다. 특히 무엇인가 설치를 많이해야하는 상황일 때 컨테이너화를 통해 배포를 하면 이를 다른 곳에서는 설치 후 별도의 작업없이 개발을 시작할 수 있는데요. 그만큼 각광도 많이 받고 있기 때문에 진화도 빠르게 되어가고 있습니다. Docker를 개발하는 관점은 크게 인프라적인 관점이 가장 클 것입니다. 리눅에서도 수 많은 명령어가 있어 리눅스 프로그래밍을 잘하는 것은 명령어 싸움이라고 할 만틈 얼마나 필수 적인 그리고 도움되는 명령어를 잘 알고 있는지도 개발속도나 개발의 효율성 관점에서 큰 몫을 차지한다고 할 수 있습니다. 오늘은 Docker의 명령어 중 주로 필요한 것에 대해서 살펴 보도록 하겠습니다.
https://docs.docker.com/engine/reference/run/
Docker run reference
docs.docker.com
docker run은 특정 컨테이너를 실행할 때 보통 사용하는데 공식문서에 정리되어 있는 링크는 위와 같습니다. 그중에서 가장 먼저 많이 사용하는 것 몇가지만 오늘 알아보도록 하겠습니다.
$ docker version
Client:
Cloud integration: v1.0.29
Version: 20.10.20
API version: 1.41
Go version: go1.18.7
Git commit: 9fdeb9c
Built: Tue Oct 18 18:20:35 2022
OS/Arch: darwin/arm64
Context: default
Experimental: true
Server: Docker Desktop 4.13.1 (90346)
Engine:
Version: 20.10.20
API version: 1.41 (minimum version 1.12)
Go version: go1.18.7
Git commit: 03df974
Built: Tue Oct 18 18:18:16 2022
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.6.8
GitCommit: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
현재 저의 PC에는 docker enginedl 20.10.20이 설치되어 있네요. 그 외에도 다양한 정보들을 볼 수 있는데, Docker Engine 자체가 이루는 프로세스 들이 Engine이라는 것 외에도 containerd, runc, docker-init 과 같은 것들이 있고 각각의 버전들도 표기되어지는 것을 볼 수 있습니다.
$ docker info
Client:
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc., v0.9.1)
compose: Docker Compose (Docker Inc., v2.12.1)
dev: Docker Dev Environments (Docker Inc., v0.0.3)
extension: Manages Docker extensions (Docker Inc., v0.2.13)
sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc., 0.6.0)
scan: Docker Scan (Docker Inc., v0.21.0)
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 3
Server Version: 20.10.20
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
runc version: v1.1.4-0-g5fd4c4d
init version: de40ad0
Security Options:
seccomp
Profile: default
cgroupns
Kernel Version: 5.15.49-linuxkit
Operating System: Docker Desktop
OSType: linux
Architecture: aarch64
CPUs: 4
Total Memory: 7.667GiB
Name: docker-desktop
ID: F4BO:DD3Q:YA6H:UBCQ:CDLB:JDDE:N45Q:H2GY:EOQI:XXCG:ELEM:4CTR
Docker Root Dir: /var/lib/docker
Debug Mode: false
HTTP Proxy: http.docker.internal:3128
HTTPS Proxy: http.docker.internal:3128
No Proxy: hubproxy.docker.internal
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
hubproxy.docker.internal:5000
127.0.0.0/8
Live Restore Enabled: false
docker info를 타이핑하니, 또 엄청난 정보가 나오고 있습니다. 현재 이미지 갯수라던지, 아키텍쳐라던지, 메모리, 파일시스템이라던지 등등이 나오고 있는데, 실제 자신이 구성하는 인프라의 특성이 있다면 이 내용도 아주 중요한 내용이니 참고해주시면 좋겟습니다.
그 다음 부터는 설명 위주로 간단하게 진행하도록 하겠습니다.
$ docker images는 현재 어떤 이미지들이 내 PC에 다운 받아져 있는지 확인 할 수가 있고
$ docker ps -a 는 어떤 컨테이너들이 생성되었거나, 종료되었거나, 멈춰있거나, 동작중이거나 다 보여주게 됩니다.
$ docker exec -it <container name> /bin/bash 이렇게 하면 실생중인 특정컨테이너에 /bin/bash로 접속해서 실시간으로 tty로 출력하게 되구요. 물론 컨테이너 자체에 /bin/bash가 설치되어지지 않았다면 접속할 수 없겟지요.
$ docker start <container name> 은 만약 docker run 한 뒤에, 컨테이너가 종료되었으나, 삭제되어지지 않았을 경우 다시 실행시킬때 사용합니다.
$ docker run -it --name <conatiner name> <image name> /bin/bash 는 특정 이미지를 기반으로 컨테이너를 생성해서 시작하라는 뜻이고 entry point는 역시나 /bin/bash 입니다.
$ docker commit <container name> <image name> 는 특정 컨테이너를 이미화 시킬 때 사용합니다. 보통 스크래치나 기본 이미지에서 시작해서 자신만의 것들을 설치한 후 저장하고 싶을때 commit 명령어를 사용하 곤 합니다.
$ docker rmi <image name or image id> 는 특정 이미지를 삭제할 때 사용하며 만약 특정 이미지 기반으로 컨테이너가 생성되어서 있을때는 삭제되어지지 않으니, 미리 지우고 싶다면 컨테이너가 있는지 확인이 필요합니다.
$ docker logs --tail 10 -f <container name> 특정 컨테이너의 로그 마지막 10줄에 대해서 보여주는 명령어 입니다. 아무래도 -it로 항상 실행할 순 없기때문에 어떤 동작을 하고 있는지 궁금할 때 자주 이용합니다.
이외에도 굉장히 많은 명령어들이 있으나, 우선은 하나씩 컨테이너를 생성하고 삭제하고, 이미지화 시키고 로그를 보면서 추가적인 명령어들을 하나둘 씩 익히면 좋겠고, docker 공식사이트에 굉장히 문서화가 잘 되어 잇으니 필요한 내용이 있을 때 찾아보시면 좋습니다. 이를 테면 컨테이너에 리소스를 얼마나 할 당할지도 정할 수 있고 볼륨옵션도 정상할 수 있으며, 네트워크 브리지도 생성해서 매핑할 수 있습니다. 이런 명령어들은 Dockerfile을 통해 다시 함축 시킬 수도 있으니 하나씩 필요한 사항 들이 있을때 리서치해나간다면 여러분 개인의 환경에 가장 최적화되게 세팅할 수 있을 것인데, 앞으로 서버 카테코리에 직접 서버 구축 하는 일들을 정리하면서 틈틈히 정리해 나가도록 하겠습니다.
'Technology > AWS, Docker' 카테고리의 다른 글
AWS API Gateway 제대로 써보자 2 (0) | 2022.12.06 |
---|---|
AWS API Gateway 제대로 써보자 1 (0) | 2022.12.06 |
Serverless 는 서버가 있다? 없다? (0) | 2022.12.05 |
My Docker environment with ubuntu app, (0) | 2017.08.03 |
Start Docker, (0) | 2017.07.15 |