h2o.dockerfile 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. ARG UBUNTU_VERSION=22.04
  2. ARG H2O_APP_PREFIX=/opt/h2o_app
  3. FROM "ubuntu:${UBUNTU_VERSION}" AS compile
  4. ARG DEBIAN_FRONTEND=noninteractive
  5. RUN apt-get -yqq update && \
  6. apt-get -yqq install \
  7. autoconf \
  8. bison \
  9. cmake \
  10. curl \
  11. flex \
  12. g++ \
  13. libbrotli-dev \
  14. libcap-dev \
  15. libicu-dev \
  16. libnuma-dev \
  17. libreadline-dev \
  18. libssl-dev \
  19. libtool \
  20. libuv1-dev \
  21. libwslay-dev \
  22. libyajl-dev \
  23. libz-dev \
  24. make \
  25. ninja-build \
  26. patch \
  27. pkg-config \
  28. systemtap-sdt-dev
  29. ARG H2O_VERSION=13ba727ad12dfb2338165d2bcfb2136457e33c8a
  30. WORKDIR /tmp/h2o-build
  31. RUN curl -LSs "https://github.com/h2o/h2o/archive/${H2O_VERSION}.tar.gz" | \
  32. tar --strip-components=1 -xz && \
  33. cmake \
  34. -B build \
  35. -DCMAKE_AR=/usr/bin/gcc-ar \
  36. -DCMAKE_C_FLAGS="-flto -march=native -mtune=native" \
  37. -DCMAKE_RANLIB=/usr/bin/gcc-ranlib \
  38. -G Ninja \
  39. -S . && \
  40. cmake --build build -j && \
  41. cmake --install build && \
  42. cp -a deps/picotls/include/picotls* deps/quicly/include/quicly* /usr/local/include
  43. ARG MUSTACHE_C_REVISION=c1948c599edfe48c6099ed70ab1d5911d8c3ddc8
  44. WORKDIR /tmp/mustache-c-build
  45. RUN curl -LSs "https://github.com/x86-64/mustache-c/archive/${MUSTACHE_C_REVISION}.tar.gz" | \
  46. tar --strip-components=1 -xz && \
  47. CFLAGS="-flto -march=native -mtune=native -O3" ./autogen.sh && \
  48. make -j "$(nproc)" install
  49. ARG POSTGRESQL_VERSION=7b7fa85130330128b404eddebd4f33c6739454b0
  50. WORKDIR /tmp/postgresql-build
  51. RUN curl -LSs "https://github.com/postgres/postgres/archive/${POSTGRESQL_VERSION}.tar.gz" | \
  52. tar --strip-components=1 -xz && \
  53. curl -LSs "https://www.postgresql.org/message-id/attachment/146614/v2-0001-Add-PQsendSyncMessage-to-libpq.patch" | \
  54. patch -Np1 && \
  55. CFLAGS="-flto -march=native -mtune=native -O3" ./configure \
  56. --includedir=/usr/local/include/postgresql \
  57. --prefix=/usr/local \
  58. --with-ssl=openssl && \
  59. make -j "$(nproc)" -C src/include install && \
  60. make -j "$(nproc)" -C src/interfaces/libpq install
  61. ARG H2O_APP_PREFIX
  62. WORKDIR /tmp/build
  63. COPY CMakeLists.txt ../
  64. COPY src ../src/
  65. COPY template ../template/
  66. RUN cmake \
  67. -DCMAKE_BUILD_TYPE=Release \
  68. -DCMAKE_C_FLAGS="-march=native -mtune=native" \
  69. -DCMAKE_INSTALL_PREFIX="${H2O_APP_PREFIX}" \
  70. -G Ninja \
  71. -S .. && \
  72. cmake --build . -j && \
  73. cmake --install .
  74. FROM "ubuntu:${UBUNTU_VERSION}"
  75. ARG DEBIAN_FRONTEND=noninteractive
  76. RUN apt-get -yqq update && \
  77. apt-get -yqq install \
  78. libnuma1 \
  79. libyajl2
  80. ARG H2O_APP_PREFIX
  81. COPY --from=compile "${H2O_APP_PREFIX}" "${H2O_APP_PREFIX}/"
  82. COPY --from=compile /usr/local/lib/libmustache_c.so "${H2O_APP_PREFIX}/lib/"
  83. COPY --from=compile /usr/local/lib/libpq.so.5.16 "${H2O_APP_PREFIX}/lib/libpq.so.5"
  84. ENV LD_LIBRARY_PATH="${H2O_APP_PREFIX}/lib"
  85. EXPOSE 8080
  86. ARG BENCHMARK_ENV
  87. ARG TFB_TEST_DATABASE
  88. ARG TFB_TEST_NAME
  89. CMD ["taskset", \
  90. "-c", \
  91. "0", \
  92. "/opt/h2o_app/bin/h2o_app", \
  93. "-a20", \
  94. "-d", \
  95. "dbname=hello_world host=tfb-database password=benchmarkdbpass sslmode=disable user=benchmarkdbuser", \
  96. "-e11000", \
  97. "-f", \
  98. "/opt/h2o_app/share/h2o_app/template", \
  99. "-m1"]