본문 바로가기
Docker

2. 도커의 명령어 -(1)

by shulk 2024. 11. 13.

1. 이미지 다운로드

# docker pull 이미지명
$ docker pull nginx # docker pull nginx:latest와 동일하게 작동

 

(1) 이미지를 어디서 다운받는걸까?

저렇게 명령어치고 다운받은 이미지는 도커허브 라는 사이트에서 다운받는데, 도커허브는 깃허브 처럼 사람들이 이미지들을 올려둬서 그걸 다운받는거다.

Dockerhub는 Github처럼 이미지를 저장 및 다운받을 수 있는 저장소 역할을 하고 있다.

 

사진보면 도커허브에서 nginx 검색후 Tag부분 보면 저거는 nginx의 버전들을 말하는거다.

 

(2) 특정 버전 이미지 다운로드 받기

근데 태그명을 안붙이고 이미지명만 적으면 위에 1번 명령어 보면 기본값으로 :latest 가 붙는데 이건 최신버전을 말한다.

# docker pull 이미지명:태그명
$ docker pull nginx:stable-perl

 

이전에 최신버전 다운 받고,이후 특정 버전 다운받았을때 덮어 지는게 아닌 추가로 다른 버전 다운받는거다

 

2. 이미지  조회,삭제

(1) 다운받은 이미지 모두 조회

ls는 lsit의 약자이다

$ docker image ls

 

(2) 이미지 삭제

$ docker image rm [이미지 ID 또는 이미지명]

이미지 아이디의 경우 앞의 4자리만 입력해도 된다.

저렇게 다른버전 설치후 삭제후 목록 조회해보면 잘 삭제된다.

 

(3) 중지된 컨테이너에서 사용하고 있는 이미지 강제 삭제하기

사진보면 저렇게 에러 뜨는데 저거는 이전에 컨테이너에 있던 nginx 중지했지만 중지된 컨테이너에서 존재하는 이미지니 삭제할 수 없다 뜬거다.

중지된 컨테이너에 있는거 삭제 하고 싶을땐 

$ docker image rm -f [이미지 ID 또는 이미지명]

 

그러나 실행 중인 컨테이너에서 사용하고 있는 이미지는 강제로 삭제할 수 없다.(이럴땐 중단 시키고 삭제)

 

(4) 전체 이미지 삭제 

# 컨테이너에서 사용하고 있지 않은 이미지만 전체 삭제
$ docker image rm $(docker images -q)

# 컨테이너에서 사용하고 있는 이미지를 포함해서 전체 이미지 삭제
$ docker image rm -f $(docker images -q)

3. 컨테이너 생성 / 실행 

(1) 존재하는 이미지로 컨테이너 생성,실행

# docker create 이미지명[:태그명]
$ docker create nginx

$ docker ps -a # 모든 컨테이너 조회

$ docker start 컨테이너명[또는 컨테이너 ID]  #해당 컨테이너 실행

create 이미지명을 적으면 해당 이미지 기반으로 컨테이너를 실행 안하고 생성만 하는거다.

그래서 ps -a 로 컨테이너 조회해보면 상태쪽보니 created 저렇게 생성만 한거고 이제 실행 시키는건 컨테이너 아이디명 적고 확인해보면 상태쪽에 저렇게 실행된다 나온다.

 

(2) 존재하지 않는 이미지로 컨테이너 생성,실행

현재 내 로컬에는 mysql 이미지가 없는데 이렇게 할경우 이미지를 다운받는과 동시에 이 이미지기반 컨테이너를 생성하게 된다.

그러니 직접 pull해서 mysql 다운받고 따로 컨테이너 생성할 필요 없다.

 

(3) 컨테이너 생성과 동시에 실행

위에 나온 create 랑 start 명령어는 현업에서 잘 사용 안한다. 생성이랑 실행 합쳐놓은 run을 많이 사용한다

# docker run 이미지명[:태그명]
$ docker run nginx # 포그라운드에서 실행 (추가적인 명령어 조작을 할 수가 없음)

# Ctrl + C로 종료할 수 있음

현재 사진은 nginx를 run 한거고, 이렇게 run 하고 명령어창에 다음 명령어 입력하고 싶은데 입력이 안된다. 

이유는 포그라운드때문인데

 

일단 포그라운드(foreground)와 백그라운드(background)란?

포그라운드=> 내가 실행시킨 프로그램의 내용이 화면에서 실행되고 출력되는 상태(해당 프로그램이 어떻게 돌아가고 로그등이 화면에 찍힌다)

백그라운드=> 내가 실행시킨 프로그램이 컴퓨터 내부적으로 실행되는 상태(내부에서 실행되니 로그나 어떻게 실행되고 있는지 화면에 안나온다)


그래서 run으로 할시 포그라운드라 다른 프로그램을 조작할 수 없다.


그럼 백그라운드로 실행되게 해보기위해 일단 컨트롤+C로 나오고 

# docker run -d 이미지명[:태그명]
$ docker run -d nginx

이렇게 하면 포그라운드와 다르게 다른 명령어 작업 할 수 있다.

그리고 컨테이너 삭제할때 밑에 사진보면 저렇게 동시에 여러개 삭제 가능하다.(당연히 컨테이너 실행중인거 중후 삭제)

 

(4) 컨테이너 이름 붙이기

# docker run -d --name [컨테이너 이름] 이미지명[:태그명]
$ docker run -d --name my-web-server nginx

이름을 연대기로 설정하고 했을경우

 

(5) 호스트의 포트와 컨테이너의 포트를 연결하기

이렇게 해당 컨테이너를 들어가봤는데 안들어가진다.

 

이유는 컨테이너는 컴퓨터 안에 미니컴퓨터라 저렇게 외부의 사용자가 요청하면 일단 호스트 컴퓨터로 들어오고나서 미니컴퓨터로 가야하는데,환경이 분리되어 있으니 접근 못한다.

그러므로 먼저 호스트컴퓨터인 4000번 포트에 요청후 호스트컴퓨터가 미니컴퓨터에 접근할수있도록 설정해야한다.

 

지금 그림은 예시라 호스트 컴퓨터 4000번 포트로 했는데,만약 다르게 호스트 컴퓨터 포트번호 80으로
docker run -d -p 80:80 nginx 할경우 http://localhost:80 하면 정상적으로 들어가진다.

 

# docker run -d -p [호스트 포트]:[컨테이너 포트] 이미지명[:태그명]
$ docker run -d -p 4000:80 nginx

이러고 이제 4000번으로 요청하면 nginx가 뜬다.

 

'Docker' 카테고리의 다른 글

6. 도커 파일 -(1)  (0) 2024.11.15
5. 도커 볼륨 -(2)  (0) 2024.11.14
4. 도커 볼륨 -(1)  (0) 2024.11.14
3. 도커의 명령어 -(2)  (0) 2024.11.13
1. 도커의 개념  (0) 2024.11.12