亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    基于Dockerfile構(gòu)建Nginx、Tomcat、MySQL鏡像(含包源)

    前言

    ?上篇文章講述了有關(guān)Dockerfile的理論,以及演示了通過(guò)其構(gòu)建的三個(gè)鏡像服務(wù)httpd、sshd以及systemd。本文將結(jié)合先前的shell編程與當(dāng)下的Dockerfile來(lái)給出基于Dockerfile構(gòu)建Nginx、Tomcat以及MySQL模板。

    • 揭開(kāi)Docker的面紗 – 基礎(chǔ)理論梳理和安裝流程演示  http://fxwbio.com/Linux/2020-04/163003.htm
    • Docker基礎(chǔ)命令詳解 – 鏡像及容器操作  http://fxwbio.com/Linux/2020-04/163005.htm
    • 深入理解Docker的硬件資源控制與驗(yàn)證  http://fxwbio.com/Linux/2020-04/163006.htm
    • Docker網(wǎng)絡(luò)模式與配置Docker自定義網(wǎng)絡(luò)(bridge模式)  http://fxwbio.com/Linux/2020-04/163007.htm
    • Docker構(gòu)建鏡像的三種方式(Dockerfile初步)  http://fxwbio.com/Linux/2020-04/163008.htm
    • 教你如何搭建Docker私有倉(cāng)庫(kù)  http://fxwbio.com/Linux/2020-04/163009.htm
    • 深入理解Docker數(shù)據(jù)管理與端口映射  http://fxwbio.com/Linux/2020-04/163010.htm
    • Dockerfile與Dockerfile實(shí)戰(zhàn)  http://fxwbio.com/Linux/2020-04/163011.htm

    ? 由于時(shí)間和篇幅問(wèn)題,本文將省略build的過(guò)程。其中Nginx的構(gòu)建將基于wget命令從網(wǎng)上下載,后兩者將使用本地已有的軟件包。

    ? 這樣的目的一方面是演示多種方式,以及對(duì)兩種方式的區(qū)別,另一方面則是效率問(wèn)題,從網(wǎng)上獲取一般收到影響較大(這個(gè)體會(huì)將在您build的時(shí)候感受出來(lái))。

    ? 好了,下面直接給出對(duì)應(yīng)的Dockerfile和相關(guān)文件吧。

    ?先給出軟件包鏈接:

    鏈接: https://pan.baidu.com/s/1teUc4kqzLH1kZS7Vu3znaQ

    關(guān)注Linux公社微信公眾號(hào)(linuxidc_com),(見(jiàn)http://fxwbio.com/Linux/2013-12/93755.htm),在Linux公社微信公眾號(hào)后臺(tái)發(fā)送發(fā)送“163012”即可獲得。

    基于Dockerfile的Nginx鏡像構(gòu)建

    目錄結(jié)構(gòu)

    [root@localhost nginx]# tree ./  ./  ├── Dockerfile  └── nginx.sh    0 directories, 2 files  

    Dockerfile以及其他文件

    #基于dockerfile構(gòu)建nginx鏡像 #設(shè)置基礎(chǔ)鏡像  FROM CentOS:7  #維護(hù)該鏡像的用戶信息  MAINTAINER lokott@123.com  #指令集 #更新及安裝相關(guān)工具  RUN yum update -y  RUN yum install -y wget lsof telnet net-tools gcc gcc-c++ make pcre pcre-devel zlib zlib-devel  #從官網(wǎng)上下載nginx軟件包源并解壓  RUN wget http://nginx.org/download/nginx-1.16.1.tar.gz  RUN tar zxf nginx-1.16.1.tar.gz  #創(chuàng)建nginx用戶  RUN useradd -M -s /sbin/nologin nginx  #指定后續(xù)RUN指令的工作目錄  WORKDIR nginx-1.16.1  #配置參數(shù)以及編譯nginx  RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module  RUN make && make install  #ENV PATH /usr/local/nginx/sbin:$PATH #端口設(shè)置  EXPOSE 80  EXPOSE 443  #以非daemon方式運(yùn)行  RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf  #切換工作目錄  WORKDIR /root/nginx  ADD nginx.sh /nginx.sh  RUN chmod 755 /nginx.sh  #啟動(dòng)容器執(zhí)行指令  CMD ["/nginx.sh"]  

    shell腳本文件

    [root@localhost nginx]# cat nginx.sh   #!/bin/bash  /usr/local/nginx/sbin/nginx  

    對(duì)比手工編譯的shell腳本是不是非常類似呢?其中需要注意的有兩點(diǎn):

    1、從網(wǎng)上下載需要安裝wget工具進(jìn)行軟件包下載并且需要執(zhí)行tar命令解壓,而本地有軟件包則會(huì)自動(dòng)解壓(看下面兩個(gè)服務(wù)構(gòu)建鏡像過(guò)程就可以理解了)

    2、nginx通過(guò)服務(wù)是需要關(guān)閉后臺(tái)運(yùn)行,否則一直會(huì)無(wú)法正常運(yùn)行容器

    構(gòu)建及運(yùn)行

    [root@localhost nginx]# docker build -t nginx:centos .  [root@localhost nginx]# docker ps -a  CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES  [root@localhost nginx]# docker run -d -P nginx:centos   3d4c431bf95feded1928268a4237768ca7ed2b362ef3cf582cab7e9d49cc4669  [root@localhost nginx]# docker ps -a  CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                           NAMES  3d4c431bf95f        nginx:centos        "/nginx.sh"         4 seconds ago       Up 3 seconds        0.0.0.0:32772->80/tcp, 0.0.0.0:32771->443/tcp   distracted_mclean  

    測(cè)試:瀏覽器訪問(wèn)ip:32772 此時(shí)不能訪問(wèn)32771,因?yàn)樯婕暗絪sl證書(shū)及其他服務(wù)

    基于Dockerfile構(gòu)建Nginx、Tomcat、MySQL鏡像(含包源)

    基于Dockerfile的Tomcat鏡像構(gòu)建

    目錄結(jié)構(gòu)

    [root@localhost tomcat]# tree .  .  ├── apache-tomcat-9.0.16.tar.gz  ├── Dockerfile  └── jdk-8u91-linux-x64.tar.gz    0 directories, 3 files

    Dockerfile文件

    FROM centos:7  MAINTAINER this is tomcat  ADD jdk-8u91-linux-x64.tar.gz /usr/local  WORKDIR /usr/local  RUN mv jdk1.8.0_91 /usr/local/Java  ENV JAVA_HOME /usr/local/java  ENV JAVA_BIN /usr/local/java/bin  ENV JRE_HOME /usr/local/java/jre  ENV PATH $PATH:/usr/local/java/bin:/usr/local/java/jre/bin  ENV CLASSPATH /usr/local/java/jre/bin:/usr/local/java/lib:/usr/local/java/jre/lib/charsets.jar  ADD apache-tomcat-9.0.16.tar.gz /usr/local  WORKDIR /usr/local  RUN mv apache-tomcat-9.0.16 /usr/local/tomcat8  EXPOSE 8080  ENTRYPOINT ["/usr/local/tomcat8/bin/catalina.sh","run"]  

    構(gòu)建及運(yùn)行

    [root@localhost tomcat]# docker build -t tomcat:centos .  [root@localhost tomcat]# docker run -d -P tomcat:centos   c8a2e5524af1bf74dd1677d85f45db8e7d4715f97acac1298227cf0fc1092f46  [root@localhost tomcat]# docker ps -a  CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                           NAMES  c8a2e5524af1        tomcat:centos       "/usr/local/tomcat8/…"   5 seconds ago       Up 4 seconds        0.0.0.0:32773->8080/tcp                         xenodochial_yalow  

    測(cè)試

    基于Dockerfile構(gòu)建Nginx、Tomcat、MySQL鏡像(含包源)

    基于Dockerfile的MySQL鏡像構(gòu)建

    目錄結(jié)構(gòu)

    [root@localhost mysql5.7]# tree .  .  ├── Dockerfile  ├── my.cnf  └── mysql-boost-5.7.20.tar.gz    0 directories, 3 files  

    Dockerfile及其他文件

    [root@localhost mysql5.7]# cat Dockerfile

      #基于基礎(chǔ)鏡像  FROM centos:7  #維護(hù)該鏡像的用戶信息  MAINTAINER lokott@123.com  #指令集  #下載相關(guān)工具  RUN yum -y install   ncurses   ncurses-devel   bison   cmake   make   gcc   gcc-c++  #創(chuàng)建mysql用戶  RUN useradd -s /sbin/nologin mysql  #復(fù)制軟件包到指定目錄(將會(huì)自動(dòng)解壓)  ADD mysql-boost-5.7.20.tar.gz /usr/local/src  #指定工作目錄  WORKDIR /usr/local/src/mysql-5.7.20/  #cmake配置及編譯安裝  RUN cmake   -DCMAKE_INSTALL_PREFIX=/usr/local/mysql   -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock   -DSYSCONFDIR=/etc   -DSYSTEMD_PID_DIR=/usr/local/mysql   -DDEFAULT_CHARSET=utf8   -DDEFAULT_COLLATION=utf8_general_ci   -DWITH_INNOBASE_STORAGE_ENGINE=1   -DWITH_ARCHIVE_STORAGE_ENGINE=1   -DWITH_BLACKHOLE_STORAGE_ENGINE=1   -DWITH_PERFSCHEMA_STORAGE_ENGINE=1   -DMYSQL_DATADIR=/usr/local/mysql/data   -DWITH_BOOST=boost   -DWITH_SYSTEMD=1 && make && make install  #更改mysql目錄屬主屬組  RUN chown -R mysql:mysql /usr/local/mysql/  #刪除默認(rèn)安裝的my.cnf文件  RUN rm -rf /etc/my.cnf  #復(fù)制一份my.cnf到etc目錄下  ADD my.cnf /etc  #更改該文件權(quán)限  RUN chown mysql:mysql /etc/my.cnf  #設(shè)置環(huán)境變量,命令目錄及庫(kù)文件目錄  ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH  #指定工作目錄  WORKDIR /usr/local/mysql/  #初始化設(shè)置  RUN bin/mysqld   --initialize-insecure   --user=mysql   --basedir=/usr/local/mysql   --datadir=/usr/local/mysql/data  #優(yōu)化啟動(dòng)方式  RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/  EXPOSE 3306  #直接設(shè)置運(yùn)行啟動(dòng)腳本  RUN echo -e "#!/bin/sh nsystemctl enable mysqld" > /run.sh  RUN chmod 755 /run.sh  RUN sh /run.sh  #啟動(dòng)容器時(shí)執(zhí)行  CMD ["init"]  

    my.cnf文件

    [client]  port = 3306  default-character-set=utf8  socket = /usr/local/mysql/mysql.sock    [mysql]  port = 3306  default-character-set=utf8  socket = /usr/local/mysql/mysql.sock    [mysqld]  user = mysql  basedir = /usr/local/mysql  datadir = /usr/local/mysql/data  port = 3306  character_set_server=utf8  pid-file = /usr/local/mysql/mysqld.pid  socket = /usr/local/mysql/mysql.sock  server-id = 1    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES  

    構(gòu)建及運(yùn)行

    [root@localhost mysql5.7]# docker build -t mysql:latest .  ...//友情提示MySQL5.7時(shí)間比較長(zhǎng)  [root@localhost mysql5.7]# docker run --name mysql_new -d -P --privileged mysql:latest   e9c9f93766d149a3387aed4cb5e04425269a884fccf06256b087d00e4c262222  [root@localhost mysql5.7]# docker ps -a  CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                           NAMES  e9c9f93766d1        mysql:latest        "init"                   6 seconds ago       Up 5 seconds        0.0.0.0:32774->3306/tcp  

    進(jìn)入MySQL服務(wù)的容器中進(jìn)行提權(quán)操作

    [root@localhost mysql5.7]# docker exec -it mysql_new /bin/bash  [root@e9c9f93766d1 mysql]# mysql  Welcome to the MySQL monitor.  Commands end with ; or g.  Your MySQL connection id is 3  Server version: 5.7.20 Source distribution    Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.    Oracle is a registered trademark of Oracle Corporation and/or its  affiliates. Other names may be trademarks of their respective  owners.    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.    mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';  Query OK, 0 rows affected, 1 warning (0.00 sec)    mysql>  flush privileges;  Query OK, 0 rows affected (0.01 sec)    mysql> exit  Bye  [root@e9c9f93766d1 mysql]# exit  exit  

    宿主機(jī)系統(tǒng)安裝mariadb服務(wù)來(lái)測(cè)試

    [root@localhost mysql5.7]# yum install mariadb -y  [root@localhost mysql5.7]# mysql -h 20.0.0.149 -P 32774 -uroot -p123456  Welcome to the MariaDB monitor.  Commands end with ; or g.  Your MySQL connection id is 4  Server version: 5.7.20 Source distribution    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.    MySQL [(none)]> show databases;  +--------------------+  | Database           |  +--------------------+  | information_schema |  | mysql              |  | performance_schema |  | sys                |  +--------------------+  4 rows in set (0.01 sec)  #創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),退出后再次然后進(jìn)入容器查看  MySQL [(none)]> create database mydb;  Query OK, 1 row affected (0.00 sec)    MySQL [(none)]> exit  Bye    [root@localhost mysql5.7]# docker exec -it mysql_new /bin/bash  [root@e9c9f93766d1 mysql]# mysql  Welcome to the MySQL monitor.  Commands end with ; or g.  Your MySQL connection id is 5  Server version: 5.7.20 Source distribution    Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.    Oracle is a registered trademark of Oracle Corporation and/or its  affiliates. Other names may be trademarks of their respective  owners.    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.    mysql> show databases;  +--------------------+  | Database           |  +--------------------+  | information_schema |  | mydb               |  | mysql              |  | performance_schema |  | sys                |  +--------------------+  5 rows in set (0.00 sec)    mysql> exit  Bye  [root@e9c9f93766d1 mysql]# exit  exit  [root@localhost mysql5.7]#   

    小結(jié)

    基于Dockerfile構(gòu)建這三個(gè)服務(wù)的鏡像案例就說(shuō)到這里,當(dāng)然在工程中一般不會(huì)將MySQL服務(wù)放在容器中運(yùn)行,而是會(huì)單獨(dú)使用服務(wù)器部署提供服務(wù)(搭建高可用集群架構(gòu)),本文主要是提供基于Dockerfile構(gòu)建編寫(xiě)這些服務(wù)的案例。

    需要注意兩點(diǎn):在Dockerfile中什么時(shí)候使用tar命令;權(quán)限問(wèn)題

    謝謝閱讀!

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)