Docker ComposeでTCP/UDPサーバを立てる

PHPTCPサーバを実装した場合

 

PHP

コードは割愛

以下注意点

  • socket_bindに指定するIPアドレスを0.0.0.0にしないとコンテナ外と通信できない
  • docker compose up用にechoを書いておくと分かりやすい

 

Dockerfile

FROM php:latest

EXPOSE ポート番号

CMD ["php", "スクリプト名.php"]

 

docker-compose.yml

services:

    好きな名前:
        build:
            context: Dockerfileのパス
            dockerfile: Dockerfile
        ports:
            - '23:23' #ポートを指定した場合はここも設定しとく

 

 

 

 

 

 

シェルスクリプトの場合

もっと良い方法はあるかもしれない

基本的にLaravel Sailを参考に以下を書いた

シェルスクリプトとDockerfileを用意し、docker-compose.ymlに設定を追加する

 

コンテナ内部に送って起動時に実行されるシェルスクリプト

必要に応じて-pでポート番号を指定したり、-uでUDPにしたりする

UDPは接続が切れると再接続は出来ないような気がする

#!/bin/sh

while true; do echo "クライアントに返す文字列" | nc -l -k; done

 

Dockerfile

FROM alpine:latest

COPY スクリプト名 /usr/local/bin/スクリプト
RUN chmod +x /usr/local/bin/スクリプト

EXPOSE ポート番号

ENTRYPOINT ["スクリプト名"]

 

docker-compose.yml

services:

    好きな名前:
        build:
            context: Dockerfileのパス
            dockerfile: Dockerfile
        ports:
            - '23:23' #ポートを指定した場合はここも設定しとく

 

TCP/UDPサーバのコンテナにデータが送信できたか確認する

docker exec -it コンテナ名 sh

ps aux #ENTRYPOINTで指定したスクリプトのPIDを確認する

cat /proc/PIDの番号/fd/1