Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, MySQL ve Docker Composeile çok kapsayıcılı uygulamaların nasıl oluşturulacağı açıklanmaktadır. Birden çok kapsayıcıya sahip bir uygulama, kapsayıcıları özel görevler için ayırmanıza olanak tanır, böylece her kapsayıcı tek bir göreve odaklanabilir. Çok kapsayıcılı uygulamaları kullanmanın birçok avantajı vardır:
- Ayrı kapsayıcılar, API'leri ve ön uç kaynaklarını veritabanlarından farklı bir şekilde yönetmenizi sağlar.
- Birden fazla kapsayıcı kullanarak, sürümleri izole bir şekilde versiyona alabilir ve güncelleyebilirsiniz.
- Yerel veritabanları, üretimdeki veritabanları için kullanılan kapsayıcılarda ve yönetilen hizmetlerde tutulabilir.
- Çok kapsayıcılı uygulamalar, işlem yöneticisiyle birden çok işlem çalıştırmaktan daha verimlidir ve bu da kapsayıcı başlatma/kapatma işlemine karmaşıklık kazandırır.
Bu öğreticide şunları yapacaksınız:
- MySQL'i başlatma
- MySQL ile çoklu konteynerlı uygulamanızı çalıştırın
- Uygulamanız için Docker Compose dosyası oluşturma
- Docker Compose ile uygulama yığınını çalıştırma
Önkoşullar
Bu makale, öğretici serisinin bir parçasıdır. Prosedürler, Linux kapsayıcıları için Docker Desktop gerektiren yerleşik bir örnek üzerine inşa edilmiştir.
Önerilen yaklaşım, önkoşulları karşılama da dahil olmak üzere ilk öğretici olan Kapsayıcı uygulaması oluşturma ve ayrıca uygulamanızda verileri kalıcı hale getirme öğreticisini tamamlamaktır. Bu eğitimleri tamamladıktan sonra, bu makalede açıklanan adımlarla devam edin.
Bu makaledeki örnekte Docker Composekullanılır.
Windows için Docker Desktop, Docker Compose'u içerir.
Docker yüklemenizi doğrulamak için aşağıdaki komutu çalıştırın:
docker-compose version
Visual Studio Code
Bu öğretici serisinde Visual Studio Code (VS Code) yordamları açıklanmaktadır. Bu ortamda çalışmak için aşağıdaki noktaları gözden geçirin:
CONTAINER EXPLORER veya EXPLORER (dosya ve klasör) görünümü arasında geçiş yapmak için sol menüyü kullanın:
VS Code'da bir komut satırı penceresi açmak için Terminal>Yeni Terminalseçin. Ctrl+Shift+` (geri onay işareti) klavye kısayolunu da kullanabilirsiniz.
Aksi belirtilmediği sürece, bash penceresinde komutları çalıştırın.
Bashetiketli komutların çoğu Bash penceresinde veya VS Code komut satırı penceresinde çalıştırılır.
MySQL veritabanı yönetim sistemini başlatma
Varsayılan olarak kapsayıcılar yalıtılarak çalışır. Kapsayıcı, aynı bilgisayardaki diğer işlemlerin veya diğer kapsayıcıların farkında değildir.
Kapsayıcılar arasındaki iletişimi etkinleştirmek için aynı ağa bağlanması gerekir. Aynı ağdaki birden çok kapsayıcı veri paylaşabilir ve birbirleriyle bilgi işleyebilir.
Bir ağa kapsayıcı eklemenin iki yolu vardır. Oluşturma sırasında bir kapsayıcıyı ağa ekleyebilir veya var olan bir kapsayıcıyı daha sonra bir ağa ekleyebilirsiniz.
Bu örnekte, ağı oluşturur ve başlangıçta MySQL kapsayıcısını eklersiniz.
todo-appadlı bir ağ oluşturun:docker network create todo-apptodo-mysql-dataadlı bir MySQL kapsayıcısı başlatın vetodo-appağına ekleyin. Komut, MySQL veritabanımysqliçin ağ takma adıtodosoluşturur.Komutu çalıştırdığınızda,
<your-password>yer tutucusu için MySQL kök parolanızı girin.docker run -d --network todo-app --network-alias mysql -v todo-mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=<your-password> -e MYSQL_DATABASE=todos mysql:ltsBu komut ayrıca
MYSQL_ROOT_PASSWORDveMYSQL_DATABASEortam değişkenlerini tanımlar. Daha fazla bilgi için MySQL Docker Hub listesine bakın .Uyarı
Bu öğretici, en güvenli yöntem olmayan bir MySQL veritabanıyla kimlik doğrulaması yapmak için parola kimlik bilgilerini gösterir. Daha güvenli kimlik doğrulama yöntemleri hakkında bilgi edinmek için MySQL belgelerine bakın.
Sonraki adımda kullanmak üzere kapsayıcı kimliğinizi alın.
docker psmysqlağındaki kapsayıcıya bağlanabildiğinizi onaylayın.Komutu çalıştırdığınızda,
<mysql-container-id>yer tutucusu için kapsayıcı kimliğinizi girin.docker exec -it <mysql-container-id> mysql -pİstem satırına,
todo-mysql-datakapsayıcısını oluştururken sağladığınız parolayı girin.MySQL kabuğunda veritabanlarını listeleyin ve
todosveritabanını gördüğünüzden emin olun.SHOW DATABASES;Aşağıdaki çıkışı görmeniz gerekir:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | todos | +--------------------+ 5 rows in set (0.00 sec)Bağlantıyı sonlandırmak ve komut satırı istemine dönmek için çıkışgirin.
Uygulamanızı MySQL ile çalıştırma
todo uygulaması, MySQL bağlantı ayarlarınızı belirtmek için belirli ortam değişkenlerini ayarlamayı destekler. Aşağıdaki tabloda desteklenen değişkenler ve bu bölümde sunulan örnekte kullanılan değerler listelenmektedir.
| Değişken adı | Örnek değer | Açıklama |
|---|---|---|
MYSQL_HOST |
mysql |
MySQL sunucusunun ana bilgisayar adı. |
MYSQL_USER |
root |
Bağlantı için kullanılacak kullanıcı adı. |
MYSQL_PASSWORD |
<your-password> |
Bağlantı için kullanılacak parola. Bu örnekte, <your-password> yer tutucusu için kök parolanızı değiştirin. |
MYSQL_DATABASE |
todos |
Bağlantı kurulduktan sonra kullanılacak veritabanının adı. |
Uyarı
Bağlantı ayarlarını ayarlamak için ortam değişkenlerini kullanmak geliştirme için kabul edilebilir, ancak bu uygulama üretim ortamında uygulama çalıştırmak için önerilmez. Daha fazla bilgi için bkz. Gizli veriiçin ortam değişkenlerini neden kullanmamalısınız?
Daha güvenli bir mekanizma, kapsayıcı düzenleme çerçeveniz tarafından sağlanan gizli dizi desteğini kullanmaktır. Çoğu durumda, bu sırlar çalışan kapsayıcıya dosya olarak yüklenir.
Aşağıdaki örnekte, uygulamanızı başlatır ve uygulama kapsayıcınızı MySQL kapsayıcınıza bağlarsınız.
Aşağıdaki
dockerkomutunu çalıştırın. Komutun daha önce açıklanan ortam değişkenlerini nasıl belirttiğine dikkat edin.Komutu çalıştırdığınızda,
<your-password>yer tutucusu için MySQL kök parolanızı girmeyi unutmayın.docker run -dp 3000:3000 -w /app -v ${PWD}:/app --network todo-app -e MYSQL_HOST=mysql -e MYSQL_USER=root -e MYSQL_PASSWORD=<your-password> -e MYSQL_DB=todos node:lts-alpine sh -c "yarn install && yarn run dev"VS Code düzenleyicisinde Kapsayıcı Gezgini'ni açın, uygulama kapsayıcınıza sağ tıklayın ve Günlükleri Görüntüle'yi seçin.
docker logskomutunu kullanarak günlükleri komut satırından da görüntüleyebilirsiniz.Log çıkışını gözden geçirin. Uygulamanın MySQL veritabanına bağlı olduğunu gösteren satıra dikkat edin:
Connected to mysql db at host mysql.# Previous log messages omitted $ nodemon src/index.js [nodemon] 1.19.2 [nodemon] to restart at any time, enter `rs` [nodemon] watching dir(s): *.* [nodemon] starting `node src/index.js` Connected to mysql db at host mysql Listening on port 3000İnternet tarayıcınızda çalışan uygulamanıza gidin:
http://localhost:3000.Çalışan uygulamanızda yapılacaklar listenize bazı öğeler ekleyin.
Veritabanını denetleyebilmek için
mysqlağındaki MySQL kapsayıcı veritabanına bağlanın.Komutu çalıştırdığınızda,
<mysql-container-id>yer tutucusu için kapsayıcı kimliğinizi girin.docker exec -ti <mysql-container-id> mysql -p todosİstem satırına,
todo-mysql-datakapsayıcısını oluştururken sağladığınız parolayı girin.MySQL kabuğunda, eklediğiniz
todo_items'ıntodosveritabanına yazıldığını doğrulayın.use todos; select * from todo_items;Aşağıdaki örneğe benzer bir çıktı görmeniz gerekir:
+--------------------------------------+--------------------+-----------+ | id | name | completed | +--------------------------------------+--------------------+-----------+ | c906ff08-60e6-44e6-8f49-ed56a0853e85 | Do amazing things! | 0 | | 2912a79e-8486-4bc3-a4c5-460793a575ab | Be awesome! | 0 | +--------------------------------------+--------------------+-----------+
Artık verileri ayrı bir kapsayıcıda çalışan bir dış veritabanında depolayan bir uygulamanız var. Bu yordam, ağ kullanarak kapsayıcılar arasında iletişimi nasıl etkinleştirebileceğinizi gösterir.
Docker Compose dosyası oluşturma
Docker Compose, çok kapsayıcılı uygulamaları tanımlamanıza ve paylaşmanıza yardımcı olur. Docker Compose dosyası tüm gerekli hizmetlerinizi belirtebilir, böylece tüm ilgili işlemleri tek bir komutla başlatabilir veya sonlandırabilirsiniz. Uygulama yığınınızı proje deponuzun kökündeki bir Docker Compose dosyasında tanımlayabilir ve yapılandırmanızı sürüm denetimi altında tutabilirsiniz. Bu yaklaşım, başkalarının deponuzu kopyaladıklarında projenize katkıda bulunmalarını sağlar.
Aşağıdaki örnekte, todoçok kapsayıcılı uygulamanız için bir Docker Compose dosyası yapılandıracaksınız.
todouygulama projenizin kökünde docker-compose.ymladlı bir Docker Compose dosyası oluşturun.Not
Varsayılan olarak, YAML şema sürümü en son sürüme ayarlanır. Uygulamanızı çalıştırdığınızda şema sürümünüz eskiyse bir uyarı iletisi alırsınız. Geçerli şema sürümlerini ve uyumluluk matrislerini gözden geçirmek için bkz. Genel Bakış (Dosya oluşturma).
docker-compose.yml dosyasına aşağıdaki öğeleri ekleyin. Uygulamanızın
namebelirtin ve uygulamanızın parçası olarak çalıştırmak istediğinizservices(veya kapsayıcılar) listesini başlatın.name: todo services:Hizmet listesi uygulamanız için benzersizdir. Örnek olarak
app,web,db,proxyvb. verilebilir. sonraki bir adımdaservicesöğesinin tanımını genişletirsiniz.İpucu
girintileme, .yml dosyalarda önemlidir. VS Code'da düzenliyorsanız, IntelliSense biçim veya söz dizimindeki hataları gösterir.
servicesdosyasındaki tanımına dönün. Kapsayıcının görüntüsünü içerenapphizmet öğesini tanımlamak için bir giriş ekleyerek tanımı genişletin.services: app: image: node:lts-alpineHizmet için herhangi bir ad seçebilirsiniz. Ad otomatik olarak bir ağ diğer adı haline gelir ve bu, MySQL hizmetini tanımladığınızda kullanışlıdır.
Yürütülecek bir
appbelirtmek içincommandöğe tanımını genişletin.app: image: node:lts-alpine command: sh -c "yarn install && yarn run dev"portshizmetiyle kullanılacakapp'ı tanımla. Bu bağlantı noktaları, uygulamayı MySQL ile çalıştırmak için kullanılan komutun-p 3000:3000bağımsız değişkenine karşılık gelirler.app: image: node:lts-alpine command: sh -c "yarn install && yarn run dev" ports: - 3000:3000working_dirhizmeti için çalışma diziniapp'ı ve ayrıca eşlenenvolumes'yi belirleyin.app: image: node:lts-alpine command: sh -c "yarn install && yarn run dev" ports: - 3000:3000 working_dir: /app volumes: - ./:/appDocker Compose birimlerini tanımlarken, geçerli dizine göre göreli yolları kullanabilirsiniz.
environmenthizmeti için komut yürütürken kullanılacakappdeğişken tanımlarını belirtin.app: image: node:lts-alpine command: sh -c "yarn install && yarn run dev" ports: - 3000:3000 working_dir: /app volumes: - ./:/app environment: MYSQL_HOST: mysql MYSQL_USER: root MYSQL_PASSWORD: <your-password> MYSQL_DB: todos<your-password>yer tutucusu için MySQL kök parolanızı girmeyi unutmayın.mysqlhizmet tanımından sonra MySQL hizmetiapptanımını ekleyin. Öğe adlarını ve değerlerini gösterildiği gibi ve aynı girintiyle belirtin.services: app: ... mysql: image: mysql:ltsmysqlhizmet tanımı, mySQL başlatmakiçin daha önce kullandığınız komuta karşılık gelir. Hizmeti tanımladığınızda, otomatik olarak ağ takma adını alır.volumeshizmeti içinmysqleşleşmesini tanımlayın.services: app: ... mysql: image: mysql:lts volumes: - todo-mysql-data:/var/lib/mysqlenvironmenthizmeti için komut yürütürken kullanılacakmysqldeğişken tanımlarını belirtin.services: app: ... mysql: image: mysql:lts volumes: - todo-mysql-data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: <your-password> MYSQL_DATABASE: todos<your-password>yer tutucusu için MySQL kök parolanızı girmeyi unutmayın.Uygulamanın tamamı için hacim eşlemesi tanımlayın.
volumes:bölümünden sonra ve aynı girintiyle birservices:bölümü ekleyin.services: ... volumes: todo-mysql-data:Tamamlanmış docker-compose.yml dosyanızın aşağıdaki örneğe benzediğini onaylayın.
<your-password>yer tutucusu için MySQL kök parolanızı görmeniz gerekir.name: todo services: app: image: node:lts-alpine command: sh -c "yarn install && yarn run dev" ports: - 3000:3000 working_dir: /app volumes: - ./:/app environment: MYSQL_HOST: mysql MYSQL_USER: root MYSQL_PASSWORD: <your-password> MYSQL_DB: todos mysql: image: mysql:lts volumes: - todo-mysql-data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: <your-password> MYSQL_DATABASE: todos volumes: todo-mysql-data:
Docker Compose ile uygulama yığınını çalıştırma
Artık docker-compose.yml dosyanızı çalıştırmayı deneyebilirsiniz.
Uygulamanızın ve veritabanınızın çalışan örneklerini durdurun.
VS Code'da şu adımları izleyin:
CONTAINER EXPLORER'ı (Kapsayıcı Araçları uzantısı) açın.
Her çalışan kapsayıcı için, kapsayıcıya sağ tıklayın ve Kaldırseçin.
Çok kapsayıcılı uygulamanızı ve tüm hizmetleri başlatın.
VS Code'da şu adımları izleyin:
EXPLORER (dosya ve klasör) görünümünü açın.
docker-compose.yml dosyasına sağ tıklayın ve Compose Upseçeneğini seçin.
Aşağıdaki örneğe benzer bir çıktı görmeniz gerekir:
[+] Building 0.0s (0/0) [+] Running 2/2 ✔ Container app-app-1 Started 0.9s ✔ Container app-mysql-1 RunningBu işlem, uygulama ve ağ için eşlenmiş birimi oluşturur. Varsayılan olarak Docker Compose, uygulama yığını için özel olarak bir ağ oluşturur.
Çalışan kapsayıcının günlüklerini gözden geçirin.
VS Code'da şu adımları izleyin:
CONTAINER EXPLORER'ı (Kapsayıcı Araçları uzantısı) açın.
Uygulama kapsayıcısını sağ tıklatın ve günlükleri görüntüleseçin.
Aşağıdaki örneğe benzer bir çıktı görmeniz gerekir:
mysql_1 | 2019-10-03T03:07:16.083639Z 0 [Note] mysqld: ready for connections. mysql_1 | Version: '5.7.27' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL) app_1 | Connected to mysql db at host mysql app_1 | Listening on port 3000Günlükler, her satırın başındaki
app_1gibi hizmet adını ve örnek numarasını gösterir. Bu biçim, iletileri hizmete ve örneğe göre ayırt etmeye yardımcı olur. Her hizmetten gelen günlükler tek bir akışa eklenir. Bu yaklaşım zamanlamayla ilgili sorunları izlemenizi sağlar.Artık İnternet tarayıcınızda çalışan uygulamanıza gidebilirsiniz:
http://localhost:3000.
Docker Compose ve çalışan kapsayıcıları durdurma
Uygulama ve kapsayıcılarla işiniz bittiğinde bunları kaldırabilirsiniz.
VS Code'da şu adımları izleyin:
EXPLORER (dosya ve klasör) görünümünü açın.
docker-compose.yml dosyasına sağ tıklayın ve Aşağı Alseçeneğini seçin.
Bu işlem, tüm çalışan kapsayıcıları durdurur ve ağı kaldırır.
Varsayılan olarak, oluşturma dosyanızdaki adlandırılmış birimler kaldırılmaz. Bu birimleri kaldırmak istiyorsanız docker-compose down --volumes komutunu kullanabilirsiniz.
Kaynakları temizleme
Bu öğretici serisindeki Önkoşulları bileşenlerini yüklemenize uyguladıysanız, gelecekteki Docker geliştirmesi için yapılandırmayı yeniden kullanabilirsiniz. Herhangi bir bileşeni silmek veya kaldırmak gerekli değildir.