🐳 docker build과 Dockerfile을 이용한 커스텀 이미지 생성
커스텀 도커 이미지를 만들 때 유의할 점은, 빌드하는 것처럼 성공 실패가 존재한다는 것입니다. 도커 이미지를 만드는 것도 쉽지 않습니다. 또, 빌드에 성공했다고 하더라도 리팩토링을 통해 더 최적화될 여지도 항상 있습니다.
dockerfile의 효율적인 작성에 대해서는 darrengwon.tistory.com/804여기에서 주의할 점 3을 참고해보시면 알 수 있습니다.
dockerfile 만들기
Dockerfile은 도커 이미지를 만들기 위한 파일입니다.
우선 작업하고자 하는 디렉토리에 Dockerfile이란 이름의 파일을 하나 만들고 처리할 명령어들을 입력합니다.
base image를 명시한 후 (FROM)
컨테이너 실행 전 수행할 쉘 명령어를 입력한 후 (RUN)
컨테이너 시작시 실행된 명령어도 입력하면 됩니다. (CMD) docker exec로 보시면 됩니다.
이것 외에도 COPY, ADD, ENV 등 다양한 것이 존재합니다.
우리가 시스템을 배포할 때 거치는 내용들을 되짚어보면서 작성하시면 뚝딱입니다.
# 베이스 이미지 명시
FROM alpine
# 컨테이너 실행 전 수행할 쉘 명령어
# RUN apt-get update
# 컨테이너가 시작되었을 때 실행한 쉘 명령어
# DockerFile 내 1회만 사용할 수 있음
CMD ["echo", "hello"]
docker build하기
docs.docker.com/engine/reference/commandline/build/
docker build [OPTIONS] PATH | URL | -
이제 dockerfile이 존재하는 경로로 이동해서 build해주면 됩니다.
docker build ./
위와 같이 간단한 방법으로 build할 수도 있지만 보통 다음과 같이 좀 더 자세하게 적는 편입니다.
docker build -t {이미지명}:{태그} {빌드 컨텍스트}
이렇게 커스텀 이미지를 만들 때의 이름을 주는 데에는 일종의 규칙이 있습니다. 강제되는 규칙은 아니고 작업을 편리하게 하기위한 것입니다. 태그에는 뭘 넣어도 좋지만 편의성을 위해 버전을 명시하는 것이 좋습니다.
docker build -t {이름공간}/{이미지이름}:{태그} {빌드 컨텍스트(DockerFile이 있는 경로)}
docker build -t cinpes/ubuntu:git .
빌드가 성공적으로 이루어진 후 docker images를 확인해봄녀 우리가 만드록자 하는 이미지가 있는 것을 확인할 수 있습니다.
🚨 Window 환경에서 Dockerfile을 실행했더니 경고가 뜬다?
You are building a Docker image from Windows against a non Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
이 문제는 Dockerfile에 CMD가 있기 때문입니다. 빌드 자체는 되었으므로 무시합시다.
That warning was added, because the Windows filesystem does not have an option to mark a file as 'executable'. Building a linux image from a Windows machine would therefore break the image if a file has to be marked executable. For that reason, files are marked executable by default when building from a windows client; the warning is there so that you are notified of that, and (if needed), modify the Dockerfile to change/remove the executable bit afterwards. |
🐳 명령창 내에서 커스텀 이미지 생성하기
이 방법보다는 Dockerfile을 이용한 방법이 더 많이 사용되고 있습니다. 그래도 알아는 두자는 의미에서 남깁니다.
docker 측에서 제공하는 기본 이미지는 base Image로, 순수하게 그것 외의 다른 환경은 아무 것도 설치되어 있지 않습니다.
docker run -it --name git ubuntu bash
base image 우분투 이미지를 기반으로한 컨테이너에 git을 추가로 설치해보자
apt-get update
apt-get install -y git
git --version (설치 확인)
우분투에 git을 설치한 후 docker commit을 해보겠습니다.
🚨 git commit, git pull, push을 하여 github에 코드를 푸쉬/풀 하듯 docker 이미지 또한 docker hub에서 docker commit, docker push, docker pull을 합니다. 코드와 마찬가지로 docker 이미지도 다른 사람의 것을 가져다 쓸 수 있습니다.
자세한 내용은 docker hub를 살펴봅시다.
여튼, commit을 합니다.
docker commit git ubuntu:git
그리고 docker images를 통해 확인해보니 따로 설치하진 않았어도 TAG에 git이 붙은 ubuntu 이미지가 하나 생겼습니다.
그리고 이 이미지를 기반으로 docker를 run할 수도 있습니다. 이런 방법으로 도커를 이용해서 작업, 개발 환경을 만드는 것입니다. 참 편리하죠~
docker run -it --name git2 ubuntu:git bash
$ git --version // 이미지에 git이 이미 설치되어 있으므로 git이 작동함!
'Ops, Infra, etc > 🐋 Docker (+Swarm)' 카테고리의 다른 글
docker 기반 nginx~react 개발 및 배포 (0) | 2021.03.26 |
---|---|
docker compose와 간단한 compose 문법 (2) | 2021.03.24 |
node.js 기반 앱을 docker 환경에서 실행해보자 (0) | 2021.03.23 |
docker 기본 명령어 (ps, stop, start, rm, logs, exec, images, network) (1) | 2020.09.03 |
docker에 대한 기본적인 지식과 운영툴 (0) | 2020.07.16 |