GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Menerbitkan aplikasi ASP.NET 5 ke Docker di Linux dengan Visual Studio

Ini masih awal, tapi ini adalah pratinjau bagus dari kemungkinan yang akan datang. Saya sering menggunakan batu bata LEGO sebagai analogi ketika berbicara tentang sistem perangkat lunak. Saya suka ide pilihan, fleksibilitas, dan kemampuan plug. Memilih bahasa Anda, sistem operasi, metode dan gaya penerapan, dll semuanya penting.

Ada pratinjau ekstensi untuk Visual Studio 2015 (kandidat rilis pada saat penulisan ini) yang menambahkan dukungan Docker. Jika Anda memiliki VS2015 RC, Anda bisa mendapatkan Ekstensi Docker di sini. Anda tentu saja dapat mengelola berbagai hal dari baris perintah, tetapi menurut saya saat Anda membaca postingan ini, Anda akan menghargai kemudahan ekstensi ini.

CATATAN: Perlu juga ditunjukkan bahwa ada baris perintah klien Windows untuk Docker juga. Anda dapat "choco install docker" dan membacanya di sini.

Penjelasan Singkat Apa Itu Docker

Jika Anda tidak terbiasa dengan Docker, inilah dasar-dasar supernya.

  • Mesin Virtual:Anda mungkin tahu apa itu mesin virtual. Ini adalah seluruh sistem operasi, seluruh komputer, tervirtualisasi. Jika Anda memiliki aplikasi 10 megabyte yang ingin Anda jalankan, Anda mungkin akan memasukkannya ke dalam mesin virtual 10 gigabyte dan membawanya kemana-mana. Itu memberikan keamanan dan isolasi yang hebat karena aplikasi Anda sendirian di VM pribadinya sendiri, tetapi ini sedikit berlebihan. Sekarang Anda ingin menerapkan 100 aplikasi, dan Anda memiliki ruang, CPU, dan hal lain untuk dipikirkan. VM juga mulai lambat dan harus dipelihara secara aktif.
  • Wadah Docker/Linux (dan wadah Windows "Docker untuk Server Windows"):Wadah Docker adalah kotak pasir yang berjalan pada kernel OS yang sama. Mereka mudah digunakan dan mulai dengan cepat. Sebagai efek samping dari berjalan pada kernel yang sama, container memungkinkan Anda berbagi sebagian besar dari 10 gigabyte (sebagai contoh nomor) perangkat lunak pendukung di antara banyak aplikasi, memberi Anda lebih sedikit isolasi tetapi juga menggunakan sumber daya yang BANYAK lebih sedikit. Kontainer dimulai dengan cepat dan sumber daya bersama yang mendasarinya adalah yang dipelihara dan selalu diperbarui.

Docker juga merupakan cara untuk mengemas aplikasi dan mendorongnya keluar dengan cara yang andal dan dapat direproduksi. Jadi Anda dapat mengatakan bahwa Docker adalah sebuah teknologi, tetapi juga sebuah filosofi dan sebuah proses.

Docker dan Visual Studio

Setelah Anda menginstal ekstensi Docker untuk Visual Studio 2015 (pratinjau), lanjutkan dan buat aplikasi ASP.NET 5. Klik kanan proyek dan tekan Publikasikan.

Perhatikan bagian Wadah Docker yang telah ditambahkan? Anda masih memiliki PAAS (Platform as a Service) dan juga dapat memublikasikan ke VM dalam Azure. Pilih Docker dan Anda akan berada di sini:

Kami akan membuat VM baru untuk meng-host barang-barang Docker kami. VM ini akan menjadi host untuk container kami. Hari ini akan menjadi Ubuntu LTS VM. Perhatikan bahwa dialog tersebut mencakup semua penyiapan untuk Docker, port, sertifikat, dll. Tentu saja saya dapat menggunakan VM yang ada.

Jika Anda tidak memiliki VM, maka pembuatan awal membutuhkan waktu (5-10 menit atau lebih), jadi tunggulah. Jika Anda sudah memilikinya, atau yang Anda buat sudah siap, lanjutkan perjalanan.

Buat catatan khusus tentang opsi Dockerfile. Anda biasanya ingin memilih Dockerfile Anda sendiri yang dibuat secara manual, dengan asumsi Anda melakukan lebih dari sekadar Hello World seperti saya.

ASP.NET Dockerfile aktif di GitHub:https://github.com/aspnet/aspnet-docker dan di registri Docker:https://registry.hub.docker.com/u/microsoft/aspnet/

Di jendela build Anda akan melihat banyak output terkait buruh pelabuhan. Ini versi potongan untuk rasa.

VERBOSE: Replacing tokens in Dockerfile: C:\Users\Scott\AppData\Local\Temp\PublishTemp\approot\src\WebApplication6\Properties\PublishProfiles\Dockerfile
VERBOSE: Package output path: C:\Users\Scott\AppData\Local\Temp\PublishTemp
VERBOSE: DockerHost: tcp://hanseldocker.cloudapp.net:2376
VERBOSE: DockerImageName: webapplication6
VERBOSE: DockerPublishHostPort: 80
VERBOSE: DockerPublishContainerPort: 80
VERBOSE: DockerAuthOptions: --tls
VERBOSE: DockerAppType: Web
VERBOSE: DockerBuildOnly: False
VERBOSE: DockerRemoveConflictingContainers: True
VERBOSE: LaunchSiteAfterPublish: True
VERBOSE: SiteUrlToLaunchAfterPublish:
VERBOSE: Querying for conflicting containers which has the same port mapped to the host...
Executing command [docker --tls -H tcp://hanseldocker.cloudapp.net:2376 ps -a | select-string -pattern ":80->" | foreach { Write-Output $_.ToString().split()[0] }]
VERBOSE: Building Docker image: webapplication6
Executing command [docker --tls -H tcp://hanseldocker.cloudapp.net:2376 build -t webapplication6 -f "C:\Users\Scott\AppData\Local\Temp\PublishTemp\approot\src\WebApplication6\Properties\PublishProfiles\Dockerfile" "C:\Users\Scott\AppData\Local\Temp\PublishTemp"]
VERBOSE: time="2015-05-27T10:59:06-07:00" level=warning msg="SECURITY WARNING: You are building a Docker image from Windows against a Linux Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories."
VERBOSE: Sending build context to Docker daemon 28.01 MB
VERBOSE: Step 0 : FROM microsoft/aspnet:vs-1.0.0-beta4
VERBOSE: vs-1.0.0-beta4: Pulling from microsoft/aspnet
VERBOSE: e5c30fef7918: Pulling fs layer
VERBOSE: e5c30fef7918: Pull complete
VERBOSE: e5c30fef7918: Already exists
VERBOSE: Digest: sha256:27fbe2377b5d4e66c4aaf3c984ef03d22afbfee3d4e78e10ff38cac7ff162d2e
VERBOSE: Status: Downloaded newer image for microsoft/aspnet:vs-1.0.0-beta4
VERBOSE: ---> e5c30fef7918
VERBOSE: Step 1 : ADD . /app
VERBOSE: ---> cf1f788321b3
VERBOSE: Removing intermediate container dd345cdcc5d9
VERBOSE: Step 2 : WORKDIR /app/approot/src/WebApplication6
VERBOSE: ---> Running in f22027140233
VERBOSE: ---> 7eabc0da4645
VERBOSE: Removing intermediate container f22027140233
VERBOSE: Step 3 : ENTRYPOINT dnx . Kestrel --server.urls http://localhost:80
VERBOSE: ---> Running in 4810324d32a5
VERBOSE: ---> e0a7ad38eb34
VERBOSE: Removing intermediate container 4810324d32a5
VERBOSE: Successfully built e0a7ad38eb34
The Docker image "webapplication6" was created successfully.
VERBOSE: Starting Docker container: webapplication6
Executing command [docker --tls -H tcp://hanseldocker.cloudapp.net:2376 run -t -d -p 80:80 webapplication6]
Docker container started with ID: 6d4820044df200e87f08cb5becbec879d1b58fcab73145ca3aa99a424c162054
To see standard output from your application, open a command line window and execute the following command:
docker --tls -H tcp://hanseldocker.cloudapp.net:2376 logs --follow 6d4820044df200e87f08cb5becbec879d1b58fcab73145ca3aa99a424c162054
VERBOSE: received -1-byte response of content type text/html; charset=utf-8
Executing command [Start-Process -FilePath "http://hanseldocker.cloudapp.net/"]
Publish completed successfully.

Bagian yang menarik adalah panggilan ke dnx (host Eksekusi .NET), peringatan bahwa saya memulai di Windows dan saya akan menggunakan Linux, serta fakta bahwa kami menggunakan gambar buruh pelabuhan "microsoft/aspnet".

Dalam contoh saya, saya memiliki VS dan ekstensi membuat sertifikat saya. Jika saya ingin terhubung ke instance ini dari baris perintah Windows Docker, saya harus memasukkan sertifikat tersebut, atau mengatur env var. Di sini saya menjalankan "ps" untuk melihat wadah buruh pelabuhan jarak jauh di VM Azure Linux ini. Klien Docker mencari sertifikat di %USERPROFILE%\.docker., jadi Anda hanya perlu menyetel DOCKER_HOST atau meneruskannya seperti ini.

C:\>docker --tls -H=tcp://hanseldocker.cloudapp.net:2376 ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d4820044df2 webapplication6:latest "dnx . Kestrel --ser 58 minutes ago Up 58 minutes 0.0.0.0:80->80/tcp silly_poincare

Itu bekerja dengan baik. Pastikan juga untuk menjelajahi folder PublishProfiles yang dibuat di proyek Visual Studio Anda di bawah "Properties." Skrip PowerShell dan skrip Shell dibuat di folder itu yang dapat Anda gunakan untuk memublikasikan aplikasi Anda dari baris perintah. Misalnya:

.\hanseldocker-Docker-publish.ps1 -packOutput $env:USERPROFILE\AppData\Local\Temp\PublishTemp -pubxmlFile .\hanseldocker-Docker.pubxml

atau dari Linux:

cd ProjectFolder (like WebApplication/src/WebApplication)
source dnvm.sh
dnu restore --no-cache
mkdir ~/Temp
dnu publish . --out ~/Temp/ --wwwroot-out "wwwroot" --quiet
cd Properties/PublishProfiles
chmod +x ./Docker-publish.sh
./Docker-publish.sh ./Docker.pubxml ~/Temp/

Saya menantikan masa depan yang penuh dengan pilihan lintas-platform lintas-alat. Terakhir, ada seri video 7 bagian hebat yang disebut "Docker for .NET Developers" yang harus Anda lihat di Saluran 9.

Sponsor: Terima kasih banyak kepada Atalasoft untuk mensponsori blog dan feed minggu ini! Jika perusahaan Anda bekerja dengan dokumen, pasti periksa alat pengembang Atalasoft untuk tampilan, pengambilan, dan transformasi web &seluler. Mereka juga mendapatkan uji coba gratis dan tim dukungan yang luar biasa.


Docker
  1. Cara Menginstal Nextcloud dengan Docker di Server Linux Anda

  2. Mengoptimalkan ukuran Gambar ASP.NET Core Docker

  3. Visual Basic .Net di Linux

  1. Memulai Visual Studio Code (VSC) di Linux

  2. Tutorial Docker – Memulai Dengan Docker Di Linux

  3. Apakah Visual Basic didukung oleh .NET Core di Linux?

  1. Instal Kode Microsoft Visual Studio Di Linux

  2. Memulai Dengan Docker Compose Di Linux

  3. Cara Setup MySQL Dengan Docker Di Linux