yuns

[Docker] Docker 환경 공유 본문

카테고리 없음

[Docker] Docker 환경 공유

yuuuun 2024. 4. 11. 00:45
반응형

Dockerfile

  • 컨테이너 이미지의 설계서
  • "무엇을 기반으로 만들고 있는가?", "누가 만들었는가" 등 컨테이너 이미지에 대한 정보를 기술하고 docker build 명령어로 컨테이너 이미지를 설계서에 기술된 대로 조립
  • Dockerfile은 단순 텍스트 파일
  • "Foreground에서 프로세스를 가동하는 것이 정의되어 있음" -> Dockerfile 안에 기술되어 있음
    • centos: /bin/bash
    • nginx: nginx -g 'daemon off'

Centos

https://hub.docker.com/_/centos에서 확인 가능

 

Docker

 

hub.docker.com

  • 안에 Dockerfile를 찾아봤더니, github에서 확인할 수 있었다.
FROM scratch
ADD centos-7-x86_64-docker.tar.xz /

LABEL \
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20201113" \
    org.opencontainers.image.title="CentOS Base Image" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-11-13 00:00:00+00:00"

CMD ["/bin/bash"]
  • FROM 구: 컨테이너 이미지를 생성하는 기반 선언
    • scratch: 컨테이너 이미지를 처음부터 생성하는 방법
    • 필수 항목!
  • ADD
    • 압축 파일이 풀리면서 배치
      • cf) COPY는 단순 복제되는 차이
  • CMD
    • 컨테이너 가동 시 default 프로세스 지정

Nginx

https://hub.docker.com/_/nginx

 

nginx - Official Image | Docker Hub

Quick reference Supported tags and respective Dockerfile links 1.25.4, mainline, 1, 1.25, latest, 1.25.4-bookworm, mainline-bookworm, 1-bookworm, 1.25-bookworm, bookworm 1.25.4-perl, mainline-perl, 1-perl, 1.25-perl, perl, 1.25.4-bookworm-perl, mainline-bo

hub.docker.com

맨 위의 버전을 누르니까 깃허브가 연결된다.

https://github.com/nginxinc/docker-nginx/blob/1f227619c1f1baa0bed8bed844ea614437ff14fb/mainline/debian/Dockerfile

 

docker-nginx/mainline/debian/Dockerfile at 1f227619c1f1baa0bed8bed844ea614437ff14fb · nginxinc/docker-nginx

Official NGINX Dockerfiles. Contribute to nginxinc/docker-nginx development by creating an account on GitHub.

github.com


Dockerfile 생성

자체 제작 컨테이너 이미지 생성하기

1. Dockerfile 생성

echo "Hello, Docker!" > hello-docker.txt
vi Dockerfile

Dockerfile에 적을 내용은 아래와 같다.

  • centos:centos7 대신 centos:latest를 하게 되면 아래와 같은 에러가 발생하게 되는데 centos8에 대해서 종료가 되어서 그렇단다..

FROM docker.io/centos:centos7
ADD hello-docker.txt /tmp
RUN yum install -y epel-release
CMD ["/bin/bash"]

이미지 생성

docker build -t yun/centos:1.0 .
  • Account 이름: yun으로 세팅

docker images
REPOSITORY            TAG       IMAGE ID       CREATED        SIZE
yun/centos            1.0       7ae90fcab934   6 days ago     385MB

yun/centos를 실행해보자

docker run -td --name yun-docker yun/centos:1.0
  • yun-docker: 컨테이너 이름
  • yun/centos:1.0: 실행하고자 하는 도커 이미지

위의 컨테이너를 실행하면, 해시값이 나오고, docker ps의 명령어를 치게 되면 아래와 같이 컨테이너가 실행됨을 확인할 수 있다.

CONTAINER ID   IMAGE            COMMAND       CREATED              STATUS              PORTS     NAMES
83b6c85ab53b   yun/centos:1.0   "/bin/bash"   About a minute ago   Up About a minute             yun-docker

아래 명령어를 통해 내가 만든 컨테이너 내의 bash로 들어갈 수 있고, 

docker exec -it yun-docker /bin/bash

아래와 같이 명령어를 쳐보면, hello-docker.txt파일에 위에서 설정해둔 Hello docker가 프린트 되는 것을 확인할 수 있다.

요기 안에서 container 내부를 변경해보겠다. 

yum install -y nginx

이상한게 설치된다.

exit 명령어로 빠져나온다.

컨테이너 상태를 이미지로 저장하기

docker commit yun-docker yun/centos:1.1

1.0버전에서 수정을 했기 때문에 1.1버전으로 새로운 컨테이너를 만들 생각이다.

docker images yun/centos:1.1
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
yun/centos   1.1       c5a6f9b0d532   27 seconds ago   563MB
  • 1.0버전은 385MB인데, nginx를 설치하면서 용량이 커진 것을 확인할 수 있다.

Docker Hub에 이미지 등록 - 요거는 계정이 있어야 가능한 명령어인 것으로 보인다.

docker push yun/centos:1.1

 

 

참조

IT 운용 체제 변환을 위한 데브옵스

반응형
Comments