Docker CP & DockerFile

yuns_u·2021년 10월 1일
0

머릿말

이전의 친절한 이미지들은 사용자가 사용할 모든 파일이 하나의 이미지에 구성되어 있었다.
하지만 사용자가 사용할 도구가 도커 이미지에 모두 구성되어 있지 않은 경우들도 있다.
따라서 모든 요소가 구성된 이미지가 아닌, 로컬에 내가 가지고 있는 파일들과 함께 도커 이미지를 이용해보는 방법을 알아보도록 한다.

예를 들면 이러한 상황이 될 수 있다.
웹 서버는 인터넷으로 사용자에게 정보를 제공하는 서버이다.
1. 웹 서버는 도커 컨테이너로 실행
2. 웹 서버를 구성하는 파일은 사용자가 만들거나 가져온 파일 구성

장점

  • 서버에 문제가 생기는 것을 호스트와 별개로 파악할 수 있다.
  • 문제가 생긴 서버를 끄고, 마치 공장 초기화를 하듯 도커 이미지로 서버를 재구동하기 용이하다.

그렇기에 로컬에 내가 가지고 있는 파일들과 함께 도커 이미지를 이용해보는 방식을 알아보기 좋다.

Docker 컨테이너에 파일을 복사하기

도커 컨테이너에 파일을 복사하는 것은 로컬에 있는 파일과 도커 이미지를 연결하는 것이다.

  1. CP(Copy)를 이용하는 방법
    CP(Copy): 호스트와 컨테이너 사이에 파일을 복사

  2. Docker Volume을 사용하는 방법
    Volume: 호스트와 컨테이너 사이에 공간을 마운트(Mount)
    마운트(Mount):
    - 저장 공간을 다른 장치에서 접근할 수 있도록 경로를 허용하여
    - 마치 하나의 저장 공간을 이용하는 것처럼 보이게 하는 작업이다.

데이터 볼륨에 대한 추가 정보는 링크를 참고해서 추가적으로 공부할 수 있다.

httpd 웹 서버

도커 이미지인 httpd(http daemon)는 Apache HTTP Server를 실행할 수 있는 오픈소스 웹 서버 소프트웨어이다.

httpd는 /usr/local/apache2/htdocs/ 경로에 웹 서버오 관련된 파일들이 저장되어 있다면 해당 파일을 기반으로 웹 서버가 실행된다.

  1. 파일들을 가져온다.

  2. docker container run으로 httpd 실행

$ docker container run --name my_web --rm -p 818:80 httpd

docker container run 문서를 통해 run에 대한 옵션을 다시 살펴보자.
-p : 로컬호스트이 포트와 컨테이너의 포트를 연결
818포트는 사용자의 로컬호스트의 포트, 80번은 컨테이너의 포트이다.

  1. 127.0.0.1:818 혹은 localhost:818로 웹 서버가 작동하고 있는지 확인할 수 있다.
    각자의 네트워크 환경의 DNS 설정으로 인해 localhost 127.0.0.1:818 중 하나로만 접속될 수도 있다.

  2. 새로운 터미널을 열어 docker container cp를 입력해 로컬호스트에 있는 파일을 컨테이너에 전달할 수 있다.

$ docker container cp ./ 컨테이너 이름:/usr/local/apache2/htdocs/

현재 폴더의 파일을 뒤 경로에 복사

  1. 127.0.0.1:818 혹은 localhost:818에 접속해서 게임 서버가 구동되는지 확인하기

Docker image 만들기

이렇게 만든 docker container를 image로 만들 수 있다.
이미지로 만들어놓으면 이전에 작업했던 내용을 다시 한 번 수행하지 않아도 되며 배포와 관리가 유용하다는 장점이 있다.

구동한 Docker Container를 이미지로 만드는 방법

  1. docker container commit 이용
$ docker container commit 컨테이너이름 my_pacman:1.0

구동한 docker container를 commit
이후 $ docker images를 하면 해당 컨테이너가 이미지 리스트로 출력되는 것을 확인할 수 있다.

  1. 생성된 이미지를 900포트에서 웹 서버로 구동
$ docker run --name my_web2 -p 900:80 my_pacman:1.0

900번 포트에서 웹 서버로 이미지를 구동하는 것이다.

  1. 127.0.0.1:900혹은 localhost:900을 통해 웹 서버가 작동하고 있는지 확인

docker image 빌드를 위한 파일인 Dockerfile로 이미지 만들기

  • Dockerfile을 만들고 Dockerfile대로 이미지를 build하는 방법.
    Dockerfile은 이미지 파일의 설명서와 같은 역할을 한다.
    dockerfile reference 공식문서

pacman 이미지를 생성하는 dockerfile을 통해 만들면 아래처럼 만들어볼 수 있다.

FROM httpd:2.4 #베이스 이미지를 httpd:2.4로 사용한다.
COPY ./usr/local/apache2/htdocs/ 
#호스트의 형재경로에 있는 파일을 생성할 이미지(/usr/local/apache2/htdocs/)에 복사한다.

docker build명령은 Dockerfile을 바탕으로한 도커 이미지 파일을 생성한다.

#--tag는 name:tag 형식으로 이미지를 생성할 수 있다.
#지정한 경로에 있는 Dockerfile을 찾아 빌드한다.
$ docker build --tag my_pacman:2.0

생성된 이미지를 이용해 901 포트에 웹서버를 구동한다.

$ docker run --name my_web3 -p 901:80 my_pacman:2.0

127.0.0.1:901혹은 localhost:901을 통해 웹 서버가 작동하고 있는지 확인해본다.

profile
💛 공부 블로그 💛

0개의 댓글