国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

容器化開發環境 - 數據庫連接和遷移

Jensen / 1901人閱讀

摘要:在容器化開發環境中分享了如何容器化本地的開發環境。對于一個應用,數據庫似乎是必不可少的東西。下面會通過例子來介紹一下如何一個容器中的數據庫。例子將會使用的技術棧在目錄下新建文件,用于控制數據庫的啟動。

在 容器化開發環境 中分享了如何容器化本地的開發環境。對于一個Web應用,數據庫似乎是必不可少的東西。下面會通過例子來介紹一下如何Setup一個容器中的數據庫。例子將會使用的技術棧:

MySQL

Flyway

...

Setup Codebase

clone hello-dockerize repo

$ git clone https://github.com/aikin/hello-dockerize.git

Install 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 web

Use 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 flywayMigrate

Check Migrate Result On Intellij IDEA

安裝 Intellij IDEA plugin Database Navigator,配置connections

查看User表數據

  結束了嗎?并沒有,如何將應用和數據庫分離成兩個獨立的容器。

原文鏈接

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26762.html

相關文章

  • 服務遷移之路 | Spring Cloud向Service Mesh轉變

    摘要:服務網關服務網關涵蓋的功能包括路由,鑒權,限流,熔斷,降級等對入站請求的統一攔截處理。具體可以進一步劃分為外部網關面向互聯網和內部網關面向服務內部管理。應用服務應用服務是企業業務核心。到此實際上已經完成服務遷移工作。 導讀 Spring Cloud基于Spring Boot開發,提供一套完整的微服務解決方案,具體包括服務注冊與發現,配置中心,全鏈路監控,API...

    rickchen 評論0 收藏0
  • 拉勾網基于 UK8S平臺的容器改造實踐

    摘要:宋體本文從拉勾網的業務架構日志采集監控服務暴露調用等方面介紹了其基于的容器化改造實踐。宋體此外,拉勾網還有一套自研的環境的業務發布系統,不過這套發布系統未適配容器環境。寫在前面 拉勾網于 2019 年 3 月份開始嘗試將生產環境的業務從 UHost 遷移到 UK8S,截至 2019 年 9 月份,QA 環境的大部分業務模塊已經完成容器化改造,生產環境中,后臺管理服務已全部遷移到 UK8...

    CoorChice 評論0 收藏0
  • TOP100summit分享實錄 | JFrog高欣:Kubernetes is hard!JFro

    摘要:本文內容節選自由主辦的第七屆,架構師高欣分享的的實踐實錄。當然,在部署完成后,我們要做一個監測以便掌握它的運行狀況。規劃配置運行環境在正式部署前,還要考慮如何規劃并配置好運行環境。在使用部署時,可以利用這些命令做驗證,檢驗部署是否正常。 showImg(https://segmentfault.com/img/bVblRHj?w=2880&h=1920); 本文內容節選自由msup主辦...

    鄒強 評論0 收藏0
  • 內涵福利 | 加速業務交付,從谷歌云上使用 Kubernetes Istio 開始

    摘要:優化網絡在今年早些時候,我們公布了許多關于的新的網絡功能,包括原生集群,共享,原生容器負載均衡以及原生容器的網絡服務,它們服務于上的應用程序以及在谷歌云上的。 showImg(https://segmentfault.com/img/bVbnY8w);許多企業機構正在把全部或部分 IT 業務遷移到云端,幫助企業更好的運營。不過這樣的大規模遷移,在企業的實際操作中也有一定難度。不少企業保...

    王巖威 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<