[Docker] 컨테이너 이용 방법

2025. 9. 11. 22:08개발/개발환경세팅

컨테이너 이용방법

 

1. Dockerfile & Docker Build

일단 image 생성시에는 dockerfile을 사용하는 것을 적극 권장한다.

나는 너무 오랜만에 해서 (선)ubuntu 이미지를 다운받고 (후)세팅하니까 매우 많이 귀찮았음..

Dockefile의 좋은 점은, 세팅 후에 Linux 등 shell에서 미리 install 가능한 것 들이나 port 등.. 미리미리 하면 좋을 걸 다 세팅을 하면 된다...

 

쨌든 Dockerfile은 내가 안 했으니까 다른 자료를 찾아보는 걸 추천한다!

아마 Dockerfile 문법 공부를 덜한 나보다 더 좋은 자료가 많을 것이다.

 

그래도 나중에 써먹을 수 있으니까 docker build 명령어는 써둔다.

docker build -t <image_name> -f <dockerfile_path> .

 

이런식으로 이미지를 만들거나, 이미 기존에 있는 image를 git pull 마냥 pull 받을 수 있다.

 

2. git image pull

docker image pull ubuntu:latest

 

다음과 같은 식으로 docker hub에 있는 이미지를 가져올 수 있다.

 

3. docker network create

 

# LAN1 네트워크 생성
docker network create \
  --driver bridge \
  --subnet 192.168.10.0/24 \
  lan1

# LAN2 네트워크 생성
docker network create \
  --driver bridge \
  --subnet 192.168.20.0/24 \
  lan2

 

docker run -dit --name c1 --network lan1 alpine sh
docker run -dit --name c2 --network lan1 alpine sh

 

docker run -dit --name c3 --network lan2 alpine sh
docker run -dit --name c4 --network lan2 alpine sh

 

다음과 같은 네트워크에 속하는 옵션등이 있다.

 

4. docker images

 

다음과 같이 현재 존재하는 이미지 확인가능.

이 이미지를 컨테이너에 넣어야하는데 그걸 컨테이너를 생성해서 넣는 것이 바로 docker run.. 이다 

나는 사실 여기서 docker desktop에서 run하고 stop하기는 하는 편인데..

처음 생성은 cmd에서 하는 걸 권장한다.

왜냐하면 docker run 뒤에 옵션을 사용해서 port나 다른 network 설정등을 진행하는데, 하지 않으면 지금까지 작업내역을 커밋한 이미지를 만들고 또 새로운 컨테이너에 태워야하기 떄문이다.

 

3.docker run docker_ID

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
docker run --name ubuntu-server -p 5222:22 Image_name/ID

 

Image는 name도 되고, ID도 됨(HASH값)

 

내가 쓸만한 옵션들은 다음과 같다..(추가될 수 있음)

 

-p 5222:22

포트등을 포워드 한다.

일단 도커 내 이미지에서 쓰는 22번 포트는 열려있지만, 실제 포트는 window에서 점유하고 있기 떄문에, window에서 사용하지 않는 포트를 포워딩해서 docker container에 있는 이미지의 포트워 연결해줘야한다.

ssh 연결을 위해 필수

참고로 Docker Container 이미지는 WSL Hypervisor 위에 돌아가는 것이기 때문에 네트워크 인터페이스가 있다고하더라도,,, Host의 IP로 연결이 된다.....

 

-u user/userid

특정 user로 접속하기위한 것

 

-h hostname

말그대로 hostname을 설정하기 위한 것. 

 

--name container_name

 

-it

컨테이너를 종료하지 않은 채, terminal(HostPC)과 container를 연결함

 

다른 옵션은 아래에서 참고, 사실 이거보다 더 있긴하다.

https://velog.io/@msjeong97/docker-run-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%82%AC%EC%9A%A9%EB%B2%95#-p

 

docker run [option...] -> contatiner 생성 + 실행

docker start containerName -> 실행

docker stop ContainerName -> 멈춤

docker restart ContainerName -> 재시작

docker attach ConatinerName -> Container 실행된 상태에서 terminal에서 shell로 접속

 

5. docker commit [현재 컨테이너 이름] [현재 상태를 저장할 이미지 이름: 버전]

 

예시

docker commit ubuntu-server-2 my-custom-image:latest

-> 이걸 나중에 docker run으로 다시 쓰면 된다.

 

6. docker ps -a

현재 돌아가는 docker 프로세스 확인

 

 

7. docker rm ubuntu-server-2

사용하지 않는 컨테이너를 삭제하는 명령어

 

 

 

 

 

 

회사를 다니다보니 기본적인 것도 많이 까먹는데, Dockerfile로 Linux 이미지를 생성할 때, 자동으로 setting 되게 끔 할 수 있었겠지만,,

실수로 그런 작업을 하지 않고 vmware 마냥 설치를 진행해버렸다. 

 

이미 이미지는 있고 이전에 설치 command 를 볼 수 있는 history content가 대부분 날아가버렸다.

고로 어느정도 docker는 container가 stop되면, 서비스 데몬들이 모두 꺼진다.

때문에 부팅을 할 때 마다. service ssh start 명령어를 쳐줘야 붙을 수 있다는 것이다.

 

.bashrc를 vim으로 켜서

service ssh start를 추가해준다.

 

이러면 terminal에 붙을 때 마다, ssh 데몬이 자동 실행될 것이다.

 

필수적으로 깔면 좋은 툴들은, fzf, rg, zeiode(?) 가 있고, bat도 좋다고 한다.

개인적으로 rg과 fzf를 깔면 Ctrl + R 했을 때, 이전에 쳤던 커맨드를 조회할 수 있는게 이게 무척 편하다. 그래서 추천한다.

fzf : 파일명 탐색기

rg: 파일컨텐츠 탐색기

zeocide: 이전에 이동했던 경로를 쉽게 jump 할 수 있는 유틸리티 

정확한 원리는 모르겠지만, fuzzer 기술을 쓴 어쩌고라고 하는데,, 그래서 vscode의 파일 탐색기나, linux 내장 커맨드보다 쉽고 빠르게 이용이 가능하다.

 

사실 두서가 굉장히 없었다.