Dockerfile

김재현·2024년 2월 13일
0
post-thumbnail

Dockerfile 이란?

도커파일(Dockerfile)은 도커 이미지를 생성하기 위한 설정 파일이다.
애플리케이션을 실행하기 위한 환경 설정, 의존성 설치, 파일 복사 등의 작업을 정의한다.

일반적으로 도커파일은 다음과 같은 구조를 가진다.

  1. 베이스 이미지(Base Image)
    도커 이미지를 만들 때 기반이 되는 이미지를 지정한다.
    우분투, CentOS, 혹은 다른 도커 이미지 등을 베이스 이미지로 선택할 수 있다.

  2. 환경 설정(Command)
    도커 컨테이너가 실행될 때 수행되어야 할 명령을 정의한다.
    패키지 설치, 환경 변수 설정 등이 포함될 수 있다.

  3. 파일 복사(Copy)
    호스트 시스템의 파일을 도커 이미지 내부로 복사한다.
    일반적으로 애플리케이션의 소스 코드나 구성 파일 등을 복사합니다.

  4. 포트 설정(Expose)
    컨테이너가 리스닝할 포트를 지정한다.

  5. 명령 실행(CMD 또는 ENTRYPOINT)
    도커 컨테이너가 실행될 때 실행되는 명령을 지정한다.

  • CMD는 실행할 명령을 지정한다.
  • ENTRYPOINT는 컨테이너가 실행될 때 기본으로 실행될 프로그램을 지정한다.

docker 와 유사한 명령어 및 기능을 제공하는 podman 의 특성상 podman 에서도 dockerfile 을 사용 할 수 있다.

1. Dockerfile 생성

아래는 이전 포스트에 있는 내용을 토대로 Dockerfile 을 작성하는 예시이다.

[root@jh-container-rocky86 ~]# pwd
/root

[root@jh-container-rocky86 ~]# cat Dockerfile 
FROM rockylinux:8.6
LABEL maintainer "Made by jaehyeonkim 240213"
LABEL title "MariaDB in Rocky Linux 8.6"
LABEL version "Container Ver.1"
LABEL description "MariaDB Container Image"

#ENV MYSQL_ROOT_PASSWORD "1234"
#ENV MYSQL_ROOT_HOST "%"
EXPOSE 22
EXPOSE 3306
RUN dnf install -y iproute net-tools vim bash-completion net-tools chrony tmux openssh openssh-server openssh-clients passwd
RUN dnf install -y mariadb*
RUN dnf update -y
RUN echo '1234' | passwd --stdin root
RUN systemctl enable sshd
RUN systemctl enable mariadb

2. Dockerfile 빌드

작성된 Dockerfile 을 빌드한다.

[root@jh-container-rocky86 ~]# podman build -t jh-rk86-mariadb:latest /root/
STEP 1/13: FROM rockylinux:8.6
STEP 2/13: LABEL maintainer "Made by jaehyeonkim 240213"
--> c1e3264f36c
STEP 3/13: LABEL title "MariaDB in Rocky Linux 8.6"

...

Successfully tagged localhost/jh-rk86-mariadb:latest
b814ead867c7ba8834818b277654006fee50e8b48961c3741d59d3f099bb86a5

[root@jh-container-rocky86 ~]# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED             SIZE
localhost/jh-rk86-mariadb     latest      b814ead867c7  About a minute ago  1.39 GB
localhost/jh/rk86-mariadb     240208      6e709759b833  5 days ago          1.51 GB
localhost/jh/mariadb          240206      e2cfae12f3e3  6 days ago          411 MB
docker.io/library/mariadb     latest      2b54778e06a3  2 months ago        411 MB
docker.io/library/rockylinux  8.6         8cf70153e062  19 months ago       202 MB

3. 컨테이너 실행

Dockerfile 로 빌드된 이미지를 사용하여 컨테이너를 실행한다.

[root@jh-container-rocky86 ~]# podman run --privileged -itd -p 63306:3306 -p 60022:22 --name jh-rk86-mariadb-dockerfile jh-rk86-mariadb:latest /sbin/init
f488d74dae625edf1c859d52224a7add5355d60224d852b71b44a2bba32e6ae7
  1. 다른 서버에서 SSH 접속을 확인한다.
[root@jh-up-test-rhel84 ~]# ssh -p 60022 root@10.65.121.86
root@10.65.121.86's password: 

[root@f488d74dae62 ~]#
  1. Mariadb 접속을 위해 원격 접속 허용을 설정한다.

    Mariadb 접속에 필요한 원격 접속 허용은 Dockerfile 을 활용하여 자동화가 안되는 것으로 보인다.
    따라서, 원격 허용은 컨테이너 빌드 후 수동으로 설정하여 확인한다.

[root@f488d74dae62 ~]# mysql -uroot
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.3.39-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> grant all privileges on *.* to 'root'@'%' identified by '1234';
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> SELECT host, user, password FROM mysql.user;
+--------------+------+-------------------------------------------+
| host         | user | password                                  |
+--------------+------+-------------------------------------------+
| localhost    | root |                                           |
| f488d74dae62 | root |                                           |
| 127.0.0.1    | root |                                           |
| ::1          | root |                                           |
| %            | root | *A4B6157319038724E3560894F7F932C8886EBFCF |
+--------------+------+-------------------------------------------+
5 rows in set (0.001 sec)
  1. 다른 서버에서 Mariadb 접속을 확인한다.
[root@jh-up-test-rhel84 ~]# mysql -uroot -p -h 10.65.121.86 -P 63306
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.39-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 
profile
Linux/Cluster/Infra Engineer

0개의 댓글