docker3

1、使用dockerfile构建wordpress讲解

重点:每次的RUN都会产生一个新的容器,因此在构建dockerfile的时候一定要注意,一些命令要怎么写:例如数据库登录问题

 

[root@docker01 wordpress]# cat dockerfile 
FROM centos:7
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum install nginx mariadb-server php-fpm php-mysql -y
RUN mysql_install_db --user=mysql --defaults-file=/etc/my.cnf
RUN tmp=`nohup mysqld_safe --defaults-file=/etc/my.cnf &` && sleep 5 && \
 mysql -e "create database wordpress;" && \
 mysql -e "grant all on wordpress.* to wordpress@localhost identified by '123456';"
ADD www.conf /etc/php-fpm.d/www.conf 
ADD nginx.conf /etc/nginx/nginx.conf
RUN  mkdir /code
WORKDIR /code/
ADD wordpress-4.9.4-zh_CN.zip .
RUN yum install unzip -y
RUN  unzip wordpress-4.9.4-zh_CN.zip 
RUN  mv wordpress/* .
RUN  chown -R nginx:nginx .
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]

2、docker的分层镜像

docker镜像是有层次的,最底层是系统内核、也就是宿主机内核,比如centos、debian等操作系统为基础构建的,这个层是只读的。在这个层上面是可写层,比如我们在原镜像开启的容器上安装nginx,在制作成nginx镜像,nginx就是在可写层,也就是第二层。举一反三再安装ssh,就是第三层。他们之间是由依附关系的,比如nginx和ssh都要依附centos层,但是nginx依附centos,而ssh依附nginx再依附centos。

 

例子:

 

 

 

如果先导入wordpress,就是两层,再导入centos7,就只是导入了个id,因为wordpress需要复用centos7 centos7不用复用

如果先带入centos,就是一层,再导入wordpress,也是一层。因为centos本身就是一层,wordpres附用centos,本身镜像里面就有centos,所以centos那层就不用再走了,直接走配置那层了。

例子2:

 

(1)产生数据变化就是一层,图片中有11层,为什么这个这么多层呢?因为这个是dockerfile生成的所以run一下有变化就会产生层

(2)上面两层的原因是手动做镜像

 

3、dockerfile的优化

a: 使用体积小的linux镜像alpine
b:尽可能的清理无用的缓存文件(尽可能把多个RUN合并)

使用alpine,节省优化内存空间,传输快,一个轻量级的系统。

使用alpine这个系统去做镜像,alpine这个操作系统是因为docker火起来的,我们用centos系统为基础做了一个nginx镜像大小是将近600Mb,但是alpine制作出来的nginx的镜像才几兆。

dockerfile优化 docker镜像的每一层都是只保留变化的内容,变化的内容包括文件的属主和属组的变化

 

 

 

两个相同内容镜像优化后的对比

4、dockerfile的优化2

c:修改dockerfile的时候,尽可能把修改的内容放在最后
d:使用.dockerignore忽略构建docker镜像时,不需要的文件

 


    

 

 

 

 

 

 

 

5、容器之间的互联 容器之间的通讯

之前我们都是把整套服务构建成一个镜像,比如wordpress,里面有nginx+php+centos7+mysql,但是以后要是使用容器去做架构,mysql其实是可以单出来的。

容器和容器之间互联的问题就是互相不了解对方的IP地址,但是网络的是通的

 

 

 

 

 

 例子:容器互联搭建zabbxi

(1)上传镜像并docker load(清理一波容器)

(2)

 docker run --name mysql-server -it \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      -d mysql:5.7 \
      --character-set-server=utf8 --collation-server=utf8_bin
     
docker run --name zabbix-java-gateway -t \
      -d zabbix/zabbix-java-gateway:latest
    
docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --link mysql-server:mysql \
      --link zabbix-java-gateway:zabbix-java-gateway \
      -p 10051:10051 \
      -d zabbix/zabbix-server-mysql:latest
      
docker run --name zabbix-web-nginx-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      --link mysql-server:mysql \
      --link zabbix-server-mysql:zabbix-server \
      -p 80:80 \
      -d zabbix/zabbix-web-nginx-mysql:latest

 

6、docker-compose讲解和安装使用  (容器编排,批量管理工具)

yum install docker-compose -y(需要epel源) 利用这个工具可以让容器批量启动

docker-compose有三个版本v1 v2 v3 不同版本配置语法不同

 

 

 

 stop只会停容器不会删容器  restart 服务名字

version: '3'
services:
   mysql-server:
     image: mysql:5.7
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: root_pwd
       MYSQL_DATABASE: zabbix
       MYSQL_USER: zabbix
       MYSQL_PASSWORD: zabbix_pwd
     command: --character-set-server=utf8 --collation-server=utf8_bin
     
   zabbix-java-gateway:
     image: zabbix/zabbix-java-gateway:latest
     restart: always
     
   zabbix-server:
     depends_on:
       - mysql-server
     image: zabbix/zabbix-server-mysql:latest
     restart: always
     environment:
       DB_SERVER_HOST: mysql-server
       MYSQL_DATABASE: zabbix
       MYSQL_USER: zabbix
       MYSQL_PASSWORD: zabbix_pwd
       MYSQL_ROOT_PASSWORD: root_pwd
       ZBX_JAVAGATEWAY: zabbix-java-gateway
     ports:
       - "10051:10051"
       
   zabbix-web-nginx-mysql:
     depends_on:
       - zabbix-server
     image: zabbix/zabbix-web-nginx-mysql:latest
     ports:
       - "80:80"
     restart: always
     environment:
       DB_SERVER_HOST: mysql-server
       MYSQL_DATABASE: zabbix
       MYSQL_USER: zabbix
       MYSQL_PASSWORD: zabbix_pwd
       MYSQL_ROOT_PASSWORD: root_pwd

 

7、游戏公司的人事架构

 

 

 

8、游戏服务端的架构

 

 

9、实战练习

服务端:内存4G+
安装docker,docker-compose,启动服务
yum install docker-ce docker-compose -y
tar xf fuck.tar.gz -C /usr/local/games/
cd /usr/local/games/fuck/
systemctl start docker
./start
netstat -lntup

修改游戏服务器列表信息中的ip地址
vi /usr/local/games/fuck/www/tianlong3D/conf/serverlist/serverlist.txt

客户端:
安装win-jdk 1.8
打开ApkIDE最新3.3.3少月增强版
反编译apk包
修改assets\config.properties文件8,13,14行
修改res\values\strings.xml文件9,10,17,18服务器地址
重新编译

充值元宝
http://IP:81/zt/gm.php
gmcode默认123456

(1)新建一台桥接的虚拟机,安装doclek docker-compose

(2)

wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce -y
​wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install docker-compose -y
systemctl enable docker
systemctl start docker

 

 

 

 

 

 

 

 

 

 

 

 

 

 

修改文件 根据文档指示

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
posted @ 2020-05-31 13:27  大轩123  阅读(183)  评论(0)    收藏  举报