容器编排技术
容器编排技术
1.1实战案例——容器化部署基础服务
1.1.1 案例目标
(1)了解Redis服务的容器化部署。
(2)了解ZooKeeper服务的容器化部署。
(3)了解Kafka服务的容器化部署。
1.1.2 案例分析
1.规划节点
节点规划,见表1-1-1。
表1-1-1节点规划
IP |
主机名 |
节点 |
192.168.127.131 |
Docker |
docker-compose节点 |
2.基础准备
Docker和Docker Compose已安装完成。
1.1.3 案例实施
1.Redis容器化部署
(1)编写Dockerfile
准备:CRT上传gpmall.tar,解压出gpmall-single(在这个gpmall-single目录下进行)
新建redis文件夹:
#cd gpmall-single
# mkdir redis
# cp -rfv gpmall.tar redis/
# cd redis/
编写yum文件
# vi local.repo
[gpmall]
name=gpmall
baseurl=file:///opt/gpmall
gpgcheck=0
enabled=1
编写Dockerfile文件:
# vi Dockerfile
FROM centos:centos7.5.1804
MAINTAINER Guo
# 配置yum源
ADD gpmall.tar /opt
RUN rm -rfv /etc/yum.repos.d/*
ADD local.repo /etc/yum.repos.d/
#安装Redis
RUN yum -y install redis
# 开放端口
EXPOSE 6379
#安装清理缓存文件
RUN yum clean all
#修改绑定IP地址
RUN sed -i -e 's@bind 127.0.0.1@bind 0.0.0.0@g' /etc/redis.conf
#关闭保护模式
RUN sed -i -e 's@protected-mode yes@protected-mode no@g' /etc/redis.conf
#启动
ENTRYPOINT [ "/usr/bin/redis-server","/etc/redis.conf"]
CMD []
(2)构建镜像
构建镜像gpmall-redis:v1.0:
# docker build -t gpmall-redis:v1.0 .
Sending build context to Docker daemon 205.8MB
Step 1/12 : FROM centos:centos7.5.1804
---> cf49811e3cdb
Step 2/12 : MAINTAINER Guo
---> Using cache
---> b4d633dadd5e
Step 3/12 : ADD gpmall.tar /opt
---> Using cache
---> b58dec382d84
Step 4/12 : RUN rm -rfv /etc/yum.repos.d/*
---> Using cache
---> 8e2aca1a0f20
Step 5/12 : ADD local.repo /etc/yum.repos.d/
---> Using cache
---> f79ec9dd533a
Step 6/12 : RUN yum -y install redis
---> Using cache
---> be0ed0909213
Step 7/12 : EXPOSE 6379
---> Using cache
---> d2c6b350662a
Step 8/12 : RUN yum clean all
---> Using cache
---> cd615f0564cb
Step 9/12 : RUN sed -i -e 's@bind 127.0.0.1@bind 0.0.0.0@g' /etc/redis.conf
---> Using cache
---> 0a53db67053a
Step 10/12 : RUN sed -i -e 's@protected-mode yes@protected-mode no@g' /etc/redis.conf
---> Using cache
---> c631d6189382
Step 11/12 : ENTRYPOINT [ "/usr/bin/redis-server","/etc/redis.conf"]
---> Using cache
---> 20dda0bfe10a
Step 12/12 : CMD []
---> Using cache
---> 2231cea1ba1f
Successfully built 2231cea1ba1f
Successfully tagged gpmall-redis:v1.0
查看镜像列表:
[root@docker gpmall-single]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gpmall-redis v1.0 5c7283b0515c 6 minutes ago 465MB
测试Redis:
[root@docker gpmall-single]# docker run -d --name=redis -p6379:6379 gpmall-redis:v1.0
48fc5822ad02682fd1c868e268baac55b16d00609777d9e34e33463c8db565b2
[root@docker gpmall-single]# docker exec redis redis-server -v
Redis server v=6.0.8 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=611051ae86733216
[root@docker gpmall-single]# docker rm -f redis
redis
2.Mariadb容器化部署
(1)编写Dockerfile
新建redis文件夹:
# mkdir mariadb
# cp -rfv gpmall.tar mariadb/
# cd mariadb/
编写初始化脚本run.sh:
# vi run.sh
#!/bin/bash
mysql_install_db --user=mysql
(mysqld_safe &) | grep a
sleep 3s
ps -A
netstat -ntpl
sleep 3s
mysqladmin -u root password '123456'
sleep 3s
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456'"
sleep 3s
mysql -uroot -p123456 -e "create database gpmall;use gpmall;source /opt/gpmall.sql;"
sleep 3s
编写Dockerfile文件:(覆盖前面的Dockerfile文件)
# cat Dockerfile
FROM centos:centos7.5.1804
MAINTAINER Guo
# 配置yum源
ADD gpmall.tar /opt
RUN rm -rfv /etc/yum.repos.d/*
ADD local.repo /etc/yum.repos.d/
# 安装MariaDB
RUN yum install -y MariaDB-server expect net-tools
RUN yum clean all
COPY gpmall.sql /opt/
ADD run.sh /opt/
RUN chmod +x /opt/run.sh
RUN /opt/run.sh
ENV LC_ALL en_US.UTF-8
EXPOSE 3306
CMD ["mysqld_safe"]
(2)构建镜像
构建镜像:
# docker build -t gpmall-mariadb:v1.0 .
Sending build context to Docker daemon 205.9MB
Step 1/14 : FROM centos:centos7.5.1804
---> cf49811e3cdb
Step 2/14 : MAINTAINER Guo
---> Using cache
---> 5f61e17c7c79
Step 3/14 : ADD gpmall.tar /opt
---> Using cache
---> 09b937f9fb48
Step 4/14 : RUN rm -rfv /etc/yum.repos.d/*
---> Using cache
---> cb6f6a6638df
Step 5/14 : ADD local.repo /etc/yum.repos.d/
---> Using cache
---> 36e6b13dba63
Step 6/14 : RUN yum install -y MariaDB-server expect net-tools
---> Using cache
---> 598dde8e6b3b
Step 7/14 : RUN yum clean all
---> Using cache
---> c5e01221c6a1
Step 8/14 : COPY gpmall.sql /opt/
---> Using cache
---> 56de12688c38
Step 9/14 : ADD run.sh /opt/
---> Using cache
---> 836c8678be49
Step 10/14 : RUN chmod +x /opt/run.sh
---> Using cache
---> c72703657aba
Step 11/14 : RUN /opt/run.sh
---> Using cache
---> 37d28f376142
Step 12/14 : ENV LC_ALL en_US.UTF-8
---> Using cache
---> 88067c80269c
Step 13/14 : EXPOSE 3306
---> Using cache
---> ac4235abd4eb
Step 14/14 : CMD ["mysqld_safe"]
---> Using cache
---> 9af909433712
Successfully built 9af909433712
Successfully tagged gpmall-mariadb:v1.0
查看镜像列表:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gpmall-mariadb v1.0 2eb62863f75e 6 minutes ago 974MB
验证mariadb:(做这一步要把博客干掉)
# docker run -d -p 3306:3306 --name mariadb gpmall-mariadb:v1.0
fd88839814cf3c77b5c16922f235f60cb1c8fceb0c98499d1ba70139de59db61
# docker exec mariadb mysql -uroot -p123456 -e "use gpmall;show tables;"
Tables_in_gpmall
tb_address
tb_base
tb_comment
tb_comment_picture
tb_comment_reply
tb_dict
tb_express
tb_item
tb_item_cat
tb_item_desc
tb_log
tb_member
tb_order
tb_order_item
tb_order_shipping
tb_panel
tb_panel_content
tb_payment
tb_refund
tb_stock
tb_user_verify
3.ZooKeeper容器化部署
(1)编写Dockerfile
新建zookeeper文件夹:
# mkdir zookeeper/
# cd zookeeper/
# cp -rfv /root/gpmall-single/local.repo .
# cp -rfv /root/gpmall-single/gpmall.tar .
# cp -rfv /root/gpmall-single/zookeeper-3.4.14.tar.gz .
#cd ..
编写Dockerfile文件:(覆盖上一个Dockerfile文件)
# vi Dockerfile
FROM centos:centos7.5.1804
MAINTAINER Guo
# 配置yum源
ADD gpmall.tar /opt
RUN rm -rfv /etc/yum.repos.d/*
ADD local.repo /etc/yum.repos.d/
# 安装JDK
RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
ENV work_path /usr/local
WORKDIR $work_path
# 安装ZooKeeper
ADD zookeeper-3.4.14.tar.gz /usr/local
ENV ZOOKEEPER_HOME /usr/local/zookeeper-3.4.14
# PATH
ENV PATH $PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$ZOOKEEPER_HOME/bin
RUN cp $ZOOKEEPER_HOME/conf/zoo_sample.cfg $ZOOKEEPER_HOME/conf/zoo.cfg
EXPOSE 2181
# 设置开机自启
CMD $ZOOKEEPER_HOME/bin/zkServer.sh start-foreground
(2)构建镜像
构建镜像gpmall-zookeeper:v1.0:
# docker build -t gpmall-zookeeper:v1.0 .
Sending build context to Docker daemon 304.8MB
Step 1/14 : FROM centos:centos7.5.1804
---> cf49811e3cdb
Step 2/14 : MAINTAINER Guo
---> Using cache
---> b4d633dadd5e
Step 3/14 : ADD gpmall.tar /opt
---> Using cache
---> b58dec382d84
Step 4/14 : RUN rm -rfv /etc/yum.repos.d/*
---> Using cache
---> 8e2aca1a0f20
Step 5/14 : ADD local.repo /etc/yum.repos.d/
---> Using cache
---> f79ec9dd533a
Step 6/14 : RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
---> Using cache
---> 7066e3436719
Step 7/14 : ENV work_path /usr/local
---> Using cache
---> 65cbe0a184b1
Step 8/14 : WORKDIR $work_path
---> Using cache
---> e71dd5efd193
Step 9/14 : ADD zookeeper-3.4.14.tar.gz /usr/local
---> Using cache
---> d4b53ddce547
Step 10/14 : ENV ZOOKEEPER_HOME /usr/local/zookeeper-3.4.14
---> Using cache
---> 902b433b6e20
Step 11/14 : ENV PATH $PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$ZOOKEEPER_HOME/bin
---> Using cache
---> 351328ff20e6
Step 12/14 : RUN cp $ZOOKEEPER_HOME/conf/zoo_sample.cfg $ZOOKEEPER_HOME/conf/zoo.cfg
---> Using cache
---> 62b577d2067c
Step 13/14 : EXPOSE 2181
---> Using cache
---> bc62b94ed6dd
Step 14/14 : CMD $ZOOKEEPER_HOME/bin/zkServer.sh start-foreground
---> Using cache
---> 1791a788e338
Successfully built 1791a788e338
Successfully tagged gpmall-zookeeper:v1.0
查看镜像列表:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gpmall-zookeeper v1.0 1791a788e338 2 minutes ago 740MB
测试ZooKeeper:
# docker run -d --name=zookeeper -p2181:2181 gpmall-zookeeper:v1.0
726954e47bb0977452ef5c044016047ffcbf7e7892b8e1fc215b56c957da05b5
[root@docker gpmall-single]# docker exec -it zookeeper /bin/bash
[root@726954e47bb0 local]# cd zookeeper-3.4.14/bin/
[root@726954e47bb0 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: standalone
[root@726954e47bb0 bin]# exit
exit
# docker rm -f zookeeper
zookeeper
4.Kafka容器化部署
(1)编写Dockerfile
新建kafka文件夹:
# mkdir kafka
# cd kafka/
# cp -rfv /root/gpmall-single/local.repo .
# cp -rfv /root/gpmall-single/gpmall.tar .
# cp -rfv /root/gpmall-single/kafka_2.11-1.1.1.tgz .
编写Dockerfile文件:(覆盖)
# vi Dockerfile
FROM centos:centos7.5.1804
MAINTAINER Guo
# 配置yum源
ADD gpmall.tar /opt
RUN rm -rfv /etc/yum.repos.d/*
ADD local.repo /etc/yum.repos.d/
# 安装基础环境
RUN yum -y install vim lsof wget tar bzip2 unzip vim-enhanced passwd sudo yum-utils hostname net-tools rsync man git make automake cmake patch logrotate python-devel libpng-devel libjpeg-devel pwgen python-pip
# 安装JDK
RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
# 安装Kafka
RUN mkdir /opt/kafka
ADD kafka_2.11-1.1.1.tgz /opt/kafka
RUN sed -i 's/num.partitions.*$/num.partitions=3/g' /opt/kafka/kafka_2.11-1.1.1/config/server.properties
RUN echo "source /root/.bash_profile" > /opt/kafka/start.sh &&\
echo "cd /opt/kafka/kafka_2.11-1.1.1" >> /opt/kafka/start.sh &&\
echo "sed -i 's%zookeeper.connect=.*$%zookeeper.connect=zookeeper.mall:2181%g' /opt/kafka/kafka_2.11-1.1.1/config/server.properties" >> /opt/kafka/start.sh &&\
echo "bin/kafka-server-start.sh config/server.properties" >> /opt/kafka/start.sh &&\
chmod a+x /opt/kafka/start.sh
EXPOSE 9092
ENTRYPOINT ["sh", "/opt/kafka/start.sh"]
(2)构建镜像
构建镜像:
# docker build -t gpmall-kafka:v1.0 .
Sending build context to Docker daemon 511.3MB
Step 1/13 : FROM centos:centos7.5.1804
---> cf49811e3cdb
Step 2/13 : MAINTAINER Guo
---> Using cache
---> 5f61e17c7c79
Step 3/13 : ADD gpmall.tar /opt
---> Using cache
---> 09b937f9fb48
Step 4/13 : RUN rm -rfv /etc/yum.repos.d/*
---> Using cache
---> cb6f6a6638df
Step 5/13 : ADD local.repo /etc/yum.repos.d/
---> Using cache
---> 36e6b13dba63
Step 6/13 : RUN yum -y install vim lsof wget tar bzip2 unzip vim-enhanced passwd sudo yum-utils hostname net-tools rsync man git make automake cmake patch logrotate python-devel libpng-devel libjpeg-devel pwgen python-pip
---> Using cache
---> c652b8dd146b
Step 7/13 : RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
---> Using cache
---> 8647fb079562
Step 8/13 : RUN mkdir /opt/kafka
---> Using cache
---> 038f39230699
Step 9/13 : ADD kafka_2.11-1.1.1.tgz /opt/kafka
---> Using cache
---> eebeec9bed3e
Step 10/13 : RUN sed -i 's/num.partitions.*$/num.partitions=3/g' /opt/kafka/kafka_2.11-1.1.1/config/server.properties
---> Using cache
---> 7b9c1f5dfa31
Step 11/13 : RUN echo "source /root/.bash_profile" > /opt/kafka/start.sh && echo "cd /opt/kafka/kafka_2.11-1.1.1" >> /opt/kafka/start.sh && echo "sed -i 's%zookeeper.connect=.*$%zookeeper.connect=zookeeper.mall:2181%g' /opt/kafka/kafka_2.11-1.1.1/config/server.properties" >> /opt/kafka/start.sh && echo "bin/kafka-server-start.sh config/server.properties" >> /opt/kafka/start.sh && chmod a+x /opt/kafka/start.sh
---> Using cache
---> 4f2374802e5e
Step 12/13 : EXPOSE 9092
---> Using cache
---> df6efd678972
Step 13/13 : ENTRYPOINT ["sh", "/opt/kafka/start.sh"]
---> Using cache
---> 684851db6a59
Successfully built 684851db6a59
Successfully tagged gpmall-kafka:v1.0
查看镜像:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gpmall-kafka v1.0 96d05880f0cd 11 minutes ago 820MB
5.Elasticsearch容器化部署
(1)编写Dockerfile
新建elasticsearch文件夹:
# mkdir elasticsearch
# cd elasticsearch/
# cp -rfv /root/gpmall-single/local.repo .
# cp -rfv /root/gpmall-single/gpmall.tar .
#cd ..
编写脚本:
# vi entrypoint.sh
su admin -c "sh /opt/elasticsearch-5.5.3/bin/elasticsearch -d"
tail -f /opt/elasticsearch-5.5.3/logs/my-application.log
# chmod +x entrypoint.sh
编写Dockerfile:(覆盖)
# vi Dockerfile
FROM centos:centos7.5.1804
MAINTAINER guo
WORKDIR /
COPY entrypoint.sh entrypoint.sh
WORKDIR /opt
# 配置yum源
ADD gpmall.tar /opt
RUN rm -rfv /etc/yum.repos.d/*
ADD local.repo /etc/yum.repos.d/
RUN yum install -y net-tools java-1.8.0-openjdk java-1.8.0-openjdk-devel
# 安装Elasticsearch
COPY elasticsearch-5.5.3.tar.gz elasticsearch-5.5.3.tar.gz
RUN tar zxvf elasticsearch-5.5.3.tar.gz && rm -rf elasticsearch-5.5.3.tar.gz && groupadd admin && useradd admin -g admin && chown -R admin:admin .
RUN echo "network.host: 0.0.0.0" >>elasticsearch-5.5.3/config/elasticsearch.yml
RUN echo "http.port: 9200" >>elasticsearch-5.5.3/config/elasticsearch.yml
RUN echo "cluster.name: my-application" >>elasticsearch-5.5.3/config/elasticsearch.yml
RUN echo "http.cors.enabled: true" >>elasticsearch-5.5.3/config/elasticsearch.yml
RUN echo "http.cors.allow-origin: \"*\"" >>elasticsearch-5.5.3/config/elasticsearch.yml
RUN su admin -c "mkdir -p /opt/elasticsearch-5.5.3/logs && touch /opt/elasticsearch-5.5.3/logs/my-application.log"
RUN echo "vm.max_map_count=655360" >>/etc/sysctl.conf
VOLUME ["/opt"]
EXPOSE 9200
EXPOSE 9300
USER root
ENTRYPOINT ["/bin/sh","/entrypoint.sh"]
HEALTHCHECK --interval=5s --timeout=3s CMD status=`netstat -an | grep -wi listen | grep 9200 | wc -l`;if [ $status eq 1 ]; then echo "0"; else echo "1"; fi
(2)构建镜像
构建镜像gpmall-elasticsearch:v1.0:(要上传一个文件elasticsearch-5.5.3.tar.gz)
# docker build -t gpmall-elasticsearch:v1.0 .
Sending build context to Docker daemon 239.3MB
Step 1/24 : FROM centos:centos7.5.1804
---> cf49811e3cdb
Step 2/24 : MAINTAINER guo
---> Using cache
---> f0a929e2a057
Step 3/24 : WORKDIR /
---> Using cache
---> 1448fa2223c6
Step 4/24 : COPY entrypoint.sh entrypoint.sh
---> Using cache
---> 8d1a9dc792b5
Step 5/24 : WORKDIR /opt
---> Using cache
---> fa9e4c209047
Step 6/24 : ADD gpmall.tar /opt
---> Using cache
---> 0dc577a7055b
Step 7/24 : RUN rm -rfv /etc/yum.repos.d/*
---> Using cache
---> f0d2844c40f4
Step 8/24 : ADD local.repo /etc/yum.repos.d/
---> Using cache
---> a3de951573d1
Step 9/24 : RUN yum install -y net-tools java-1.8.0-openjdk java-1.8.0-openjdk-devel
---> Using cache
---> ac08dc528521
Step 10/24 : COPY elasticsearch-5.5.3.tar.gz elasticsearch-5.5.3.tar.gz
---> Using cache
---> f566ca029b78
Step 11/24 : RUN tar zxvf elasticsearch-5.5.3.tar.gz && rm -rf elasticsearch-5.5.3.tar.gz && groupadd admin && useradd admin -g admin && chown -R admin:admin .
---> Using cache
---> 6fc5cc5c7481
Step 12/24 : RUN echo "network.host: 0.0.0.0" >>elasticsearch-5.5.3/config/elasticsearch.yml
---> Using cache
---> c4181e326a11
Step 13/24 : RUN echo "http.port: 9200" >>elasticsearch-5.5.3/config/elasticsearch.yml
---> Using cache
---> fdfae127a02b
Step 14/24 : RUN echo "cluster.name: my-application" >>elasticsearch-5.5.3/config/elasticsearch.yml
---> Using cache
---> 91c1e3700dcc
Step 15/24 : RUN echo "http.cors.enabled: true" >>elasticsearch-5.5.3/config/elasticsearch.yml
---> Using cache
---> afff2c9da274
Step 16/24 : RUN echo "http.cors.allow-origin: \"*\"" >>elasticsearch-5.5.3/config/elasticsearch.yml
---> Using cache
---> a1288a70d0fc
Step 17/24 : RUN su admin -c "mkdir -p /opt/elasticsearch-5.5.3/logs && touch /opt/elasticsearch-5.5.3/logs/my-application.log"
---> Using cache
---> 65fe73d789bf
Step 18/24 : RUN echo "vm.max_map_count=655360" >>/etc/sysctl.conf
---> Using cache
---> ddeb78acb6b6
Step 19/24 : VOLUME ["/opt"]
---> Using cache
---> 72c54a78db78
Step 20/24 : EXPOSE 9200
---> Using cache
---> d468bb225c4c
Step 21/24 : EXPOSE 9300
---> Using cache
---> 251ef6b0e296
Step 22/24 : USER root
---> Using cache
---> 6fd94310b2a6
Step 23/24 : ENTRYPOINT ["/bin/sh","/entrypoint.sh"]
---> Using cache
---> 735305e3618b
Step 24/24 : HEALTHCHECK --interval=5s --timeout=3s CMD status=`netstat -an | grep -wi listen | grep 9200 | wc -l`;if [ $status eq 1 ]; then echo "0"; else echo "1"; fi
---> Using cache
---> eae45bc2124d
Successfully built eae45bc2124d
Successfully tagged gpmall-elasticsearch:v1.0
查看镜像列表:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gpmall-elasticsearch v1.0 21281043d762 About a minute ago 969MB
1.2实战案例——容器化部署应用系统
1.2.1 案例目标
(1)了解docker-compose.yaml文件的编写方法。
(2)了解容器编排中容器互联的方式。
(3)掌握GPMall商城的编排部署步骤和方法。
1.2.2 案例分析
1.规划节点
节点规划,见表1-2-1。
表1-2-1节点规划
IP |
主机名 |
节点 |
192.168.127.131 |
Docker |
docker-compose节点 |
2.基础准备
Docker和Docker Compose已安装完成,基础镜像已构建完毕。
1.2.3 案例实施
1.容器化部署前端服务
(1)编写Dockerfile
# mkdir nginx
# cd nginx/
# cp -rfv /root/gpmall-single/local.repo .
# cp -rfv /root/gpmall-single/gpmall.tar .
# 解压tar包:
[root@docker gpmall-single]# tar xf dist.tar
[root@docker gpmall-single]# mv dist.tar nginx/
[root@docker nginx]# mkdir dist
[root@docker nginx]# tar xf dist
tar: dist: Cannot read: Is a directory
tar: At beginning of tape, quitting now
tar: Error is not recoverable: exiting now
[root@docker nginx]# tar xf dist.tar
[root@docker nginx]# mv index.html dist
[root@docker nginx]# mv static dist
[root@docker nginx]# mv ../*.jar .
编写nginx配置文件default.conf:
# vi default.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /user {
proxy_pass http://127.0.0.1:8082;
}
location /shopping {
proxy_pass http://127.0.0.1:8081;
}
location /cashier {
proxy_pass http://127.0.0.1:8083;
}
#error_page 404 /404.html;
}
编写启动脚本:
# vi run.sh
#!/bin/bash
nohup java -jar /root/user-provider-0.0.1-SNAPSHOT.jar &
sleep 6
nohup java -jar /root/shopping-provider-0.0.1-SNAPSHOT.jar &
sleep 6
nohup java -jar /root/gpmall-shopping-0.0.1-SNAPSHOT.jar &
sleep 6
nohup java -jar /root/gpmall-user-0.0.1-SNAPSHOT.jar &
sleep 6
nginx -g "daemon off;"
编写Dockerfile:
# vi Dockerfile
FROM centos:centos7.5.1804
MAINTAINER Guo
# 配置yum源
ADD gpmall.tar /opt
RUN rm -rfv /etc/yum.repos.d/*
ADD local.repo /etc/yum.repos.d/
RUN yum install -y cmake pcre pcre-devel openssl openssl-devel zlib-devel gcc gcc-c++ net-tools
# 安装JDK
RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
RUN yum install nginx -y
RUN rm -rf /usr/share/nginx/html/*
ADD dist.tar /usr/share/nginx/html/
COPY default.conf /etc/nginx/conf.d/
COPY gpmall-shopping-0.0.1-SNAPSHOT.jar /root
COPY gpmall-user-0.0.1-SNAPSHOT.jar /root
COPY shopping-provider-0.0.1-SNAPSHOT.jar /root
COPY user-provider-0.0.1-SNAPSHOT.jar /root
COPY run.sh /root
RUN chmod +x /root/run.sh
EXPOSE 80 443
CMD nginx -g "daemon off;"
(2)构建镜像:
构建镜像:
# docker build -t gpmall-nginx:v1.0 .
Sending build context to Docker daemon 427.5MB
Step 1/19 : FROM centos:centos7.5.1804
---> cf49811e3cdb
Step 2/19 : MAINTAINER Guo
---> Using cache
---> 5f61e17c7c79
Step 3/19 : ADD gpmall.tar /opt
---> Using cache
---> 09b937f9fb48
Step 4/19 : RUN rm -rfv /etc/yum.repos.d/*
---> Using cache
---> cb6f6a6638df
Step 5/19 : ADD local.repo /etc/yum.repos.d/
---> Using cache
---> 36e6b13dba63
Step 6/19 : RUN yum install -y cmake pcre pcre-devel openssl openssl-devel zlib-devel gcc gcc-c++ net-tools
---> Using cache
---> c00902211337
Step 7/19 : RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
---> Using cache
---> 88d6e165e766
Step 8/19 : RUN yum install nginx -y
---> Using cache
---> 91942db57d74
Step 9/19 : RUN rm -rf /usr/share/nginx/html/*
---> Using cache
---> 693b0dbe7098
Step 10/19 : ADD dist.tar /usr/share/nginx/html/
---> Using cache
---> 8dc15014e890
Step 11/19 : COPY default.conf /etc/nginx/conf.d/
---> Using cache
---> f313df54ff54
Step 12/19 : COPY gpmall-shopping-0.0.1-SNAPSHOT.jar /root
---> Using cache
---> 126c2d22f161
Step 13/19 : COPY gpmall-user-0.0.1-SNAPSHOT.jar /root
---> Using cache
---> 62ed39964800
Step 14/19 : COPY shopping-provider-0.0.1-SNAPSHOT.jar /root
---> Using cache
---> b39a1ce2df7e
Step 15/19 : COPY user-provider-0.0.1-SNAPSHOT.jar /root
---> Using cache
---> a08765ce6247
Step 16/19 : COPY run.sh /root
---> Using cache
---> e88156f96022
Step 17/19 : RUN chmod +x /root/run.sh
---> Using cache
---> 9c15797c7512
Step 18/19 : EXPOSE 80 443
---> Using cache
---> 4efa9ffd81b6
Step 19/19 : CMD nginx -g "daemon off;"
---> Using cache
---> 7304e4b5d8a8
Successfully built 7304e4b5d8a8
Successfully tagged gpmall-nginx:v1.0
查看镜像列表:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gpmall-nginx v1.0 7304e4b5d8a8 13 minutes ago 1.06GB
2.编排部署GPMall
(1)编写docker-compose.yaml
新建文件夹:
[root@docker gpmall-single]# mkdir gpmall
[root@docker gpmall-single]# cd gpmall
编写docker-compose.yaml:(脚本在gpmall-single目录下的gpmall目录下)
[root@docker gpmall]# vi docker-compose.yaml
version: "3"
services:
mysql.mall:
container_name: mysql
image: gpmall-mariadb:v1.0
ports:
- "3306:3306"
restart: always
redis.mall:
depends_on:
- mysql.mall
container_name: redis
image: gpmall-redis:v1.0
ports:
- "6379:6379"
restart: always
zookeeper.mall:
depends_on:
- mysql.mall
- redis.mall
container_name: zookeeper
image: gpmall-zookeeper:v1.0
ports:
- "2181:2181"
restart: always
kafka.mall:
links:
- zookeeper.mall
depends_on:
- mysql.mall
- redis.mall
- zookeeper.mall
container_name: kafka
image: gpmall-kafka:v1.0
ports:
- "9092:9092"
restart: always
mall:
container_name: nginx
image: gpmall-nginx:v1.0
links:
- mysql.mall
- redis.mall
- zookeeper.mall
- kafka.mall
depends_on:
- mysql.mall
- redis.mall
- zookeeper.mall
- kafka.mall
ports:
- 80:80
- "443:443"
- "8081:8081"
- "8082:8082"
- "8083:8083"
privileged: true
command: /root/run.sh
(2)部署服务
启动服务:(如果报错就是有数据库了,把数据库干掉)
[root@docker gpmall]#docker-compose up -d
Creating network "gpmall_default" with the default driver
Creating mysql ... done
Creating redis ... done
Creating zookeeper ... done
Creating kafka ... done
Creating nginx ... done
查看:
[root@docker gpmall]# docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------
kafka sh /opt/kafka/start.sh Up 0.0.0.0:9092->9092/tcp
mysql mysqld_safe Up 0.0.0.0:3306->3306/tcp
nginx /root/run.sh Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp,
0.0.0.0:8081->8081/tcp, 0.0.0.0:8082->8082/tcp,
0.0.0.0:8083->8083/tcp
redis /usr/bin/redis-server /etc ... Up 0.0.0.0:6379->6379/tcp
zookeeper /bin/sh -c $ZOOKEEPER_HOME ... Up 0.0.0.0:2181->2181/tcp
在浏览器上通过http://192.168.127.131访问GPMall,如图所示:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!