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服務,以下:
看到以上頁面,則表示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端口):
固然也能夠進入容器進行修改網頁文件來自定義內容
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