Dockerfile练习
实验一:要求使用centos7基础镜像,搭建httpd+sshd+php的镜像,实现httpd与sshd服务能够正常访问
创建存放dockerfile的目录
mkdir -p /opt/kk/ vim /opt/kk/dockerfile # Centos-sshd-httpd FROM centos:7 RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && yum clean all && yum makecache && yum -y install httpd openssh* php php-mysql RUN mkdir /var/run/sshd && echo "UseDNS no" >>/etc/ssh/sshd_config && sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd && echo "123456"|passwd --stdin root && /usr/bin/ssh-keygen -A ADD ./init.sh / VOLUME ["/var/www/html"] EXPOSE 22 EXPOSE 80 ENTRYPOINT ["/bin/bash","/init.sh"]
写一个init.sh的多服务启动脚本
#!/bin/bash
/usr/sbin/httpd
/usr/sbin/sshd -D
使用docker制作镜像
[root@kk kk]# docker build -t "kk/cen7_sshd_httpd:v1" .
启动镜像容器
[root@kk kk]# docker container run -d --name="cen7_sshd_httpd" --restart=always -p 220:22 -p 800:80 -v /opt/vol/html/:/var/www/html/ 5024f8ae8a2d
查看容器状态
[root@kk kk]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ee0952f8d9c8 5024f8ae8a2d "/bin/bash /init.sh" 6 minutes ago Up 6 minutes 0.0.0.0:220->22/tcp, 0.0.0.0:800->80/tcp cen7_sshd_httpd
进行服务测试
2.应用容器化练习
所有应用镜像都是使用centos基础镜像写dockerfile制作
容器1:httpd+php(页面展示数据查询):容器数量2
创建相关目录
mkdir ~/httpd
cd ~/httpd
vim dockerfile
# Centos7_HTTPD_PHP FROM centos:7 RUN yum -y install httpd php php-mysql ADD index.php /var/www/html VOLUME /var/www/html ENTRYPOINT ["/usr/sbin/httpd","-D","FOREGROUND"]
vim index.php
<!DOCTYPE HTML> <html> <head> <title>小泊随記-留言板</title> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> <meta name="keywords" content="小泊随記,漂小泊,卞荣成,小泊随记,漂小泊轻松学前端,piaoxiaobo,xiaobosuiji,随記,随记,itsolotime," /> <meta name="description" content="因为心无所恃,所以才随遇而安" /> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <link rel="apple-touch-icon" sizes="180x180" href="static/images/apple-touch-icon.png" /> <link rel="icon" type="image/png" sizes="32x32" href="static/images/favicon-16x16.png" /> <link rel="icon" type="image/png" sizes="16x16" href="static/images/favicon-32x32.png" /> <style type="text/css"> table{ border: 1px solid black; border-color:#F06; padding:10px; border-collapse:collapse; } table tr th{ border: 1px solid black; border-color:#F06; padding:10px; border-collapse:collapse; } table tr td{ border: 1px solid black; border-color:#F06; padding:10px; border-collapse:collapse; } </style> </head> <body> <table> <caption>消息列表</caption> <tr><th>编号</th><th>姓名</th><th>邮箱</th><th>留言</th></tr> <?php header("Content-Type:text/html;charset=utf-8");//设置页面字符编码 // 第一步,连接数据库 $conn = mysqli_connect('172.17.0.5','kk','123'); // 第二步,选择指定的数据库,设置字符集 mysqli_select_db($conn,"message"); mysqli_query($conn,'SET NAMES UTF8'); // 显示数据 $query = 'SELECT * FROM kk'; $result = mysqli_query($conn,$query); // 把结果集转换成数组赋值给$row,如果有数据为真 while(!!$row = mysqli_fetch_array($result)){ echo"<tr><td>".$row["id"]."</td><td>".$row["name"]."</td><td>".$row["mailbox"]."</td><td>".$row["dream"]."</td><tr>"; } mysqli_close($conn); ?> </table> </body>
制作镜像
docker build -t "httpd:v1" .
制作容器
docker container run -d --name="httpd01" --restart=always -v /opt/vol/html:/var/www/html httpd:v1
docker container run -d --name="httpd02" --restart=always -v /opt/vol/html:/var/www/html httpd:v1
容器2:mysql(存放页面查询的数据,数据持久化):容器数量:1
mdkir ~/mariadb
cd ~/,mariadb
vim dockerfile
# CentOS7_MariaDB FROM centos:7 ADD mariadb.repo /etc/yum.repos.d/ RUN yum -y install MariaDB-server ADD init.sh / VOLUME /var/lib/mysql CMD ["/bin/bash","/init.sh"]
vim init.sh
#!/bin/bash
cp /usr/share/mysql/mysql.server /etc/init.d/mysql.mysql
mysql_install_db --user=mysql
sleep 3
chown -R mysql.mysql /var/lib/mysql
/etc/init.d/mysql.server start
sleep 3
mysql -e "grant all on *.* to kk@'%' identified by '123';grant all on *.* to kk@'localhost' identified by '123';"
mysql -ukk -p123 -e "create database message charset utf8mb4;"
mysql -ukk -p123 -e "use message;create table kk( id int auto_increment not null,name varchar(10) not null,mailbox varchar(20) no null,dream varchar(20) no null,primary key(id) );inset into kk values('1','hewenfu','30772818@qq.com','haha');"
tail -f /var/lib/mysql/`hostname
`.err
制作镜像
docker build -t "mariadb:v1" .
制作容器
docker container run -d --name="mariadb01" -v /opt/vol/mysql:/var/lib/mysql --restart=always mariadb:v1
容器3:nginx(对容器1实现负载均衡):容器数量:1
mkdir ~/nginx
cd ~/nginx
vin dockerfile
# CentOS7_Nginx FROM centos:7 ADD nginx.repo /etc/yum.repos.d/ RUN yum -y install nginx ADD nginx.conf /etc/nginx/conf.d ADD init.sh / EXPOSE 80 ENTRYPOINT ["/bin/bash","/init.sh"]
vim nginx.conf
upstream httpd { server httpd01:80; server httpd02:80; } server { listen 80; server_name 192.168.1.3; location / { proxy_pass http://httpd; } }
vim nginx.repo
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
vim init.sh
#!/bin/bash nginx -g "daemon off;"
创建镜像
docker build -t "nginx:v1" .
创建容器
docker container run -d --name="nginx01" -p 809:80 --link=httpd01 --link=httpd02 --restart=always nginx:v1
实现访问nginx容器地址可负载到httpd容器,httpd容器从mysql容器中取数据。
容器4:zookeeper镜像制作
Dockerfile编写
FROM centos:7 WORKDIR /download WORKDIR /data/zookeeper/zkdata ADD ./apache-zookeeper-3.5.9-bin.tar.gz /download ADD ./jdk-8u221-linux-x64.tar.gz /download RUN mv /download/apache-zookeeper-3.5.9-bin /download/zookeeper \ && echo "1" > /data/zookeeper/zkdata/myid ADD ./zoo.cfg /download/zookeeper/conf/ ENV JAVA_HOME /download/jdk1.8.0_221 ENV RE_HOME /download/jdk1.8.0_221/jre ENV CLASS_PATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib ENV PATH $PATH:$JAVA_HOME/bin:$JRE_HOME/bin ENV zookeeper_home /download/zookeeper EXPOSE 2181 2888 3888 ENTRYPOINT ["/download/zookeeper/bin/zkServer.sh"] CMD ["start-foreground"]
zoo.cfg配置文件
tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/data/zookeeper/zkdata # the port at which the clients will connect clientPort=2181
镜像制作
docker images build -t "zookeeper:3.5.9" .
启动容器
docker container run -d --name zookeeper -p 2182:2182 zookeeper:3.5.9
容器5:kafka镜像制作
Dockerfile编写
FROM centos-jre-gdal:0.1 WORKDIR /download ADD ./kafka_2.12-2.5.0.tgz /download RUN mv /download/kafka_2.12-2.5.0 /download/kafka ENV KAFKA_ZOOKEEPER_CONNECT zoo1:2181 ENV KAFKA_ADVERTISED_HOST_NAME localhost ADD ./run.sh /download EXPOSE 9092 ENTRYPOINT [ "sh", "-c", "/download/run.sh" ]
run.sh编写
#!/bin/bash sed -i 's%zookeeper.connect=.*$%zookeeper.connect=zoo1:2181%g' /download/kafka/config/server.properties /download/kafka/bin/kafka-server-start.sh /download/kafka/config/server.properties
镜像制作
docker images build -t "kafka:2.5.0" .
启动容器
docker container run -d --name kafka -p 9092:9092 --link zookeeper kafka:2.5.0
继续阅读

我的微信
这是我的微信扫一扫
评论