摘要:在容器化開發環境中分享了如何容器化本地的開發環境。對于一個應用,數據庫似乎是必不可少的東西。下面會通過例子來介紹一下如何一個容器中的數據庫。例子將會使用的技術棧在目錄下新建文件,用于控制數據庫的啟動。
在 容器化開發環境 中分享了如何容器化本地的開發環境。對于一個Web應用,數據庫似乎是必不可少的東西。下面會通過例子來介紹一下如何Setup一個容器中的數據庫。例子將會使用的技術棧:
MySQL
Flyway
...
Setup Codebase
clone hello-dockerize repo
$ git clone https://github.com/aikin/hello-dockerize.gitInstall MySQL On Docker Image
在dockerize目錄下新建文件docker-entrypoint.sh,用于控制MySQL數據庫的啟動。
修改Dockerfile,添加安裝MySQL的配置:
# === Install Mysql === RUN groupadd -r mysql && useradd -r -g mysql mysql RUN mkdir /docker-entrypoint-initdb.d ENV MYSQL_MAJOR 5.7 ENV MYSQL_VERSION 5.7.11-1ubuntu14.04 # gpg: key 5072E1F5: public key "MySQL Release Engineering" imported RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5 RUN echo "deb http://repo.mysql.com/apt/ubuntu/ trusty mysql-${MYSQL_MAJOR}" > /etc/apt/sources.list.d/mysql.list # the "/var/lib/mysql" stuff here is because the mysql-server postinst doesn"t have an explicit way to disable the mysql_install_db codepath besides having a database already "configured" (ie, stuff in /var/lib/mysql/mysql) # also, we set debconf keys to make APT a little quieter RUN { echo mysql-community-server mysql-community-server/data-dir select ""; echo mysql-community-server mysql-community-server/root-pass password ""; echo mysql-community-server mysql-community-server/re-root-pass password ""; echo mysql-community-server mysql-community-server/remove-test-db select false; } | debconf-set-selections RUN apt-get update RUN apt-get install -y mysql-server="${MYSQL_VERSION}" RUN rm -rf /var/lib/apt/lists/* RUN rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql # comment out a few problematic configuration values # don"t reverse lookup hostnames, they are usually another container RUN sed -Ei "s/^(bind-address|log)/#&/" /etc/mysql/my.cnf && echo "skip-host-cache skip-name-resolve" | awk "{ print } $1 == "[mysqld]" && c == 0 { c = 1; system("cat") }" /etc/mysql/my.cnf > /tmp/my.cnf && mv /tmp/my.cnf /etc/mysql/my.cnf VOLUME /var/lib/mysql COPY docker-entrypoint.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/docker-entrypoint.sh RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat ENTRYPOINT ["docker-entrypoint.sh"] EXPOSE 3306 CMD ["mysqld"]
新建文件dev.env,用于配置數據庫賬號和密碼。
MYSQL_USER=mysql MYSQL_PASSWORD=mysql MYSQL_DATABASE=hello_dockerize MYSQL_ROOT_PASSWORD=12345678
修改docker-compose.yml
web: build: ./dockerize env_file: ./dockerize/dev.env environment: - LANG=C.UTF-8 - TERM=xterm - DEBUG=true ports: - "8080:8080" - "3306:3306" - "5005:5005" volumes: - .:/hello-dockerize - /var/lib/mysql:/var/lib/mysql
啟動容器
$ docker-compose run --service-ports webUse Database Migrations Flyway
新建文件db.mysql.gradle
flyway { driver = "com.mysql.jdbc.Driver" url = "jdbc:mysql://dockerhost:3306/hello_dockerize" user = "mysql" password = "mysql" table = "hello_dockerize_schema_version" initOnMigrate = true locations = ["filesystem:${projectDir}/src/main/resources/db/migration/mysql"] sqlMigrationPrefix = "MySQL-" } dependencies { compile "mysql:mysql-connector-java:5.1.34" }
修改build.gradle文件,添加
buildscript { repositories { jcenter() maven { url "http://repo.spring.io/snapshot" } maven { url "http://repo.spring.io/milestone" } } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.5.RELEASE") classpath "org.flywaydb:flyway-gradle-plugin:3.0" } } apply plugin: "flyway" apply from: "db.mysql.gradle"
新建目錄 src/main/resources/db/migration/mysql,添加 migration sql 腳本MySQL-1_1__create_user.sql:
CREATE TABLE User ( ID BIGINT PRIMARY KEY AUTO_INCREMENT, FIRST_NAME varchar(64) NOT NULL, LAST_NAME varchar(64) NOT NULL ) ENGINE = InnoDB DEFAULT CHARSET = utf8; insert into User (FIRST_NAME, LAST_NAME) values ("Laijin", "Lu");
執行 migrate 命令:
$ ./gradlew flywayClean flywayInit flywayMigrateCheck Migrate Result On Intellij IDEA
安裝 Intellij IDEA plugin Database Navigator,配置connections:
查看User表數據
結束了嗎?并沒有,如何將應用和數據庫分離成兩個獨立的容器。
原文鏈接
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26762.html
摘要:服務網關服務網關涵蓋的功能包括路由,鑒權,限流,熔斷,降級等對入站請求的統一攔截處理。具體可以進一步劃分為外部網關面向互聯網和內部網關面向服務內部管理。應用服務應用服務是企業業務核心。到此實際上已經完成服務遷移工作。 導讀 Spring Cloud基于Spring Boot開發,提供一套完整的微服務解決方案,具體包括服務注冊與發現,配置中心,全鏈路監控,API...
摘要:宋體本文從拉勾網的業務架構日志采集監控服務暴露調用等方面介紹了其基于的容器化改造實踐。宋體此外,拉勾網還有一套自研的環境的業務發布系統,不過這套發布系統未適配容器環境。寫在前面 拉勾網于 2019 年 3 月份開始嘗試將生產環境的業務從 UHost 遷移到 UK8S,截至 2019 年 9 月份,QA 環境的大部分業務模塊已經完成容器化改造,生產環境中,后臺管理服務已全部遷移到 UK8...
摘要:本文內容節選自由主辦的第七屆,架構師高欣分享的的實踐實錄。當然,在部署完成后,我們要做一個監測以便掌握它的運行狀況。規劃配置運行環境在正式部署前,還要考慮如何規劃并配置好運行環境。在使用部署時,可以利用這些命令做驗證,檢驗部署是否正常。 showImg(https://segmentfault.com/img/bVblRHj?w=2880&h=1920); 本文內容節選自由msup主辦...
摘要:優化網絡在今年早些時候,我們公布了許多關于的新的網絡功能,包括原生集群,共享,原生容器負載均衡以及原生容器的網絡服務,它們服務于上的應用程序以及在谷歌云上的。 showImg(https://segmentfault.com/img/bVbnY8w);許多企業機構正在把全部或部分 IT 業務遷移到云端,幫助企業更好的運營。不過這樣的大規模遷移,在企業的實際操作中也有一定難度。不少企業保...
閱讀 2409·2021-09-08 09:45
閱讀 3352·2021-09-08 09:45
閱讀 3101·2019-08-30 15:54
閱讀 3354·2019-08-26 13:54
閱讀 1410·2019-08-26 13:26
閱讀 1389·2019-08-26 13:23
閱讀 912·2019-08-23 17:57
閱讀 2181·2019-08-23 17:14