FROM

- 이미지 생성 시 기반이 되는 이미지 레이어를 명시

- <이미지이름>:<태그> 형식으로 작성

- 태그를 붙이지 않으면 자동으로 가장 최신 버전으로 내려받음

  (예: ubuntu:14.04)

 

WORKDIR

- 도커파일 뒤에 오는 모든 지시자(RUN, CMD, COPY, ADD 등)에 대한 작업 디렉토리를 설정

- 리눅스 명령어의 cd와 비슷한 역할

- 작업 디렉토리를 별도로 지정하여, 로컬에 있는 파일을 도커 컨테이너로 복사할 때 분리하는데 쓰임

 

COPY

- 현재 로컬 컴퓨터에 있는 파일을 도커 컨테이너 안으로 복사하는 기능

 

RUN

- 도커 이미지가 생성되기 전에 수행할 셀 명령어

 

CMD

- 컨테이너가 시작됐을 때 실행할 실행 파일 또는 쉘 스크립트

- 이 명령어는 도커 파일 내에서 한 번만 쓸 수 있음

 

 

파일 예시

# 베이스 이미지를 명시합니다.
FROM alpine

WORKDIR /usr/src/app

COPY ./ ./

# 추가로 필요한 파일들을 내려받습니다. (여기서는 주석처리)
#RUN command

# 컨테이너 시작 시 실행할 명령어를 명시합니다.
CMD [ "echo", "hello" ]
 

 

명령 프롬프트(CMD)에서 위 파일이 있는 폴더로 이동한 후에

 

docker build .

위 명령어 실행하면, docker 이미지가 생성됨

 

docker run -it <이미지 ID>

생성된 docker 이미지 ID로 위 명령어를 수행하면

hello 가 찍히는 것을 확인할 수 있음

 

 

 

1.

도커 환경에서 레디스 서버 실행

docker run redis

 

 

2.

명령 프롬프트(cmd) 하나 더 띄우고

docker ps

위 명령어로 redis 서버 컨테이너 ID를 확인

 

3.

레디스 클라이언트 실행

docker exec -it <컨테이너 ID> redis-cli

 

exec 는 실행 중인 컨테이너에 명령어를 전달할 때 사용하는 명령어

-it 는 i(interactive)와 t(terminal)이 합쳐진 옵션

-it 가 없으면, 레디스 클라이언트가 실행 후 바로 종료되어, 명령어 입력이 안되므로 꼭 넣어야 함

 

 

 

ls : 도커 이미지의 내부 파일 구조 보기

 

docker run <이미지 이름> ls

 

- 예시 : docker run alpine ls

  alpine 이라는 도커 이미지에 어떤 파일 구조를 가지는지 볼 수 있음

- docker run hello-world ls 하면 오류 발생

  hello-world 이미지에는 ls 명령어를 사용할 수 있는 파일이 들어있지 않기 때문

 


docker ps : 컨테이너 나열하기

 

- docker는 도커 클라이언트를 가리키며, ps는 oricess status의 약자

- 출력결과 (실행 중인 도커 컨테이너 있으면 아래에 목록이 뜸)
  CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 

  . CONTAINER ID : 컨테이너의 고유한 아이디 해시값, 실제로는 더 길지만 일부분만 출력

  . IMAGE : 컨테이너 생성시 사용한 도커 이미지 이름

  . COMMAND : 컨테이너 시작시 실행될 명령어

  . CREATED : 컨테이너가 생성된 시각

  . STATUS : 컨테이너의 상태, 실행 중은 Up, 종료는 Exited, 일시 정지는 Pause

  . PORTS : 컨테이너가 개방한 포트와 호스트에 연결한 포트. 특별한 설정하지 않으면 출력되지 않음

  . NAMES : 컨테이너의 고유한 이름

 

 - docker ps -a 입력 시, 

   현재 실행 중인 것 외에도, 중단된 컨테이너까지 보여짐

 


docker create <이미지 이름> : 도커 이미지 이용해 도커 컨테이너 생성

docker start <이미지 이름> : 생성된 컨테이너를 시작해서 실행

 

docker run <이미지 이름> : docker create + docker start 기능을 합친 것

 


docker stop <컨테이너 ID/이름> : 도커 컨테이너를 우아하게 중지

                                             (SIGTERM을 보내어 진행 중인 프로세스를 정리하는 시간을 가짐)

docker kill <컨테이너 ID/이름> : 도커 컨테이너를 즉시 중지

 

docker rm <컨테이너 ID/이름> : 도커 컨테이너 삭제, 컨테이너가 중지된 상태였을 때 가능

 

docker container prune : 중지된 컨테이너 모두 삭제

 

docker system prune : 중지된 모든 컨테이너, 네트워크, 이미지 등이 삭제 되고, 삭제된 목록들과 확보된 공간사이즈 출력

 


docker images : 도커 이미지 리스트 나열

 

docker rmi <이미지 ID> : 도커 이미지 삭제

 


docker exec <컨테이너 ID> : 실행 중인 컨테이너에 명령어 전달

 

예시 :

docker run alpine ping google.com

- 위 명령어로 컨테이너 하나 실행

 

명령 프롬프트(CMD)한개 더 띄움

 

docker ps

- 위에 실행한 컨테이너 ID 확인

 

docker exec <컨테이너 ID> ls

- 확인된 컨테이너 ID를 넣어서, 위 명령어 수행

- alpine 컨테이너 파일 시스템의 최상위 디렉토리에 있는 디렉토리 및 파일 목록 출력하는 걸 볼 수 있음

 

 

 

windows 에서 설치되었다는 가정하에 설명드림

 

 

도커를 처음 설치하고,

명령 프롬프트(windows버튼+R → cmd 입력) 를 실행한 후,

아래 명령어를 수행한다.

 

docker run hello-world

 


 

그럼

Unable to find image 'hello-world:latest' locally

라는 메시지가 나온 후에 시간이 좀 지나서 아래의 메시지를 볼 수 있다.

 


latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/


 

 

docker를 처음 설치했기 때문에

아무런 이미지도 만들어진 것이 없을 것이고,

hello-world 를 local(본인 컴퓨터)에서 찾아봐도 당연히 없을 것이기 때문에

도커 서버에서 hello-world 이미지를 가져오고, 로컬에 보관하게 된다.

 

그럼 hello-world 이미지가 로컬에 있으니, 그 이미지를 이용해서 컨테이너를 생성하게 되는 식이다.

 

 


 

다시 명령프롬프트에

docker run hello-world 명령어를 수행하게 되면

이전에 보았던

Unable to find image 'hello-world:latest' locally 메시지는 볼 수 없다.

 

말 그대로, 로컬에서 hello-world 이미지가 있기 때문에

찾을 수 없다는 메시지가 없고,

보관된 hello-world 이미지를 이용해 컨테이너를 만든 후 프로그램을 실행하게 된다.

 

 

 

 

 

 

 

 

 

1.

www.docker.com  에서 [Get Started] 버튼을 클릭하거나

https://www.docker.com/get-started 에 바로 들어간다.

 

 

 

2.

Download for Windows 를 클릭

 

 

 

3.

다운받은 설치파일(Docker Desktop Installer.exe)을 더블클릭하여 실행

 

 

 

4.

체크된 그대로 두고, Ok 버튼을 클릭하여, 설치

docker를 설치 중인 모습
docker 설치완료. Close and restart 버튼을 클릭하여 윈도우 재시작 수행

 

 

 

5.

컴퓨터 재시작하면, 아래 창이 뜸

'I accept the terms' 체크하고

[Accept] 버튼 클릭

 

 

 

6.

아래처럼

WSL 2 installation is incomplete.

창이 뜨게 되면,

해당 창에 있는 링크(https://aka.ms/wsl2kernel) 을 클릭

이전 버전 WSL의 수동 설치 단계 | Microsoft Docs

 

 

 

위 사이트로 이동하게 되는데,

설명대로, 해당 패키지를 다운로드 하면 됨

x64(인텔) cpu인 경우, 'x64 머신용 최신 WSL2 Linux 커널 업데이트 패키지' 문장을 클릭해서 다운

ARM64 cpu인 경우, 위 설명대로 ARM64 패키지를 대신 다운로드

 

 

 

 

7. 

위에서 다운받은 wsl_update_x64.msi 파일을 더블클릭하여 설치

Next 버튼 클릭

 

 

8.

위에 WSL 업데이트 설치가 완료되면,

WSL 2 installation is incomplete 창에 Restart 버튼을 다시 클릭

 

 

 

9.

Docker 설치완료

바탕화면에 Docker Desktop 아이콘을 더블클릭하여 정상 실행 확인되면, 설치 끝

+ Recent posts