Bagikan melalui


Membuat kontainer Service Fabric yang menjalankan server Apache Tomcat di Linux

Apache Tomcat adalah implementasi sumber terbuka yang populer dari teknologi Java Servlet dan Java Server. Artikel ini menunjukkan kepada Anda cara membuat kontainer dengan Apache Tomcat dan aplikasi Web sederhana, menyebarkan kontainer ke kluster Service Fabric yang menjalankan Linux, dan menyambungkan ke aplikasi Web.

Untuk mempelajari selengkapnya tentang Apache Tomcat, lihat beranda Apache Tomcat.

Prasyarat

Membuat gambar Tomcat dan menjalankannya secara lokal

Ikuti langkah-langkah di bagian ini untuk membangun gambar Docker berdasarkan gambar Apache Tomcat dan aplikasi Web sederhana lalu jalankan dalam kontainer di sistem lokal Anda.

  1. Kloning repositori sampel memulai dengan Service Fabric untuk Java di komputer pengembangan Anda.

    git clone https://github.com/Azure-Samples/service-fabric-java-getting-started.git
    
  2. Ubah direktori ke direktori sampel server Apache Tomcat (service-fabric-java-getting-started/container-apache-tomcat-web-server-sample):

    cd service-fabric-java-getting-started/container-apache-tomcat-web-server-sample
    
  3. Buat file Docker berdasarkan gambar Tomcat resmi yang terletak di Docker Hub dan sampel server Tomcat. Di direktori service-fabric-java-getting-started/container-apache-tomcat-web-server-sample , buat file bernama Dockerfile (tanpa ekstensi file). Tambahkan yang berikut ini ke Dockerfile dan simpan perubahan Anda:

    FROM library/tomcat
    
    EXPOSE 8080
    
    COPY ./ApacheTomcat /usr/local/tomcat
    

    Lihat referensi Dockerfile untuk informasi selengkapnya.

  4. Masuk ke Docker dan jalankan docker build perintah untuk membuat gambar yang menjalankan aplikasi web Anda:

    docker login
    docker build . -t tomcattest
    

    Perintah ini membangun gambar baru menggunakan instruksi di Dockerfile, penamaan (-t penandaan) gambar tomcattest. Untuk membangun gambar kontainer, gambar dasar pertama kali diunduh dari Docker Hub dan aplikasi ditambahkan ke dalamnya.

    Setelah perintah build selesai, jalankan docker images perintah untuk melihat informasi tentang gambar baru:

    $ docker images
    
    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    tomcattest                    latest              86838648aab6        2 minutes ago       194 MB
    
  5. Verifikasi bahwa aplikasi kontainer Anda berjalan secara lokal sebelum mendorongnya ke registri kontainer:

    docker run -itd --name tomcat-site -p 8080:8080 tomcattest.
    
    • --name menamai kontainer, sehingga Anda dapat merujuknya menggunakan nama yang mudah diingat daripada ID-nya.
    • -p menentukan pemetaan port antara kontainer dan OS host.

    Nota

    Port yang Anda buka dengan -p parameter harus menjadi port tempat aplikasi Tomcat Anda mendengarkan permintaan. Dalam contoh saat ini, ada Konektor yang dikonfigurasi dalam file ApacheTomcat/conf/server.xml untuk mendengarkan port 8080 untuk permintaan HTTP. Port ini dipetakan ke port 8080 pada host.

    Untuk mempelajari tentang parameter lain, lihat dokumentasi jalankan Docker.

  6. Untuk menguji kontainer Anda, buka browser dan masukkan salah satu URL berikut. Anda akan melihat varian layar selamat datang "Halo Dunia!" untuk setiap URL.

    • http://localhost:8080/hello
    • http://localhost:8080/hello/sayhello
    • http://localhost:8080/hello/sayhi

    Halo dunia /sayhi

  7. Hentikan kontainer dan hapus dari komputer pengembangan Anda:

    docker stop tomcat-site
    docker rm tomcat-site
    

Dorong gambar Tomcat ke registri kontainer Anda

Sekarang setelah Anda memverifikasi bahwa gambar Tomcat berjalan dalam kontainer di komputer pengembangan Anda, dorong ke repositori dalam registri kontainer untuk mengurangi gangguan pada alur kerja pengembangan dan penyebaran gambar Anda. Artikel ini menggunakan Azure Container Registry untuk menyimpan gambar, tetapi, dengan beberapa modifikasi langkah-langkah, Anda dapat menggunakan registri kontainer apa pun yang Anda pilih. Dalam artikel ini nama registri diasumsikan sebagai myregistry dan nama registri lengkapnya myregistry.azurecr.io. Ubah ini dengan tepat untuk skenario Anda.

  1. Jalankan docker login untuk masuk ke registri kontainer Anda dengan kredensial registri Anda.

    Contoh berikut mengirimkan ID dan kata sandi dari perwakilan layanan Microsoft Entra. Misalnya, Anda mungkin telah menetapkan prinsipal layanan ke registri Anda untuk skenario otomatisasi. Atau, Anda dapat masuk menggunakan nama pengguna dan kata sandi registri Anda.

    docker login myregistry.azurecr.io -u xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -p myPassword
    
  2. Perintah berikut membuat tag, atau alias, dari citra, dengan jalur lengkap ke dalam registri Anda. Contoh ini menempatkan gambar di samples namespace untuk menghindari kekacauan di root dari registri.

    docker tag tomcattest myregistry.azurecr.io/samples/tomcattest
    
  3. Dorong gambar ke registri kontainer Anda:

    docker push myregistry.azurecr.io/samples/tomcattest
    

Membangun dan menyebarkan aplikasi kontainer Service Fabric

Sekarang setelah Anda mendorong gambar Tomcat ke registri kontainer, Anda dapat membangun dan menyebarkan aplikasi kontainer Service Fabric yang menarik gambar Tomcat dari registri Anda dan menjalankannya sebagai layanan kontainer di kluster Anda.

  1. Buat direktori baru di luar kloning lokal Anda (di luar pohon direktori service-fabric-java-getting-started ). Beralih ke jendela perintah dan gunakan Yeoman untuk membuat kerangka untuk aplikasi kontainer:

    yo azuresfcontainer 
    

    Masukkan nilai berikut saat diminta:

    • Beri nama aplikasi Anda: ServiceFabricTomcat
    • Nama layanan aplikasi: TomcatService
    • Masukkan Nama Gambar: Berikan URL untuk gambar kontainer di registri kontainer Anda; misalnya, myregistry.azurecr.io/samples/tomcattest.
    • Perintah: Biarkan kosong ini. Karena gambar ini memiliki titik masuk beban kerja yang ditentukan, Anda tidak perlu secara eksplisit menentukan perintah input (perintah berjalan di dalam kontainer, yang akan menjaga kontainer tetap berjalan setelah startup).
    • Jumlah instans aplikasi kontainer tamu: 1

    Generator Service Fabric Yeoman untuk kontainer

  2. Dalam manifes layanan (ServiceFabricTomcat/ServiceFabricTomcat/TomcatServicePkg/ServiceManifest.xml), tambahkan XML berikut di bawah tag ServiceManfest root untuk membuka port tempat aplikasi Anda mendengarkan permintaan. Tag Titik akhir mendeklarasikan protokol dan port untuk titik akhir. Untuk artikel ini, layanan kontainer mendengarkan port 8080:

<Resources>
 <Endpoints>
   <!-- This endpoint is used by the communication listener to obtain the port on which to 
    listen. Please note that if your service is partitioned, this port is shared with 
    replicas of different partitions that are placed in your code. -->
   <Endpoint Name="endpointTest" Port="8080" Protocol="tcp"/>
 </Endpoints>
</Resources>
  1. Dalam manifes aplikasi (ServiceFabricTomcat/ServiceFabricTomcat/ApplicationManifest.xml), di bawah tag ServiceManifestImport , tambahkan XML berikut. Ganti AccountName dan Password di tag RepositoryCredentials dengan nama registri kontainer Anda dan kata sandi yang diperlukan untuk masuk ke dalamnya.
<Policies>
 <ContainerHostPolicies CodePackageRef="Code">
   <PortBinding ContainerPort="8080" EndpointRef="endpointTest"/>
   <RepositoryCredentials AccountName="myregistry" Password="=P==/==/=8=/=+u4lyOB=+=nWzEeRfF=" PasswordEncrypted="false"/>
 </ContainerHostPolicies>
</Policies>

Tag ContainerHostPolicies menentukan kebijakan untuk mengaktifkan host kontainer.

  • Tag PortBinding mengonfigurasi kebijakan pemetaan port kontainer ke port host. Atribut ContainerPort diatur ke 8080 karena kontainer mengekspos port 8080, seperti yang ditentukan dalam Dockerfile. Atribut EndpointRef diatur ke "endpointTest", titik akhir yang ditentukan dalam manifes layanan di langkah sebelumnya. Dengan demikian, permintaan masuk ke layanan pada port 8080 dipetakan ke port 8080 pada kontainer.
  • Tag RepositoryCredentials menentukan kredensial yang perlu diautentikasi kontainer dengan repositori (privat) tempatnya menarik gambar. Anda tidak memerlukan kebijakan ini jika gambar akan ditarik dari repositori publik.
  1. Di folder ServiceFabricTomcat , sambungkan ke kluster service fabric Anda.
  • Untuk menyambungkan ke kluster Service Fabric lokal, jalankan:

    sfctl cluster select --endpoint http://localhost:19080
    
  • Untuk menyambungkan ke kluster Azure yang aman, pastikan sertifikat klien ada sebagai file .pem di direktori ServiceFabricTomcat , dan jalankan:

    sfctl cluster select --endpoint https://PublicIPorFQDN:19080 -pem your-certificate.pem -no-verify
    

    Di perintah sebelumnya, ganti your-certificate.pem dengan nama file sertifikat klien Anda. Dalam lingkungan pengembangan dan pengujian, sertifikat kluster sering digunakan sebagai sertifikat klien. Jika sertifikat Anda tidak ditandatangani sendiri, hilangkan -no-verify parameter .

    Sertifikat kluster biasanya diunduh secara lokal sebagai file .pfx. Jika Anda belum memiliki sertifikat dalam format PEM, Anda dapat menjalankan perintah berikut untuk membuat file .pem dari file .pfx:

    openssl pkcs12 -in your-certificate.pfx -out your-certificate.pem -nodes -passin pass:your-pfx-password
    

    Jika file .pfx Anda tidak dilindungi kata sandi, gunakan -passin pass: untuk parameter terakhir.

  1. Jalankan skrip penginstalan yang disediakan dalam templat untuk menyebarkan aplikasi ke kluster Anda. Skrip menyalin paket aplikasi ke penyimpanan gambar kluster, mendaftarkan jenis aplikasi, dan membuat instans aplikasi.

    ./install.sh
    

Setelah Anda menjalankan skrip penginstalan, buka browser dan navigasikan ke Service Fabric Explorer:

  • Pada kluster lokal, gunakan http://localhost:19080/Explorer (ganti localhost dengan IP privat VM jika menggunakan Vagrant di Mac OS X).
  • Pada kluster Azure yang aman, gunakan https://PublicIPorFQDN:19080/Explorer.

Perluas node Aplikasi dan perhatikan bahwa sekarang ada entri untuk jenis aplikasi Anda, ServiceFabricTomcatType, dan yang lain untuk instans pertama jenis tersebut. Mungkin perlu beberapa menit agar aplikasi sepenuhnya disebarkan, jadi bersabarlah.

Service Fabric Explorer

  1. Untuk mengakses aplikasi di server Tomcat, buka jendela browser dan masukkan salah satu URL berikut. Jika Anda menyebarkan ke kluster lokal, gunakan localhost untuk PublicIPorFQDN. Anda akan melihat varian layar selamat datang "Halo Dunia!" untuk setiap URL.

    • http://PublicIPorFQDN:8080/hello
    • http://PublicIPorFQDN:8080/hello/sayhello
    • http://PublicIPorFQDN:8080/hello/sayhi

Pembersihan

Gunakan skrip penghapusan instalasi yang disediakan dalam templat untuk menghapus instans aplikasi dari kluster Anda dan membatalkan pendaftaran jenis aplikasi.

./uninstall.sh

Setelah Anda mendorong gambar ke registri kontainer, Anda dapat menghapus gambar lokal dari komputer pengembangan Anda:

docker rmi tomcattest
docker rmi myregistry.azurecr.io/samples/tomcattest

Langkah berikutnya