개발/Docker

따배도) Docker 명령어, dockerfile 만들기 및 repo배포

lusida0131 2022. 6. 18. 21:26
728x90

따라 하며 배우는 도커 유튜브 영상을 보고 학습한 내용을 블로그에 정리하려고 합니다.

 

1. 도커 기본 명령어

docker

docker를 설치하셔서 docker를 치면 docker에 관련된 명령어들이 나온다.

 

docker search nginx

[nginx]의 이미지가 있는지 도커에서 확인하는 명령어

 

docker images

docker에서 다운로드하였던 이미지들 목록이 나온다.

 

docker pull centos

[name]의 이미지를 다운받을 때 사용하는 명령어

 

docker run centos

위에 명령어를 실행하면 실행되지 않습니다. 

 

docker run -i -t centos

실행시키기 위해서는 태그를 붙여줘야합니다.

-i 옵션과 -t 옵션은 같이 쓰는 경우가 흔하다.

컨테이너를 종료하지 않은 채 터미널에서 입력을 계속해서 컨테이너로 전달하기 위해 이 두 옵션을 사용합니다.

-it 옵션은 컨테이너의 쉘(shell)이나 CLI 도구로 사용할 때 유용하게 사용된다.

 

docker run --name web -d -p 80:80 nginx

--name 옵션을 사용해서 컨테이너에 이름을 만들고 해당 이름으로 컨테이너를 식별할 수 있다.

-d 옵션을 사용하면 컨테이너가 detached 모드에서 실행된다. 컨테이너를 백그라운드에서 실행하고 싶을 때 쓰는 명령어이다.

-p 옵션은 호스트와 컨테이너 간의 포트(Port) 배포(publish)/바인드(bind)를 위해 사용된다.

호스트(host) 컴퓨터에서 컨테이너에서 리스닝하고 있는 포트로 접속할 수 있도록 설정해준다.

 

2. 도커 파일을 만들고 도커 허브에 배포까지

 

도커 파일이란 도커 이미지를 만들기 위한 설정 파일입니다. 여러 가지 명령어를 사용하여 도커 파일을 작성하면 설정된 내용대로 도커 이미지를 만들 수 있습니다.

 

2-1. 도커 파일의 기본 문법

#
comment를 남길때 사용한다.

FROM
컨테이너의 베이스이미지(운영환경), 기반이 되는 이미지 레이어입니다.

MAINTAINER
이미지를 생성한 사람의 이름 및 정보

LABEL
컨테이너 이미지에 컨테이너의 정보를 저장

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

COPY
컨테이너 빌드시 호스트의 파일을 컨테이너로 복사

ADD
컨테이너 빌드시 호스트의 파일을(tar, url포함) 컨테이너로 복사

WORKDIR
컨테이너 빌드시 명령이 실행될 작업 디렉토리 설정

ENV
환경변수 설정

USER
명령 및 컨테이너 실행시 적용할 유저 설정

VOLUME
파일 또는 디렉토리를 컨테이너의 디렉토리로 마운트
디렉터리의 내용을 컨테이너에 저장하지 않고 호스트에 저장하도록 설정합니다. 
데이터 볼륨을 호스트의 특정 디렉터리와 연결하려면 docker run 명령에서 -v 옵션을 사용해야 합니다. 
ex) -v /root/data:/data

EXPOSE
컨테이너 동작 시 외부에서 사용할 포트 지정

CMD
컨테이너 동작 시 자동으로 실행할 서비스나 스크립트 지정

ENTRYPOINT
CMD와 함께 사용하면서 command 지정 시 사용

 

2-2. 도커파일 만들고 배포까지

 

hellojs라는 폴더를 만들고 그 폴더 안에 들어가서 dockerfile을 만들려고 한다.

dockerfile을 만들고 위에 내용을 입력한다.

그리고 hello.js라는 파일을 만든다. 

 

hello.js라는 파일은 node.js파일이며 컨테이너의 os.hostname을 확인하는 파일입니다.

 

docker build -t hellojs .

dockerfile을 이미지로 만들기 위해 docker build 작업을 해야 된다.

마지막. 은 호스트의 작업 디렉터리 경로 → 컨테이너 이미지가 만들어진 것

 

빌드가 진행 중인 화면입니다.

다음으로 webserver라는 폴더를 만들고 그 폴더에 도커 파일을 만듭니다.

 

도커 파일은 우분트로 되어있으며 도커가 실행될 때 아파치를 설치하고

아파치를 설치하면 /var/www/html/index.html을 찾아서 클라이언트에게 서비스해주게 된다.

따라서 /var/www/html/index.html에 TEST WEB이라는 이름의 파일을 저장시켰다.

이 컨테이너가 서비스해주는 포트를 알려주는 EXPOSE에 80번으로 설정했다.

CMD에는 아파치를 설치하고 나면 그 컨테이너 안에는 /usr/sbin/apache2ctl이라는 바이너리가 생긴다.

아파치 웹서버를 동작시켜주는 데몬이 생긴다. 아파치를 실행할 때는 -DFOREGROUND라는 옵션을 써줘야 된다.

 

docker build 명령어로 webserver를 build 중인 화면이다.

 

webserver와 hellojs가 정상적으로 이미지로 만들어진 것을 확인하실 수 있습니다. 

 

webserver의 컨테이너를 실행하는 화면입니다. 정상적으로 실행되었습니다.

 

curl로 localhost:80을 하면 잘 동작하는 것을 확인하실 수 있습니다.

 

docker rm -f web web

실행 중인 컨테이너를 지울 때는 -f라는 옵션을 붙여줘야 한다.

 

docker run 명령어로 hellojs라는 컨테이너를 실행시켰습니다.

정상 작동되는 것을 확인하실 수 있습니다.

 

 

 

docker login

도커를 내 Repository에 올리기 위해서 로그인을 진행해야 합니다.

유저 이름과 패스워드를 입력합니다.

 

docker tag webserver:v1 lusida/webserver:v1

컨테이너를 내 Repository에 올리려면 내 이름의 태그가 붙어있어야 한다.

따라서 내 이름의 태그를 붙여주기 위해 이름을 변경하는 명령어이다.

 

도커 허브에 접속하셔서 로그인 후 도커 허브 홈페이지 상단에 Repositories을 클릭해 줍니다.

 

현재 내 Repository에는 비어 있는 것을 확인하실 수 있습니다.

 

docker push lusida/webserver:v1

내 컨테이너를 Repository에 올리기 위한 명령어입니다.

하지만 오류가 난 것을 확인하실 수 있는데 제 네임을 잘못 설정을 해서 denied 오류가 발생하는 것이었습니다.

이름을 잘 확인합시다.

 

정상적으로 push 명령어가 실행되었습니다.

 

제 Repository에서도 webserver라는 Repository가 올라간 것을 확인하실 수 있습니다.

728x90