본문 바로가기
DevOps/Docker

Docker 시작

by oncerun 2021. 2. 20.
반응형

Docker을 설치하였다면, 다음과 같은 명령어를 실행해 보자.

 

docker run debian echo "Hello World"
Unable to find image 'debian:latest' locally
latest: Pulling from library/debian
0ecb575e629c: Pull complete
Digest: sha256:1092695e843ad975267131f27a2b523128c4e03d2d96574bbdd7cf949ed51475
Status: Downloaded newer image for debian:latest
Hello World

 

위 명령은 어떤 작업을 하는 걸까?

run 명령어는 컨테이너를 시작하는 역할을 수행한다. 인수인 debian은 사용하고자 하는 이미지의 이름이다.

 

첫 줄은 local환경에 debian:latest의 이미지가 없다는 걸 의미한다. 그 이후  도커는 온라인으로 도커 허브를 확인하여 최신 버전 데비안 이미지를 다운로드한다. 

Pull Complete을 보면 다운로드를 완료했고 이미지를 실행 상태의 컨테이너로 전환하고 echo명령어를 수행하게 된다.

 

* -it 옵션을 이용하면 해당 컨테이너 내부에서 shell을 수행하도록 도커를 사용할 수 있다.

 docker run -it debian /bin/bash

 

이 명령을 수행하면 마치 원격 머신에 ssh로 연결되는 것처럼 컨테이너 내부에 새로운 명령 프롬프트가 나타나게된다.

-it플래그는 컨테이너와 tty모드와 대화형 세션을 사용하겠다는 것을 의미한다. /bin/bash명령은 bash쉘을 반환한다.

쉘을 빠져나오면 컨테이너는 종료된다.

 -- 컨테이너는 main process가 실행되는 동안에만 동작한다.

 

데비안 이미지를 실행하고 다른 터미널에서 docker ps명령어를 입력하면

현재 실행 중인 컨테이너들의 상세 정보들을 반환한다. 

도커는 호스트를 구분할 수 있도록 컨테이너에 이름을 부여한다. 위 두 개의 컨테이너에는 각 각 festive_sammet,  infallibel_sammet이라는 이름이 주어졌다. (docker run --name 명령을 이용해 직접 이름을 지정해 줄 수 있다.)

 

- docker inspect 컨테이너 이름

해당 명령어는 컨테이너 자세한 내용을 알려준다.

docs.docker.com/engine/reference/commandline/inspect/

 

docker inspect

docker inspect: Docker inspect provides detailed information on constructs controlled by Docker. By default, `docker inspect` will render results in a JSON array.

docs.docker.com

 

-docker diff

 

해당 명령어는 컨테이너가 시작된 이후에 변경된 파일의 목록들이 결과로 반환된다.

docs.docker.com/engine/reference/commandline/diff/

 

docker diff

docker diff: List the changed files and directories in a container᾿s filesystem since the container was created. Three different types of change are tracked: | Symbol | Description | |--------|---------------------------------|...

docs.docker.com

 

도커는 컨테이너에 UFS을 사용한다. UFS는 여러 개의 파일 시스템이 계층 구조로 마운트 되어 하나의 파일 시스템처럼 보일 수 있도록 해준다.

 

 

-docker log

 

해당 명령을 컨테이너 이름과 함께 실행하면 컨테이너 내부에서 발생된 모든 작업 내용을 볼 수 있다.

docs.docker.com/engine/reference/commandline/logs/

 

docker logs

docker logs: The `docker logs` command batch-retrieves logs present at the time of execution. > **Note** > > This command is only functional for containers that are started with the...

docs.docker.com

이제 쉘에서 exit명령을 통해 빠져나온다. 유일한 프로세스가 쉘이기 때문에 쉘이 종료되면 컨테이너가 중지된다.

 

docker ps -a는 종료된 컨테이너를 포함한 모든 컨테이너의 목록을 확인할 수 있다.

종료된 컨테이너는 docker start 명령을 실행시키면 재시작할 수 있다.

docker rm 명령을 이용하면 컨테이너를 삭제할 수 있다.

 

중지된 모든 컨테이너를 삭제하려면 docker ps -aq -f status=exited 명령의 결과를 사용하자. 

해당 명령은 중지된 모든 컨테이너의 ID들을 반환한다.

 

컨테이너 이름을 cowsay로 주고 호스트 이름도 cowsay로 컨테이너를 실행시키겠습니다.

이번에는 debian이미지에 cowsay를 설치한 이미지를 만들어 봅니다.

 

docker run -it --name cowsay --hostname cowsay debian bash

apt-get update

apt-get install -y cowsay fortune

 

컨테이너를 이미지로 변경하려면 docker commit명령을 사용하면 된다. 실행상태이건 중지 상태이건 상관없이 동작한다.

명령을 실행할 때 컨테이너의 이름, 이미지 이름, 이미지를 저장할 저장소를 명시해주어야 한다.

docs.docker.com/engine/reference/commandline/commit/

 

docker commit

docker commit: It can be useful to commit a container's file changes or settings into a new image. This allows you to debug a container by running an interactive shell,...

docs.docker.com

이제 내 로컬 환경에  test/cowsayimage라는 이름으로 cowsay가 다운로드된 debian을 만들었다.

 

 

사실 공식문서를 보니 안정된 관리를 위해서는 DokerFile을 통해 관리하고 나와있다. 왜냐하면 변경이 필요한 사항이 생기면, 변경이 필요한 부분까지 앞서 실행했던 절차들을 수동으로 다시 반복해야 한다.

 

도커 파일로 이미지를 만들자

확장자가 붙으면 안 되기 때문에 우선 파일을 만들 것입니다.

New-Item -Type File.\Dockerfile

전파일을 만들고 인텔리제이를 연결 프로그램으로 열었습니다.

 

wheezy태그가 표시된 debian버전을 사용하고  이미지 내부에서 수행될 쉘 명령을 RUN 설정에 적어줍니다.

도커 파일이 있는 디렉터리에서 docker build명령을 수행하면 이미지가 만들어집니다.

docs.docker.com/engine/reference/commandline/build/

 

docker build

docker build: The `docker build` command builds Docker images from a Dockerfile and a "context". A build's context is the set of files located in the specified `PATH` or `URL`....

docs.docker.com

 

반응형

'DevOps > Docker' 카테고리의 다른 글

window 10 wsl2 도커 완벽 설치가이드  (0) 2022.12.25
Docker 공식 이미지 가져오기  (0) 2021.02.20
Dockerfile부터 push까지  (0) 2021.02.20
Docker(2)  (0) 2021.02.10
Docker(1)  (0) 2021.02.10

댓글