도커파일(Dockerfile)은 도커 이미지를 생성하기 위한 설정 파일이다.
애플리케이션을 실행하기 위한 환경 설정, 의존성 설치, 파일 복사 등의 작업을 정의한다.
일반적으로 도커파일은 다음과 같은 구조를 가진다.
베이스 이미지(Base Image)
도커 이미지를 만들 때 기반이 되는 이미지를 지정한다.
우분투, CentOS, 혹은 다른 도커 이미지 등을 베이스 이미지로 선택할 수 있다.
환경 설정(Command)
도커 컨테이너가 실행될 때 수행되어야 할 명령을 정의한다.
패키지 설치, 환경 변수 설정 등이 포함될 수 있다.
파일 복사(Copy)
호스트 시스템의 파일을 도커 이미지 내부로 복사한다.
일반적으로 애플리케이션의 소스 코드나 구성 파일 등을 복사합니다.
포트 설정(Expose)
컨테이너가 리스닝할 포트를 지정한다.
명령 실행(CMD 또는 ENTRYPOINT)
도커 컨테이너가 실행될 때 실행되는 명령을 지정한다.
docker 와 유사한 명령어 및 기능을 제공하는 podman 의 특성상 podman 에서도 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
작성된 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
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
[root@jh-up-test-rhel84 ~]# ssh -p 60022 root@10.65.121.86
root@10.65.121.86's password:
[root@f488d74dae62 ~]#
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)
[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)]>