본문 바로가기

리눅스-podman/실습

podman 실습 - mariadb 생성 및 설정

podman으로 mariadb 이미지 설정

1) 마리아db 이미지 run

[admin@localhost ~]$ podman run -d --name db01 docker.io/mariadb/server
# db01이란 이름을 가지는 컨테이너 생성
[admin@localhost ~]$ podman ps -a # 생성된 컨테이너 확인
CONTAINER ID  IMAGE                                             COMMAND         CREATED         STATUS                     PORTS       NAMES
3344a34f9a12  registry.access.redhat.com/ubi8/python-38:latest  sleep infinity  6 minutes ago   Up 6 minutes                           python36
10d2386ab43d  docker.io/mariadb/server:latest                   mysqld          45 seconds ago  Exited (1) 45 seconds ago              db01

 

2) 실행되지 않는 db01의 로그 확인

[admin@localhost ~]$ podman logs db01  # db01의 로그를 확인
error: database is uninitialized and password option is not specified
  You need to specify one of MARIADB_ROOT_PASSWORD, MARIADB_ALLOW_EMPTY_PASSWORD and MARIADB_RANDOM_ROOT_PASSWORD
# 강조된 값이 없어 실행이 안되는 것을 확인

 

3) db01 제거 후 오류 수정해서 재생성

[admin@localhost ~]$ podman run -d --name db01 -e MARIADB_USER=wp_admin -e MARIADB_PASSWORD=dkagh1. -e MARIADB_DATABASE=wp_db -e MARIADB_ROOT_PASSWORD=dkagh1. docker.io/mariadb/server
# -e 옵션을 사용하여 환경 변수 값을 주고 생성
b5052c5aef61e9c63cc4337b0cd2fdf87bbb5b43eda92ac7ce5a8fe2757e785f
[admin@localhost ~]$ podman ps # 실행 중인 db01을 확인
CONTAINER ID  IMAGE                                             COMMAND         CREATED        STATUS        PORTS       NAMES
3344a34f9a12  registry.access.redhat.com/ubi8/python-38:latest  sleep infinity  8 minutes ago  Up 8 minutes              python36
b5052c5aef61  docker.io/mariadb/server:latest                   mysqld          6 seconds ago  Up 6 seconds              db01

 

4) db_data 디렉토리 생성

[admin@localhost ~]$ podman exec -it db01 head -30 /etc/passwd
mysql:x:999:999::/home/mysql:/bin/sh # mysql의 password 정보를 확인
[admin@localhost ~]$ mkdir db_data # db_data # 이름을 가지는 디렉토리 생성
[admin@localhost ~]$ podman unshare chown 999:999 ~/db_data
# 디렉토리 소유자 권한을 999:999로 바꾼다
[admin@localhost ~]$ ll
total 4
-rw-r--r--. 1 admin  admin     0 Apr 25 12:49 angry
drwxr-xr-x. 2 admin  admin     6 Jun  8 17:41 apps
drwxr-xr-x. 5 100998 100998 4096 Jun  8 17:54 db_data

 

5) 볼륨을 지정해서 db01 재생성

[admin@localhost ~]$ podman run -d --name db01 -e MARIADB_USER=wp_admin -e MARIADB_PASSWORD=dkagh1. -e MARIADB_DATABASE=wp_db     -e MARIADB_ROOT_PASSWORD=dkagh1. -v /home/admin/db_data:/var/lib/mysql:Z docker.io/mariadb/server
# -e로 환경변수를 추가하고 -v로 db_data로 마운트한다. :Z로 자동으로 context를 바꿔준다.
94d78c4710d44cf054907bf43a196642ae6a66c406ad22b9e22752a50949039b


[admin@localhost ~]$ podman ps
CONTAINER ID  IMAGE                            COMMAND     CREATED        STATUS        PORTS       NAMES
94d78c4710d4  docker.io/mariadb/server:latest  mysqld      3 seconds ago  Up 3 seconds              db01

 

6) 포트 지정해서 db01 재생성

[admin@localhost ~]$ podman run -d --name db01 -e MARIADB_USER=wp_admin -e MARIADB_PASSWORD=dkagh1. -e MARIADB_DATABASE=wp_db -e MARIADB_ROOT_PASSWORD=dkagh1. -v /home/admin/db_data:/var/lib/mysql:Z -p 13306:3306 docker.io/mariadb/server
# -e옵션과 -v, :Z로 환경변수를 지정하고 -p옵션으로 포트를 지정해 준다. 외부에서 13306포트를 통해 들어오면 컨테이너의 3306포트로 이동한다.
74e81fc314c7e6e2f0c7d1b7087e14b08d53b2a27d6c880707d0168aeac87992


[admin@localhost ~]$ podman ps
CONTAINER ID  IMAGE                            COMMAND     CREATED        STATUS        PORTS                    NAMES
74e81fc314c7  docker.io/mariadb/server:latest  mysqld      4 seconds ago  Up 5 seconds  0.0.0.0:13306->3306/tcp  db01


[admin@localhost ~]$ podman port db01 # db01의 포트를 확인한다.
3306/tcp -> 0.0.0.0:13306

 

7) 설정한 포트번호 방화벽 설정

[admin@localhost ~]$ sudo firewall-cmd --add-port=13306/tcp --permanent
[admin@localhost ~]$ sudo firewall-cmd --reload
[admin@localhost ~]$ sudo firewall-cmd --list-all
--------------------------------------------------------------
ports: 13306/tcp # 13306포트를 영구적으로 추가한다.

 

8) 컨테이너 네트워크 생성

[admin@localhost ~]$ podman network create --gateway 10.87.0.1 --subnet 10.87.0.0/16 db_net
# 컨테이너의 네트워크의 게이트웨이와 서브넷을 지정하여 생성한다.
db_net
[admin@localhost ~]$ podman network inspect db_net # 네트워크 정보를 확인한다.
--------------------------------------------------------------
"subnets": [
              {
                    "subnet": "10.87.0.0/16",
                    "gateway": "10.87.0.1"
              }
],
--------------------------------------------------------------

 

9) 생성한 네트워크를 지정해서 컨테이너 생성

[admin@localhost ~]$ podman run -d --name db01 -e MARIADB_USER=wp_admin -e MARIADB_PASSWORD=dkagh1. -e MARIADB_DATABASE=wp_db     -e MARIADB_ROOT_PASSWORD=dkagh1. -v /home/admin/db_data:/var/lib/mysql:Z -p 13306:3306 --network db_net     docker.io/mariadb/server
03d541ce6605e5d9c4589331e8dcf81b6d753f97747a7b443f7bd16ca922f4e6

 

10) mariadb를 사용해 client01 생성

[admin@localhost ~]$ podman run -d --name client01 --network db_net docker.io/bitnami/mariadb sleep infinity
#네트워크 db_net을 가지는 client01 컨테이너를 생성
a7f31ad68a88ca6cc7e7bef3714fe8bc0e182882c0aa6c525b251ddbe1998790


[admin@localhost ~]$ podman ps # 실행중인 client01을 확인
CONTAINER ID  IMAGE                             COMMAND         CREATED         STATUS         PORTS                    NAMES
03d541ce6605  docker.io/mariadb/server:latest   mysqld          44 seconds ago  Up 44 seconds  0.0.0.0:13306->3306/tcp  db01
a7f31ad68a88  docker.io/bitnami/mariadb:latest  sleep infinity  2 seconds ago   Up 2 seconds                            client01

 

11) 컨테이너 내부와 ping으로 통신

[admin@localhost ~]$ podman exec -it db01 apt update 
# 설치 리스트 업데이트
[admin@localhost ~]$ podman exec -it db01 apt upgrade 

# 상위 버전 설치
# ping 패키지를 받기위해 업그레이드를 실행
[admin@localhost ~]$ podman exec -it db01 apt install -y iputils-ping


[admin@localhost ~]$ podman exec -it db01 ping -c3 client01
PING client01.dns.podman (10.87.0.7) 56(84) bytes of data.
64 bytes from 10.87.0.7 (10.87.0.7): icmp_seq=1 ttl=64 time=0.071 ms
64 bytes from 10.87.0.7 (10.87.0.7): icmp_seq=2 ttl=64 time=0.085 ms
64 bytes from 10.87.0.7 (10.87.0.7): icmp_seq=3 ttl=64 time=0.090 ms
# 컨테이너 내부와 통신이 가능
--- client01.dns.podman ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2060ms
rtt min/avg/max/mdev = 0.071/0.082/0.090/0.008 ms

 

12) 컨테이너 네트워크 생성 후 컨테이너 연결

[admin@localhost ~]$ podman network create backend
# backend 이름을 가지는 네트워크 생성
[admin@localhost ~]$ podman network connect backend db01
[admin@localhost ~]$ podman network connect backend client01
# backend 네트워크를 통해 db01과 client01 연결

 

13) 연결된 네트워크 IP 확인하기

[admin@localhost ~]$ podman network inspect backend
--------------------------------------------------------------
"subnets": [
              {
                    "subnet": "10.89.0.0/24", # 자동 생성된 89번 대역
                    "gateway": "10.89.0.1"
              }
          ],

--------------------------------------------------------------
[admin@localhost ~]$ podman inspect db01
--------------------------------------------------------------
"Networks": {
                    "backend": {
                        "EndpointID": "",
                        "Gateway": "10.89.0.1",
                        "IPAddress": "10.89.0.5",
                        "IPPrefixLen": 24,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "de:69:9f:ea:73:46",
                        "NetworkID": "backend",
                        "DriverOpts": null,
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": [
                              "03d541ce6605"
                        ]
                    },

--------------------------------------------------------------
[admin@localhost ~]$ podman inspect client01
--------------------------------------------------------------
"Networks": {
                    "backend": {
                        "EndpointID": "",
                        "Gateway": "10.89.0.1",
                        "IPAddress": "10.89.0.6",
                        "IPPrefixLen": 24,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "ea:01:c7:d0:53:99",
                        "NetworkID": "backend",
                        "DriverOpts": null,
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": [
                              "a7f31ad68a88"
                        ]
                    },
--------------------------------------------------------------

 

14) 연결된 네트워크 내부 통신 확인

[admin@localhost ~]$ podman exec -it db01 ping -c3 10.89.0.6
PING 10.89.0.6 (10.89.0.6) 56(84) bytes of data.
64 bytes from 10.89.0.6: icmp_seq=1 ttl=64 time=0.099 ms
64 bytes from 10.89.0.6: icmp_seq=2 ttl=64 time=0.088 ms
64 bytes from 10.89.0.6: icmp_seq=3 ttl=64 time=0.119 ms

--- 10.89.0.6 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2024ms
rtt min/avg/max/mdev = 0.088/0.102/0.119/0.012 ms
# 자동으로 주어진 대역으로도 통신 가능

 

'리눅스-podman > 실습' 카테고리의 다른 글

podman 실습 - 컨테이너 유닛 생성  (0) 2023.09.01
podman 실습 - 레지스트리 등록과 이미지 사용  (0) 2023.09.01
podman  (1) 2023.09.01