Docker 構建容器Tomcat+Nginx+MySQL

1、構建Tomcat
Tomcat是一個免費開源的輕量級web服務器,在中小型企業和併發量不高的場合廣泛使用,是開發和調試JSP程序的首選。下面使用Dockerfile文件的方式來建立帶有Tomcat服務的docker鏡像。
下載JDK源碼包
(提取碼:0e3q)並放置Linux宿主機的Tomcat工做目錄。
java

[root@docker01 ~]# docker pull centos:7
[root@docker01 ~]# mkdir tomcat            # 建立Tomcat工做目錄
[root@docker01 ~]# cd tomcat/
[root@docker01 tomcat]# ls               # 下載JDK源碼包並上傳到該工做目錄
jdk-8u211-linux-x64.tar.gz
[root@docker01 tomcat]# vim Dockerfile   # 編輯dockerfile 文件

FROM centos:7            # 基礎鏡像centos:7
MAINTAINER The centos project            # 維護該鏡像的用戶信息,可不寫
ADD jdk-8u211-linux-x64.tar.gz /usr/local/                # 將本地的JDK文件上傳至容器
#如下是設置JDK環境變量
ENV JAVA_HOME /usr/local/jdk1.8.0_211
ENV JAVA_BIN /usr/local/jdk1.8.0_211/bin
ENV JRE_HOME /usr/local/jdk1.8.0_211/jre
ENV PATH $PATH:/usr/local/jdk1.8.0_211/bin:/usr/local/jdk1.8.0_211/jre/bin
ENV CLASSPATH /usr/local/jdk1.8.0_211/jre/bin:/usr/local/jdk1.8.0_211/lib:/usr/local/jdk1.8.0_211/jre/lib/charsets.jar
ADD apache-tomcat-8.5.35.tar.gz /usr/local           # 將本地文件上傳到容器(也能夠安裝wget 工具  而後RUN wget 從網上直接下載)
WORKDIR /usr/local/              # 進入該目錄
RUN mv apache-tomcat-8.5.35 /usr/local/tomcat
EXPOSE 8080              # 開啓8080端口
ADD run.sh /run.sh                 # 添加運行腳本
RUN chmod 755 /run.sh         # 賦予腳本權限
CMD ["/run.sh"]            # 運行腳本
[root@docker01 tomcat]# vim run.sh       # 編寫腳本內容
#!/bin/bash
/usr/local/tomcat/bin/startup.sh
tailf /run
[root@docker01 tomcat]# ls         # 肯定該工做目錄有以下文件
apache-tomcat-8.5.35.tar.gz  Dockerfile    jdk-8u211-linux-x64.tar.gz  run.sh
[root@docker01 tomcat]# docker build -t tomcat:zyz .            # 生成鏡像文件,注意!注意!注意!最後有個「.」 不要忽略,不然會報錯
Successfully built 3b0d4e57c9cf      # 出現這行提示信息,則表示建立成功
Successfully tagged tomcat:zyz
[root@docker01 tomcat]# docker run -d --name tomcat -p 8080:8080 tomcat:zyz                   # 運行剛剛建立的Tomcat容器,並指定容器的名字爲Tomcat,映射到宿主機的8080端口。
7fc935e10028b32cc420a8a5b8d5647e9dfa92332ee27d22a4078a1187086d77
[root@docker01 tomcat]# docker ps -a | grep tomcat       # 能夠看到運行正常
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
9e7bb83f6cd0        tomcat:zyz          "/run.sh"           5 minutes ago       Up 5 minutes        0.0.0.0:8080->8080/tcp   tomcat

客戶端訪問Linux宿主機的8080端口,測試是否可以訪問到Tomcat容器提供的web服務,以下:
Docker 構建容器Tomcat+Nginx+MySQL
看到以上頁面,則表示Tomcat容器構建成功。
簡單說一下Tomcat和apache的區別:它們都是Aache開源組織開發的用於處理HTTP服務的項目。二者都免費,也均可以做爲獨立的web服務器運行。Apache是C語言實現的,主要解析靜態文本,併發性高,側重於HTTP服務,Tomcat是java開發的一個符合JavaEES的JSP服務器,屬於Apache的擴展,主要用於解析JSP/Servlet,側重於Servlet引擎。mysql

2、構建Nginx容器
Nginx是一款輕量級的web服務器,也是一個優秀的反向代理服務器。Nginx服務佔用內存少,併發能力強,下面是構建Nginx容器的具體操做:linux

[root@docker02 ~]# mkdir nginx
[root@docker02 ~]# cd nginx/
[root@docker02 nginx]# vim Dockerfile
FROM centos:7            基礎鏡像
MAINTAINER the centos project         # 開發者信息
RUN yum -y install wget proc-devel net-tools gcc zlib zlib-devel make openssl-devel               # 安裝依賴包
RUN wget http://nginx.org/download/nginx-1.18.0.tar.gz
RUN tar zxf nginx-1.18.0.tar.gz
WORKDIR nginx-1.18.0           # 進入目錄
RUN ./configure --prefix=/usr/local/nginx && make && make install              # 編譯並安裝
EXPOSE 80            # 開啓容器的端口
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf             # 修改配置文件,以非daemon方式啓動
ADD run.sh /run.sh           # 上傳運行腳本
RUN chmod 775 /run.sh          # 賦予權限
CMD ["/run.sh"]         # 執行
[root@docker02 nginx]# vim run.sh 
#!/bin/bash
/usr/local/nginx/sbin/nginx
[root@docker02 nginx]# ls          # 肯定文件已準備好
Dockerfile  run.sh
[root@docker02 nginx]# docker build -t nginx:zyz .           # 仍是切記最後有個「.」
Successfully built 398c33862c6d
Successfully tagged nginx:zyz 
[root@docker02 nginx]# docker run -d --name nginx -P nginx:zyz            # -d表示持久化運行,-P表示將容器端口映射到宿主機 
509ce884117e46eb24110ed5e144ff721ca0a68ac0787b11d17871ad376fcfdc
[root@docker02 nginx]# docker ps -a           # 查看容器,其中3276九、32768就是容器映射到宿主機的端口
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                           NAMES
509ce884117e        nginx:zyz           "/run.sh"           4 seconds ago       Up 3 seconds        0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp   nginx

訪問容器進行測試,Nginx是否運行成功!以下(訪問宿主機的32769端口,就至關於訪問了容器的80端口)
Docker 構建容器Tomcat+Nginx+MySQL
固然也能夠進入容器進行修改網頁文件來自定義內容
3、構建MySQL容器
MySQL是當下最流行的關係型數據庫,所使用的SQL語言是用於訪問數據庫的最經常使用標準化語言,MySQL具備體積小、速度快、成本低的優點,是中小型企業首選的數據庫。
開始構建MySQL容器:nginx

[root@docker02 mysql]# docker pull centos:6       #下載centos 6做爲基礎鏡像 
[root@docker02 ~]# mkdir mysql      # 建立工做目錄
[root@docker02 ~]# cd mysql/
[root@docker02 mysql]# vim Dockerfile 

FROM centos:6         # 6爲基礎鏡像
MAINTAINER the centos project-mysql
RUN yum -y install mysql mysql-server
RUN /etc/init.d/mysqld start && \
mysql -e "grant all privileges on *.* to 'root'@'%' identified by '123456';"&&\
mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by '123456';"
EXPOSE 3306
CMD ["mysqld_safe"]
[root@docker02 mysql]# docker build -t mysql:zyz .          # 生成鏡像
Successfully built 2dc81fb9f463
Successfully tagged mysql:zyz
[root@docker02 mysql]# docker run -d --name mysql -P mysql:zyz 
9ac6f150fc6ed52e7847e52ecc3f66653a3d383f5dbe99a7afc9db3df8c8b543
[root@docker02 mysql]# docker ps -a            # 確認容器處於運行狀態
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                           NAMES
9ac6f150fc6e        mysql:zyz           "mysqld_safe"       4 seconds ago       Up 4 seconds        0.0.0.0:32770->3306/tcp                         mysql
#對容器中的數據庫進行訪問測試,若沒法使用mysql命令,請自行執行「yum -y install mysql」進行安裝
[root@docker02 ~]# mysql -uroot -p123456 -h192.168.171.150 -P 32770
MySQL [(none)]> show databases;               #命令提示符發生變化,登陸到了容器中的數據庫
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)

4、構建MySQL容器(源碼編譯)
二進制就不用寫了,直接ADD複製到鏡像,而後運行下安裝腳本便可c++

[root@docker02 ~]# mkdir mysql      # 建立工做目錄
[root@docker02 ~]# cd mysql/
[root@docker02 mysql]# vim Dockerfile 
FROM centos:7
MAINTAINER the centos project-mysql
RUN yum -y install wget ncurses ncurses-devel bison cmake make gcc gcc-c++ openssl openssl-devel
RUN useradd -s /sbin/nologin mysql
RUN wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.31.tar.gz
RUN tar zxf mysql-boost-5.7.31.tar.gz
WORKDIR  mysql-5.7.31/
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
RUN chown -R mysql:mysql /usr/local/mysql/
RUN rm -rf /etc/my.cnf
ADD my.cnf /etc/
RUN chown mysql:mysql /etc/my.cnf
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
RUN /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
EXPOSE 3306
RUN echo -e "#!/bin/sh \nsystemctl enable mysqld" > /run.sh
RUN chmod 755 /run.sh
RUN sh /run.sh
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

[root@docker02 mysql]# docker build -t mysql:zyz .
[root@docker02 mysql]# docker run --name mysql -d -P --privileged mysql:zyz
10e18326b3e3e1df3f21087b9e4659dabe92364a2dee77fcb7ac2f14bdb0b7ee
[root@docker02 mysql]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                                           NAMES
10e18326b3e3        mysql:zyz           "init"                   5 seconds ago       Up 4 seconds                0.0.0.0:32771->3306/tcp                         mysql
[root@docker02 mysql]# docker exec -it mysql /bin/bash
[root@10e18326b3e3 mysql-5.7.31]# mysql  
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';
mysql> flush privileges;

在生產環境中通常不會將MySQL服務放在容器中運行,而是會單獨使用服務器部署提供服務,搭建高可用集羣web

相關文章
相關標籤/搜索