Red Hatã§ã½ãªã¥ã¼ã·ã§ã³ã¢ã¼ããã¯ãããã¦ããç°ä¸å¸æ©(@tnk4on)ã§ãã
Red Hat Enterprise Linux(以ä¸ãRHEL) 8åãPodmanã®æ°ããããã±ã¼ã¸(v3.2.3)ãå ¬éãããã«ã¼ãã¬ã¹ã¢ã¼ãã§docker-composeã使ç¨ã§ããããã«ãªãã¾ããã以åã®è¨äºã§ã¯rootã¢ã¼ãã§docker-composeãåããæ¹æ³ãç´¹ä»ãã¾ããã
ä»åã¯Podman v3.2以éã§å¯¾å¿ããã«ã¼ãã¬ã¹ã¢ã¼ãã§docker-composeãå®è¡ããæ¹æ³ã«ã¤ãã¦ç´¹ä»ãã¾ãã
- Podman v3.2.3ã®ã¢ãããã¼ã
- ã«ã¼ãã¬ã¹ã§podman.socketãµã¼ãã¹ãèµ·åãã
- docker-composeã³ãã³ããã³ã³ããã§å®è¡ãã
- ã«ã¼ãã¬ã¹ã§docker-composeãå®è¡ãã¦ã¿ã
- ã«ã¼ãã¬ã¹ã¢ã¼ãã¨podman network
- ã«ã¼ãã¬ã¹ã¢ã¼ãã«ãããææ権ã®åé¡
- ã¾ã¨ã
Podman v3.2.3ã®ã¢ãããã¼ã
2021å¹´8æ10æ¥ã«RHEL 8 åãã®container-toolsã®ã¢ãããã¼ããå ¬éããã¦ãã¾ãã
Podman v3.2.3ã®ããã±ã¼ã¸æ å ±ã¯ãã¡ãã
ã¢ãããã¼ãå¾ã®Podmanã®ãã¼ã¸ã§ã³ã¯ä¸è¨ã®ããã«ãªã£ã¦ãã¾ãã
$ podman version Version: 3.2.3 API Version: 3.2.3 Go Version: go1.15.7 Built: Tue Jul 27 16:29:39 2021 OS/Arch: linux/amd64
Podman v3.2.3ã¸ã¢ãããã¼ãããã«ã¯dnfã³ãã³ãã§container-toolsã¾ãã¯podmanåä½ã®ã¢ãããã¼ããå®æ½ãã¦ä¸ããã
$ sudo dnf update podman
ã¾ãã¯
$ sudo dnf module update container-tools
ã«ã¼ãã¬ã¹ã§podman.socket
ãµã¼ãã¹ãèµ·åãã
ã«ã¼ãã¬ã¹ã§docker-composeãå®è¡ããå ´åãrootã¢ã¼ãã¨åããPodman APIã½ã±ãã(podman.socket
ãµã¼ãã¹)ã®èµ·åãå¿
è¦ã§ããèµ·åããã«ã¯ä¸è¬ã¦ã¼ã¶ã¼ã§ä¸è¨ã³ãã³ããå®è¡ãã¾ãã
ããã±ã¼ã¸ã®ã¢ãããã¼ãå¾ã念ã®çºsystemd ããã¼ã¸ã£ã¼è¨å®ãåèªã¿è¾¼ã¿
$ systemctl --user daemon-reload
podman.socket
ãµã¼ãã¹ãæå¹ã«ããããã«ãµã¼ãã¹ãèµ·å
$ systemctl --user enable --now podman.socket Created symlink /home/user/.config/systemd/user/sockets.target.wants/podman.socket â /usr/lib/systemd/user/podman.socket.
ãµã¼ãã¹ãèµ·åãã¦ããã確èª
$ systemctl --user status podman.socket â podman.socket - Podman API Socket Loaded: loaded (/usr/lib/systemd/user/podman.socket; enabled; vendor preset: enabled) Active: active (listening) since Mon 2021-08-16 01:16:36 JST; 26s ago Docs: man:podman-system-service(1) Listen: /run/user/1000/podman/podman.sock (Stream) CGroup: /user.slice/user-1000.slice/[email protected]/podman.socket 8æ 16 01:16:36 localhost.localdomain systemd[12425]: Listening on Podman API Socket.
Podman APIã®åä½ç¢ºèª
$ curl -s --unix-socket /run/user/1000/podman/podman.sock http://d/v3.0.0/libpod/info | jq .version
åºåçµæãéã
{ "APIVersion": "3.2.3", "Version": "3.2.3", "GoVersion": "go1.15.7", "GitCommit": "", "BuiltTime": "Tue Jul 27 16:29:39 2021", "Built": 1627370979, "OsArch": "linux/amd64" }
- ã«ã¼ãã¬ã¹ã¢ã¼ãã®Podman APIã½ã±ããã®ãã¹ã¯
systemctl --user status podman.socket
ã®åºåå 容ãåç § - Podman APIã½ã±ããã®è©³ç´°ã«ã¤ãã¦ã¯ä»¥åã®è¨äºãåèã«ãã¦ãã ãã
次ã¯docker-composeã³ãã³ãã®æºåãè¡ãã¾ãã
ï¼åèï¼RHEL 8製åããã¥ã¡ã³ãã®è©²å½é ç®ã«ã¤ãã¦
RHEL 8ã®è£½åããã¥ã¡ã³ãã«ã該å½é ç®ãããã¾ããå 容ãå¤ãã®ã§ãã¾ãåèã«ãªãã¾ãããç¾æç¹ã§ã¯åèç¨åº¦ã«ãåç §ä¸ããã
-
- RHEL 8.4 + Podman v3ã§ã¯
podman.socket
ãpodman.service
ã®æåä½æã¯ä¸è¦ - æ¤è¨¼æé ã®
podman-remote
ã®å°å ¥ä¸è¦
- RHEL 8.4 + Podman v3ã§ã¯
docker-composeã³ãã³ããã³ã³ããã§å®è¡ãã
以åã®è¨äºã§ã¯docker-composeã®ã¤ã³ã¹ãã¼ã«ã«pipã使ç¨ãã¾ããããPython/pipã®ç°å¢ã«ä½è¨ãªãã®ãå ¥ããããªãå ´åãããã¨æãã¾ããã¾ããDockerå ¬å¼ããã¥ã¡ã³ãã§ã¯GitHubãªãã¸ããªããdocker-composeãã¤ããªãå ¥æãã¦ä½¿ç¨ããæ¹æ³ãç´¹ä»ããã¦ãã¾ãã*1
ãããã®æ¹æ³ã«ä»£ãããdocker-composeèªä½ãã³ã³ããã§å®è¡ãããã¨ã§ä¸è¦ãªãã®ã追å ããã«docker-composeã³ãã³ããå®è¡ãããã¨ãå¯è½ã¨ãªãã¾ããã³ã³ããã¤ã¡ã¼ã¸ã¯Dockerå ¬å¼ãå ¬éãã¦ãããã®ãããã®ã§ãã¡ããå©ç¨ãã¾ãã
ã³ã³ããã§docker-composeãå®è¡ããæã®æ§æã¯ä¸è¨ã®ããã«ãªãã¾ãã
ä¸è¨ã®å
容ã~/.bashrc
ã«è¿½è¨ãããã¨ã§ãã³ã³ããå®è¡ã®ã³ãã³ããdocker-compose
ã®ã¨ã¤ãªã¢ã¹ã¨ãã¦ä½¿ç¨ã§ãã¾ãã
alias docker-compose='podman run --rm \ -v /run/user/1000/podman/podman.sock:/var/run/docker.sock:z \ -v "$PWD:/$PWD:z" \ -w "/$PWD" \ docker/compose:1.29.2'
- ãªãã·ã§ã³ã®è£è¶³
-v /run/user/1000/podman/podman.sock:/var/run/docker.sock:z
ï¼ã«ã¼ãã¬ã¹ã¢ã¼ãã®APIã½ã±ãããã³ã³ããå ã®docker.sock
ã«ãã¦ã³ããã-v "$PWD:/$PWD:z"
ï¼ã«ã¬ã³ããã£ã¬ã¯ããªãã³ã³ããå ã®WORKDIRã«ãã¦ã³ããã-w "/$PWD"
ï¼ã³ã³ããå ã®WORKDIRãæå®docker/compose:1.29.2
:å®è¡ããdocker-composeã®ã¤ã¡ã¼ã¸ã¿ã°ãæå®ãææ°ã¯1.29.2ã
ç·¨éå¾ããã¡ã¤ã«ã®åèªã¿è¾¼ã¿
$ source ~/.bashrc
ååå®è¡æã®ã¿ã³ã³ããã¤ã¡ã¼ã¸ãå ã«åå¾ãã¦ããï¼2åç®ä»¥éã®å®è¡ã¯ä¸è¦ï¼
$ podman pull docker.io/docker/compose:1.29.2
docker-composeã®åä½ç¢ºèª
1) ä½æ¥ãã£ã¬ã¯ããªãä½æããSELinuxã³ã³ããã¹ããå¤æ´ãã
$ mkdir test && cd test $ chcon -R -t container_file_t . $ ls -lZ ../ åè¨ 0 drwxrwxr-x. 2 user user unconfined_u:object_r:container_file_t:s0 6 8æ 16 21:02 test
- docker-composeã®ã¨ã¤ãªã¢ã¹å®è¡æã«ã«ã¬ã³ããã£ã¬ã¯ããªããã¦ã³ãããããã
container_file_t
ã®ã©ãã«ãè¨å®ããã¦ãããã¨ãå¿ è¦ã§ã
2) docker-compose version
ãå®è¡ããæ£å¸¸ã«ã³ãã³ããå®è¡ã§ãããã¨ã確èª
$ docker-compose version docker-compose version 1.29.2, build 5becea4 docker-py version: 5.0.0 CPython version: 3.7.10 OpenSSL version: OpenSSL 1.1.1k 25 Mar 2021
ããã§ã«ã¼ãã¬ã¹ã§docker-composeãå®è¡ããç°å¢ãæ´ãã¾ããã
ã«ã¼ãã¬ã¹ã§docker-composeãå®è¡ãã¦ã¿ã
以åã®è¨äºã¨åããdocker-composeã§WordPressãå®è¡ãã¾ãã docker-compose.ymlãåæ§ã«Docker Hubã«è¨è¼ã®ãµã³ãã«ã使ç¨ãã¾ãã
ä½æ¥ãã£ã¬ã¯ããªãä½æããdocker-compose.ymlãã¡ã¤ã«ãä½æ
$ mkdir wordpress && cd wordpress $ chcon -R -t container_file_t . $ vi docker-compose.yml
docker-compose.ymlã®å
容
version: '3.1' services: wordpress: image: wordpress restart: always ports: - 8080:80 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: exampleuser WORDPRESS_DB_PASSWORD: examplepass WORDPRESS_DB_NAME: exampledb volumes: - wordpress:/var/www/html db: image: mysql:5.7 restart: always environment: MYSQL_DATABASE: exampledb MYSQL_USER: exampleuser MYSQL_PASSWORD: examplepass MYSQL_RANDOM_ROOT_PASSWORD: '1' volumes: - db:/var/lib/mysql volumes: wordpress: db:
docker-compose up
ã®å®è¡ï¼â»SELinuxã®ã¨ã©ã¼ãåºãå ´åã¯æ¬¡é
ã®å¯¾å¿ãå®æ½ï¼
$ docker-compose up -d Creating network "wordpress_default" with the default driver Creating volume "wordpress_wordpress" with default driver Creating volume "wordpress_db" with default driver Pulling wordpress (wordpress:)... Pulling db (mysql:5.7)... Creating wordpress_wordpress_1 ... Creating wordpress_db_1 ... Creating wordpress_db_1 ... done Creating wordpress_wordpress_1 ... done
- ã¨ã¤ãªã¢ã¹ã³ãã³ãã«Podman APIã½ã±ããï¼åã³docker.sockï¼ãç´æ¥æå®ãã¦ããã®ã§äºåã«DOCKER_HOSTç°å¢å¤æ°ã®è¨å®ã¯ä¸è¦ã§ã
èµ·åããã³ã³ããã®ç¢ºèª
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6098cc19a0d7 docker.io/library/mysql:5.7 mysqld 8 seconds ago Up 7 seconds ago wordpress_db_1 6f6d0aa34eb0 docker.io/library/wordpress:latest apache2-foregroun... 8 seconds ago Up 7 seconds ago 0.0.0.0:8080->80/tcp wordpress_wordpress_1
ãã©ã¦ã¶ã§http://<ãã¹ãã®IPã¢ãã¬ã¹>:8080
ã¸ã¢ã¯ã»ã¹ãã¦WordPressã®ã¤ã³ã¹ãã¼ã«ç»é¢ã表示ããããOKã§ãã
SELinuxã¨ã©ã¼ã®å¯¾å¿
docker-compose up
æã«ä¸è¨ã®ãããªã¨ã©ã¼ãåºãå ´åã¯SELinuxã®ããªã·ã¼ã«å¼ã£ããã£ã¦ãã¾ã
$ docker-compose up -d [8] Failed to execute script docker-compose Traceback (most recent call last): File "urllib3/connectionpool.py", line 677, in urlopen File "urllib3/connectionpool.py", line 392, in _make_request File "http/client.py", line 1277, in request File "http/client.py", line 1323, in _send_request File "http/client.py", line 1272, in endheaders File "http/client.py", line 1032, in _send_output File "http/client.py", line 972, in send File "docker/transport/unixconn.py", line 43, in connect PermissionError: [Errno 13] Permission denied ï¼ä»¥ä¸çç¥ï¼
audit2allow
ã³ãã³ãã使ã£ã¦ã¢ã¸ã¥ã¼ã«ã®ä½æã¨ã¤ã³ã¹ãã¼ã«ãè¡ãã¾ã
$ sudo ausearch -c 'docker-compose' --raw | audit2allow -M my-dockercompose $ sudo semodule -i my-dockercompose.pp
my-dockercompose.te ã®å
容
$ cat my-dockercompose.te module my-dockercompose 1.0; require { type container_t; type container_runtime_t; class unix_stream_socket connectto; } #============= container_t ============== allow container_t container_runtime_t:unix_stream_socket connectto;
å度docker-compose up
ãå®è¡ãã¦ã¨ã©ã¼ãåºãªããã¨ã確èªãã¾ãã
ã«ã¼ãã¬ã¹ã¢ã¼ãã¨podman network
ã«ã¼ãã¬ã¹ã¢ã¼ãã§docker-composeã使ããããã«ãªã£ãèæ¯ã«ã¯ãã«ã¼ãã¬ã¹ã¢ã¼ãã§ã®ãããã¯ã¼ã¯æ§ææ©è½ã®è¿½å ãããã¾ãï¼ä¸è¨ã®RFEãåç §ï¼ã
ã«ã¼ãã¬ã¹ã¢ã¼ãã§docker-composeå®è¡æã®ãããã¯ã¼ã¯æ§æã®å¤åã確èªãã¦ã¿ã¾ãã
docker-composeèµ·åå
$ podman network ls NETWORK ID NAME VERSION PLUGINS
docker-composeèµ·åå¾
$ podman network ls NETWORK ID NAME VERSION PLUGINS b089aa3ab1f2 wordpress_default 0.4.0 bridge,portmap,firewall,tuning
$ podman network inspect wordpress_default
åºåçµæãéã
[ { "args": { "podman_labels": { "com.docker.compose.network": "default", "com.docker.compose.project": "wordpress", "com.docker.compose.version": "1.29.2" } }, "cniVersion": "0.4.0", "name": "wordpress_default", "plugins": [ { "bridge": "cni-podman1", "hairpinMode": true, "ipMasq": true, "ipam": { "ranges": [ [ { "gateway": "10.89.0.1", "subnet": "10.89.0.0/24" } ] ], "routes": [ { "dst": "0.0.0.0/0" } ], "type": "host-local" }, "isGateway": true, "type": "bridge" }, { "capabilities": { "portMappings": true }, "type": "portmap" }, { "backend": "", "type": "firewall" }, { "type": "tuning" } ] } ]
ãã®ããã«docker-compose up
ã¨åæã«æ°ãããããã¯ã¼ã¯æ§æãä½æããããã¨ã確èªã§ãã¾ãããªããdocker-compose down
ãå®è¡ããã¨ãã®ãããã¯ã¼ã¯æ§æã¯åé¤ããã¾ãã
ã«ã¼ãã¬ã¹ã¢ã¼ãã«ãããææ権ã®åé¡
ã«ã¼ãã¬ã¹ã¢ã¼ãã§ã³ã³ããå®è¡æã®èª²é¡ã¨ãã¦ãã³ã³ããå ã«ãã¹ãã®ãã£ã¬ã¯ããªããã¦ã³ããã¦ä½¿ç¨ããå ´åã®ææ権ã®åé¡ãããã¾ãã ãªããPodmanã®ã«ã¼ãã¬ã¹ã¢ã¼ãã«ãããUIDã®åãæ±ãã«ã¤ãã¦ã¯ãã®è¨äºã§ã¯è©³ç´°ã«ã¯è§¦ãã¾ããããéå»ã®ç¿»è¨³è¨äºãåèã«ãªãã¾ãã
ä¾ãã°WordPressã使ç¨ããå ´åãwordpressããã³mysqlã³ã³ããã«ãã¦ã³ããããã£ã¬ã¯ããªããã¹ãä¸ã«ä½æããå度docker-compose up
ãã¦ã¿ãã¨ä½æãããã©ã«ãã®ãã¼ããã·ã§ã³ãã¦ã¼ã¶ã¼èªèº«ã®ãã®ããå¤æ´ããã¦ãããã¨ã確èªã§ãã¾ãã
åç¾æé
å
ç¨ã®wordpressãã©ã«ãã®ä¸ã«wordpress
ã¨db
ã®2ã¤ã®ãã©ã«ããä½æãã
$ mkdir wordpress db $ chmod 777 wordpress db $ vi docker-compose.yml
docker-compose.ymlã®å
容
version: '3.1' services: wordpress: image: wordpress restart: always ports: - 8080:80 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: exampleuser WORDPRESS_DB_PASSWORD: examplepass WORDPRESS_DB_NAME: exampledb volumes: - ./wordpress:/var/www/html db: image: mysql:5.7 restart: always environment: MYSQL_DATABASE: exampledb MYSQL_USER: exampleuser MYSQL_PASSWORD: examplepass MYSQL_RANDOM_ROOT_PASSWORD: '1' volumes: - ./db:/var/lib/mysql #volumes: # wordpress: # db:
docker-compose up
å¾ã®ã«ã¬ã³ããã£ã¬ã¯ããªã®ææ権ã確èª
$ ls -l åè¨ 12 drwxrwxrwx. 6 100998 user 4096 8æ 17 01:15 db -rw-rw-r--. 1 user user 585 8æ 17 01:12 docker-compose.yml drwxr-xr-x. 5 100032 100032 4096 8æ 17 01:15 wordpress
ãã®å ´åãUIDã®100998
ã¨100032
ã¯ã³ã³ããå
ã§å®è¡ãã¦ããããã»ã¹ã®ãã¹ãä¸ã®UIDã§ããä¸è¨ã§ã¯www-data
ã¨mysql
ã該å½ãã¾ãã
$ podman top wordpress_wordpress_1 user huser USER HUSER root 1000 www-data 100032 www-data 100032 www-data 100032 www-data 100032 www-data 100032 $ podman top wordpress_db_1 user huser USER HUSER mysql 100998
ãã¹ãä¸ã§ã¯ä¸è¬ã¦ã¼ã¶ã¼ã¨ãã¦user
ãUID:1000
ã§å®è¡ããã¦ãã¾ãã®ã§ç°ãªãææ権ã®ãã¡ã¤ã«/ãã©ã«ãã¯ç´æ¥æä½ãä¸å¯ã¨ãªãã¾ãã
$ rm -rf db wordpress rm: 'db/mysql' ãåé¤ã§ãã¾ãã: 許å¯ãããã¾ãã rm: 'db/performance_schema' ãåé¤ã§ãã¾ãã: 許å¯ãããã¾ãã rm: 'db/sys' ãåé¤ã§ãã¾ãã: 許å¯ãããã¾ãã rm: 'db/exampledb' ãåé¤ã§ãã¾ãã: 許å¯ãããã¾ãã rm: 'wordpress/.htaccess' ãåé¤ã§ãã¾ãã: 許å¯ãããã¾ãã ï¼ä»¥ä¸ãçç¥ï¼
ãã¹ãå´ã¨ãã¡ã¤ã«ã®ããåããè¡ãã«ãã¦ãé½åº¦sudo
ã³ãã³ãã使ç¨ããã°ã§ããªããç¡ãã§ãããææ権ãæèããªããã®æä½ã¨ãªãã®ã§ããªãæéã§ãã
対å¦ã¨ãã¦ã¯Podmanã«ã¯podman unshare
ã¨ãã便å©ãªã³ãã³ããç¨æããã¦ãã¾ãã
$ podman unshare # ls -l åè¨ 12 drwxrwxrwx. 6 systemd-coredump root 4096 8æ 17 01:15 db -rw-rw-r--. 1 root root 585 8æ 17 01:12 docker-compose.yml drwxr-xr-x. 5 33 tape4096 8æ 17 01:15 wordpress
podman unshare
ã³ãã³ãã使ç¨ããå®è¡ããä¸è¬ã¦ã¼ã¶ã¼ã®User Namespaceã«å ¥ã£ãç¶æ ã«ãªã- å
ç¨ã®UID
100998
ã¨100032
ããææè ã®è¡¨ç¤ºãå¤æ´ããã¦ãããã¨ã確èªã§ãã
ãã®ããã«podman unshare
ã使ããã¨ã§sudo
ã使ããã«User Namespaceå
ã§ç´æ¥ãã¡ã¤ã«ããã£ã¬ã¯ããªã®æä½ãè¡ããã¨ãã§ããããã«ãªãã¾ãã
podman unshare
ã«ã¤ãã¦ã¯ä¸è¨ã®ããã°ãåèã«ãã¦ãã ããã
- Running rootless Podman as a non-root user | Enable Sysadmin
- Dealing with user namespaces and SELinux on rootless containers | Enable Sysadmin
ã¾ã¨ã
Podman v3.2以éã§å¯¾å¿ããã«ã¼ãã¬ã¹ã§docker-composeãå®è¡ããæ¹æ³ãç´¹ä»ãã¾ããã
RHEL 8åãã®Podmanããã±ã¼ã¸ãv3.2.3ã¸ã¨æ´æ°ãããã®ã§RHEL 8ã§ãããã«ä½¿ããã¨ãå¯è½ã§ãã
docker-composeã®å®è¡ã«ã¤ãã¦ã¯ã³ã³ããã¨ãã¦å®è¡ããæ¹æ³ãç´¹ä»ãã¾ãããããã«ããå®è¡å
ãã¹ãã«è¿½å ã§ã¤ã³ã¹ãã¼ã«ä½æ¥ãä¸ç¨ã«ãªãã¾ãã
ã¾ããã«ã¼ãã¬ã¹ã¢ã¼ãã®èª²é¡ã¨ãã¦ãã£ã¬ã¯ããªãã¦ã³ãæã«ææ権ã®åé¡ãç´¹ä»ãã¾ãããpodman unshare
ã使ããã¨ã§ä¸è¬ã¦ã¼ã¶ã¼ã®ã¾ã¾ãã¹ãå´ã¨ã³ã³ããéã§ã®ãã¡ã¤ã«æä½ãªã©ã容æã«ãªãã¾ãã
ãªããdocker-composeã使ç¨ããã«podman run
ã§ç´æ¥ã³ã³ãããèµ·åããå ´åã¯--userns keep-id
ã¨ãã便å©ãªãªãã·ã§ã³ã使ãã¾ããããããªããããã¯Podmanåºæã®ãªãã·ã§ã³ã®ããDockerã®ããã®ã¢ããªã§ããdocker-composeã§ã¯å®è£
ããã¦ããã使ç¨ã§ãã¾ãããè¤æ°ã®ã³ã³ãããå®è¡ãã¤ã¤ãã¹ãå´ã®ãã£ã¬ã¯ããªããã¦ã³ãããå ´åã¯Podman pods
ã®å©ç¨ãæ¨å¥¨ãã¾ãã
docker-compose ãã Podman pods
ã¸ç§»è¡ããæ¹æ³ã«ã¤ãã¦ã¯ã¾ãå¥ã®æ©ä¼ã«ç´¹ä»ãããã¨æãã¾ãã
*1:pipã§ã®ã¤ã³ã¹ãã¼ã«ã¯ä»£æ¿ãæ段ã¨ãã¦æ¸ããã¦ããã®ã§ãæ¬æ¥ã¯ãã¡ããã¡ã¤ã³ã®ã¤ã³ã¹ãã¼ã«æ¹æ³ã®æ¨¡æ§