摘要:上一篇容器化開發(fā)環(huán)境數(shù)據(jù)庫連接和遷移分享了關(guān)于如何給容器中的應(yīng)用創(chuàng)建數(shù)據(jù)庫連接,接下來將分享一下如何將數(shù)據(jù)庫從應(yīng)用容器中分離出來。
上一篇容器化開發(fā)環(huán)境 - 數(shù)據(jù)庫連接和遷移分享了關(guān)于如何給容器中的應(yīng)用創(chuàng)建數(shù)據(jù)庫連接,接下來將分享一下如何將數(shù)據(jù)庫從應(yīng)用容器中分離出來。
為什么要進(jìn)行分離?當(dāng)應(yīng)用和數(shù)據(jù)庫在同一個容器中運(yùn)行時,也就意味著,應(yīng)用和數(shù)據(jù)庫的生命周期捆綁在了一起,應(yīng)用和數(shù)據(jù)庫的運(yùn)行就會出現(xiàn)相互干擾現(xiàn)象,應(yīng)用的異常將有可能導(dǎo)致容器的停止,同時也將導(dǎo)致數(shù)據(jù)庫的關(guān)閉。更主要的原因是,很多時候需要多個容器中的應(yīng)用連接一個數(shù)據(jù)庫,為了保證容器之間的運(yùn)行相互獨(dú)立,相互不影響,就有必要將數(shù)據(jù)庫隔離在獨(dú)立的容器中運(yùn)行,讓數(shù)據(jù)庫和容器獨(dú)處二人世界,同時保證數(shù)據(jù)庫的生命周期不在受其它應(yīng)用影響。
Setup Codebase
clone hello-dockerie repo
$ git clone https://github.com/aikin/hello-dockerize.gitSeparate MySQL Dockerfile
在dockerize目錄下創(chuàng)建mysql/Dockerfle
修改mysql/Dockerfile,配置安裝MySQL腳本:
FROM ubuntu:14.04 RUN apt-get update # === 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 && 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"]
修改dockerize/Dockerfile,移除安裝MySQL的配置:
FROM ubuntu:14.04 RUN apt-get update ENV VERSION 8 ENV UPDATE 66 ENV BUILD 17 ENV JAVA_HOME /usr/lib/jvm/java-${VERSION}-oracle ENV JRE_HOME ${JAVA_HOME}/jre RUN apt-get install ca-certificates curl gcc libc6-dev libssl-dev make -y --no-install-recommends RUN curl --silent --location --retry 3 --cacert /etc/ssl/certs/GeoTrust_Global_CA.pem --header "Cookie: oraclelicense=accept-securebackup-cookie;" http://download.oracle.com/otn-pub/java/jdk/"${VERSION}"u"${UPDATE}"-b"${BUILD}"/server-jre-"${VERSION}"u"${UPDATE}"-linux-x64.tar.gz | tar xz -C /tmp RUN mkdir -p /usr/lib/jvm && mv /tmp/jdk1.${VERSION}.0_${UPDATE} "${JAVA_HOME}" RUN apt-get install -y openssl RUN apt-get remove --purge --auto-remove -y gcc libc6-dev libssl-dev make RUN apt-get autoclean && apt-get --purge -y autoremove RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* RUN update-alternatives --install "/usr/bin/java" "java" "${JRE_HOME}/bin/java" 1 && update-alternatives --install "/usr/bin/javac" "javac" "${JAVA_HOME}/bin/javac" 1 && update-alternatives --set java "${JRE_HOME}/bin/java" && update-alternatives --set javac "${JAVA_HOME}/bin/javac" WORKDIR /hello-dockerize EXPOSE 8080 EXPOSE 5005 CMD ["bash"]
將dockerize/docker-entrypoint.sh移動到dockerize/mysql目錄下
Startup
修改docker-compose.yml:
web: build: ./dockerize environment: - LANG=C.UTF-8 - TERM=xterm - DEBUG=true links: - mysql:mysql ports: - "8080:8080" - "5005:5005" volumes: - .:/hello-dockerize mysql: build: ./dockerize/mysql env_file: ./dockerize/dev.env ports: - "3306:3306" volumes: - /var/lib/mysql:/var/lib/mysql
啟動容器:
$ docker-compose up
查看容器
$ docker-compse ps ###### Name Command State Ports --------------------------------------------------------------------------------------------------------------- hellodockerize_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp hellodockerize_web_run_1 bash Up 0.0.0.0:5005->5005/tcp, 0.0.0.0:8080->8080/tcp ######
執(zhí)行 migrate 命令:
root@6485a7a48988:/hello-dockerize# ./gradlew flywayClean flywayInit flywayMigrateCheck Migrate Result On Intellij IDEA
查看 User 表
原文鏈接
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/26760.html
摘要:容器作為一類操作系統(tǒng)層面的虛擬化技術(shù),其目標(biāo)是在單一主機(jī)交付多套隔離性環(huán)境,容器共享同一套主機(jī)操作系統(tǒng)內(nèi)核。與其它容器平臺不同,引入了一整套與容器管理相關(guān)的生態(tài)系統(tǒng)。每個容器都是相互隔離的保證安全的平臺。 導(dǎo)讀:本文章對Docker技術(shù)進(jìn)行了介紹,闡述了Docker的技術(shù)發(fā)展歷程、容器與虛擬機(jī)的差異、Docker原理、特點、Docker三組件和Docker帶來的影響,為我們進(jìn)一步理解D...
摘要:有贊容器化方案我們的容器化方案基于和,下面介紹一下我們在各個方面遇到的問題以及解決方案。不過對于上線來說,需要整個運(yùn)維體系來適配容器化,比如監(jiān)控發(fā)布日志等等。 前言 容器化已經(jīng)成為一種趨勢,它可以解決很多運(yùn)維中的痛點,比如效率、成本、穩(wěn)定性等問題,而接入容器的過程中往往也會碰到很多問題和不便。在有贊最開始做容器化是為了快速交付開發(fā)測試環(huán)境,在容器化的過程中,我們碰到過容器技術(shù)、運(yùn)維體系...
摘要:八年時間,阿里集團(tuán)實現(xiàn)了內(nèi)部容器化鏡像化,經(jīng)歷了幾代演進(jìn)。容器技術(shù)在阿里的演進(jìn)過程伴隨著阿里技術(shù)架構(gòu)本身的演進(jìn)。 八年時間,阿里集團(tuán)實現(xiàn)了 100%內(nèi)部容器化鏡像化,經(jīng)歷了幾代演進(jìn)。本文將從最初的架構(gòu)開始,向大家介紹下阿里內(nèi)部的容器化演化過程。 PouchContainer 現(xiàn)在服務(wù)于阿里巴巴集團(tuán)和螞蟻金服集團(tuán)的絕大部分 BU, 包括交易&中間件,B2B/CBU/ICBU,搜索廣告數(shù)據(jù)...
前言 以Docker為代表的容器技術(shù)縮短了企業(yè)應(yīng)用從開發(fā)、構(gòu)建到發(fā)布、運(yùn)行的整個生命周期。Gartner推測到2022年將會有75%的全球化企業(yè)將在生產(chǎn)中使用容器化的應(yīng)用(當(dāng)前約為30%)。由于Docker往往難以獨(dú)立支撐起大規(guī)模容器化部署,因此誕生了Kubernetes等容器編排工具,解決了大規(guī)模容器的組織和管理難題。 但事實上,Kubernetes的使用體系還是非常復(fù)雜的,對于企業(yè)的開...
摘要:幫助科盾實現(xiàn)了業(yè)務(wù)的快速回滾和橫向擴(kuò)展。后續(xù),科盾計劃引入集群,并將更多數(shù)據(jù)處理鏈等上的服務(wù)遷移至。前言 以Docker為代表的容器技術(shù)縮短了企業(yè)應(yīng)用從開發(fā)、構(gòu)建到發(fā)布、運(yùn)行的整個生命周期。Gartner推測到2022年將會有75%的全球化企業(yè)將在生產(chǎn)中使用容器化的應(yīng)用(當(dāng)前約為30%)。由于Docker往往難以獨(dú)立支撐起大規(guī)模容器化部署,因此誕生了Kubernetes等容器編排工具,解決...
閱讀 1772·2021-11-18 13:20
閱讀 1163·2021-10-11 10:59
閱讀 2995·2021-08-24 10:01
閱讀 3509·2019-08-29 14:21
閱讀 3359·2019-08-29 14:15
閱讀 3527·2019-08-26 12:23
閱讀 3349·2019-08-26 11:46
閱讀 3355·2019-08-26 11:35