美文网首页Kuberne...
云计算day05-Docker容器

云计算day05-Docker容器

作者: Linux丶晨星 | 来源:发表于2019-09-18 22:20 被阅读0次

    1. docker知识点回顾

    1:什么是容器?
    
    容器在隔离环境中运行的一个进程,隔离的环境,有自己的系统文件,ip地址,主机名,进程管理
    
    
    alpine  linux    iso 300M
    
    
    2:容器想对于虚拟化,它的优势?
    
    轻量级,启动快,性能高,损耗少
    
    
    3:docker是一种容器技术(namespace  资源隔离,cgroup  资源限制)
    
    docker软件的打包技术
    
    
    4:镜像常用命令:
    
    docker search:    在线搜索镜像,  官方的,start数多的
    
    docker  pull    拉取镜像,下载镜像   == docker   image  pull
    
    docker  push  推送镜像,上传镜像   == docker  image   push
    
    docker  images == docker  image  ls   查看镜像列表
    
    docker  image  rm   删除镜像   == docker   rmi
    
    docker  image  load    导入镜像  == docker  load,   docker  import导入镜像
    
    docker_nginx.tar.gz   怎么导入?
    
    docker  load  -i     docker_nginx.tar.gz 
    
    docker  image   save   导出镜像 == docker  save
    
    nginx  1.15怎么导出镜像
    
    docker  save  -o   docker_nginx.tar.gz   nginx:1.15
    
    docker  image  tag   给镜像打标签
    
    
    
    5:容器常用操作:
    
    docker   run   ==   docker  container   run
    
    docker  run    -it   -v   -p   -d  -P  --name  
    
    -it  分配一个交互式的终端
    
    -v   把宿主机目录或者卷挂载到容器中
    
    -p  端口映射
    
    -P  自动随机端口映射
    
    -d  后台运行
    
    容器的第一个进程必须夯住,   容器中运行业务:  即把业务服务启动,还要容器夯住(知识量的积累)  nginx  -g  'daemon off;'
    
    
    
    docker  start   == docker  container  start
    
    docker  stop  ==  docker  container  stop
    
    docker  restart  == docker  container  restart
    
    docker  kill   == docker  container  kill
    
    docker   ps  ==  docker  container  ls  == docker  container  ps
    
    docker   rm ==  docker  container  rm
    
    docker   attach  == docker  container  attach
    
    docker  exec   == docker  container  exec
    
    docker  cp   ==  docker  container  cp
    
    docker   inspect   
    
    docekr  logs
    
    
    6:端口映射的方式:
    
    docker  run   -d   -p   80:80   nginx:latest   代表,宿主机任意ip地址的80端口映射到容器80端口,默认使用tcp协议
    
    docker  run   -d   -p   10.0.0.13::80   nginx:latest     宿主机的10.0.0.13的随机端口映射到容器的80端口
    
    

    2. 手动将容器保存为镜像

    docker commit 容器id或者容器的名字   新的镜像名字[:版本号可选]
    
    1):基于容器制作镜像
    docker run -it centos:6.9 
    ######
    yum install httpd
    yum install openssh-server
    /etc/init.d/sshd start
    
    vi /init.sh
    #!/bin/bash
    /etc/init.d/httpd start
    /usr/sbin/sshd -D
    
    chmod +x /init.sh
    
    2)将容器提交为镜像
    docker commit lcx centos6-ssh-httpd:v1
    
    3)测试镜像功能是否可用
    
    手动制作的镜像,传输时间长
    镜像初始命令
    
    制作一个kodexplorer网盘docker镜像。nginx + php-fpm(httpd + php)
    
    

    2.1 手动制作容器步骤

    手动创建一个centos6的镜像并创建一台容器

    #创建一台基础容器,81端口映射到80端口 下载nginx
    
    docker run -it -p 81:80 centos:6.9 /bin/bash
    ifconfig
    
    #做端口映射,在容器中下载nginx
    
    echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    yum install nginx -y
    
    

    在宿主机上手动制作镜像
    使用创建的镜像镜像创建容器

    #查看创建的centos6.9基础容器的ID
    #创建镜像 centos6.9_nginx v1版本
    #删除当前所有容器
    #查看宿主机中的镜像,是否有刚刚创建的镜像
    #利用新建的镜像创建容器,将82端口映射到80端口
    
    docker ps -a
    docker container commit 84265c434784 centos6.9_nginx:v1
    docker container rm -f `docker ps -a -q`
    docker image ls
    docker run -d -p 82:80 centos6.9_nginx:v1 nginx -g 'daemon off;'
    

    访问10.0.0.11:82是否成功


    image

    3. 容器搭建_扫雷小游戏

    tomcat环境

    3.1 思路

    1:启动centos6 基础容器
    yum  install  tomcat
    
    2:在容器中书写脚本文件
    vi   /init.sh
    #!/bin/bash
    service  tomcat start
    tail   -f   /var/log/tomcat/catalina.out
    
    3:把容器提交为镜像
    docker  commit   4a8871d37633   centos6.9_tomcat7:v1
    
    4:启动容器
    docker  run  -d   -p 8081:8080    -v    /opt/saolei:/var/lib/tomcat/webapps/ROOT                      centos6.9_tomcat7:v1   /bin/bash    /init.sh
    
    image

    3.2 具体操作步骤

    扫雷软件包下载链接_提取码: 29tu

    生产环境中,一般把源代码直接封装到镜像中,一运行容器就可以用,就不用 < -v > 挂载了

    #启动centos6基础容器,下载tomcat
    docker run -it -p 80:80 centos:6.9 /bin/bash
    
    echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    yum install tomcat -y
    
    在容器中书写脚本
    vi /init.sh
    #!/bin/bash
    service tomcat start
    tail -f /var/log/tomcat/catalina.out
    
    #把容器提交为镜像
    docker commit <容器ID> centos6.9_tomcat7:v1
    
    #将扫雷代码放到/opt目录下
    [root@docker01 ~]# ll /opt/saolei/
    total 12
    drwxr-xr-x 2 root root  161 Dec  3  2009 imgs
    -rw-r--r-- 1 root root 9250 Dec  1  2009 saolei.jsp
    
    #启动容器,为了夯住,后面要执行之前写的脚本文件
    #如果宿主机有tomcat的环境记得修改端口映射或把宿主机的环境杀掉
    pkill -9 java
    docker run -d -p 8080:8080 -v /opt/saolei:/var/lib/tomcat/webapps/ROOT centos6.9_tomcat7:v1 /bin/bash /init.sh
    
    #浏览器访问就可以玩了
    
    image

    4. 容器搭建_可道云

    可道云的站点包下载链接_提取码: svg2

    #删除索引容器
    docker container rm -f `docker ps -a -q`
    
    ================================================
    
    #新建一个基础容器
    docker run -it -p 80:80 centos6.9_nginx:v1 /bin/bash
    
    #hosts劫持
    echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    
    #安装php-fpm
    yum install -y php-fpm php-gd php-mbstring
    
    #在容器中修改php配置文件
    [root@de6c450c9fe9 /]# grep  'nginx' /etc/php-fpm.d/www.conf
    user = nginx
    group = nginx
    
    #在容器中修改nginx配置文件,设置站点目录为 /code
    [root@de6c450c9fe9 /]# cat /etc/nginx/nginx.conf
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   /code;
                index  index.php index.html index.htm;
            }
            location ~ \.php$ {
                root           /code;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /code$fastcgi_script_name;
                include        fastcgi_params;
            }
        }
    }
    
    mkdir /code
    
    
    #在容器中下载wget和unzip命令用来下载可道云的文件
    #可道云的站点包在上面提供的下载路径可以下载使用
    #解压到站点目录下后,修改站点目录的权限为nginx
    yum install -y  wget unzip
    wget http://192.168.37.202/linux59/kodexplorer4.40.zip
    mv kodexplorer4.40.zip  code/
    cd code/
    unzip kodexplorer4.40.zip 
    chown -R nginx.nginx .
    
    #启动php和nginx
    service php-fpm restart
    service nginx restart
    
    浏览器访问查看 image
    #把可道云做一个镜像
    docker commit <容器ID> kod:v1
    
    
    #新建一个可道云的容器
    docker run -d -p 81:80 kod:v1 service php-fpm nginx start
    
    #登录方式保证历史命令存在
    docker start <容器ID>
    docker attach <容器ID>
    
    
    #保证容器夯住,在容器中书写脚本
    vi /init.sh
    #!/bin/bash
    service php-fpm start
    nginx -g 'daemon off;'
    
    #将php-fpm和nginx关闭掉
    service php-fpm stop 
    service nginx stop 
    
    #测试脚本是否可用
    sh /init.sh
    
    #再次做镜像v2
    docker commit <容器ID> kod:v2
    
    #利用镜像v2运行一个新的容器
    docker run -d -p 81:80 kod:v2 /bin/bash /init.sh
    
    
    image

    完成

    5. 容器搭建_phpwind论坛

    phpwind论坛站点包下载链接_提取码: fw6p

    #新建一个基础容器,80端口映射,80端口,
    #与上一个项目的可道云的81端口不要冲突
    docker run -it -p 80:80 centos6.9_nginx:v1 /bin/bash
    
    #在容器中执行,hosts本地劫持
    echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    
    #下载php环境和需要用的的命令
    yum install -y wget unzip php-fpm php-gd php-mbstring php-mysql vim 
    
    #拉取phpwind论坛的站点包,上面已有下载链接
    wget http://192.168.37.202/linux59/phpwind_UTF8_8.7.1.zip
    
    #创建站点目录,解压后并修改权限为nginx
    mkdir /code
    mv phpwind_UTF8_8.7.1.zip code/
    cd /code
    unzip phpwind_UTF8_8.7.1.zip
    chown -R nginx.nginx .
    
    #修改php-fpm配置文件
    [root@2fc2234b814b code]# grep  'nginx' /etc/php-fpm.d/www.conf
    user = nginx
    group = nginx
    
    #在容器中修改nginx配置文件,设置站点目录为 /code/upload
    [root@de6c450c9fe9 /]# cat /etc/nginx/nginx.conf
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   /code/upload;
                index  index.php index.html index.htm;
            }
            location ~ \.php$ {
                root           /code/upload;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /code/upload$fastcgi_script_name;
                include        fastcgi_params;
            }
        }
    }
    
    
    #启动php-fpm和nginx服务
    service php-fpm restart
    service nginx restart
    
    #安装数据库并启动
    yum install -y mysql-libs mysql-server
    service mysqld restart
    
    #进入数据库创库,删除空表
    #为数据库创建密码
    [root@2fc2234b814b code]# mysqladmin -uroot -p password 123456
    [root@2fc2234b814b code]# mysql -uroot -p123456
    #删除空表
    mysql> select user,host from mysql.user;
    mysql>  drop user ''@'2fc2234b814b';
    mysql>  drop user ''@'localhost';
    mysql> flush privileges;
    
    #创建phpwind库
    mysql> create database phpwind charset utf8;
    mysql> show databases;
    
    #调整时区
    [root@2fc2234b814b code]# /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    [root@2fc2234b814b code]# date
    Fri Sep  6 15:26:33 CST 2019
    
    #重启服务
    service php-fpm restart
    service nginx restart
    service mysqld restart
    
    浏览器访问查看 image image image image
    image image

    6. dockerfile自动构建docker镜像

    image

    类似ansible剧本,大小几kb
    手动做镜像:大小几百M+

    dockerfile 支持自定义容器的初始命令

    dockerfile主要组成部分:
    ​ 基础镜像信息 FROM centos:6.9
    ​ 制作镜像操作指令 RUN yum install openssh-server -y
    ​ 容器启动时执行初始命令 CMD ["/bin/bash"]
    dockerfile常用指令:

    FROM  这个镜像的妈妈是谁?(指定基础镜像)
    MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)
    LABLE      描述,标签
    RUN 你想让它干啥(在命令前面加上RUN即可)
    ADD 给它点创业资金(会自动解压tar)  制作docker基础的系统镜像
    WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
    VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
    EXPOSE 它要打开的门是啥(指定对外的端口)(-P 随机端口)
    CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)
    dockerfile其他指令: 
    COPY 复制文件(不会解压)rootfs.tar.gz
    ENV  环境变量
    ENTRYPOINT  容器启动后执行的命令(无法被替换,启容器的时候指定的命令,会被当成参数)
    

    6.1 测试——FROM & RUN

    
    #手动制作一次docker镜像(收集命令)
    
    #编写dockerfile文件
    [root@docker01 nginx]# mkdir -p /opt/dockerfile/nginx
    [root@docker01 nginx]# cd /opt/dockerfile/nginx
    [root@docker01 nginx]# vim dockerfile
    FROM centos:6.9
    RUN  curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    RUN  curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    RUN  yum install nginx -y
    CMD  ["nginx","-g","daemon off;"]
    
    #docker build自动构建docker镜像
    [root@docker01 nginx]# docker image build -t centos6.9_nginx:v2 --network=host /opt/dockerfile/nginx
    .....
    Successfully built 05342d047d21
    Successfully tagged centos6.9_nginx:v2
    
    #测试镜像可不可以使用
    docker run -d -p 88:80 centos6.9_nginx:v2
    
    
    image
    FROM centos:6.9 加载镜像
    RUN  启动一个临时容器, curl产生文件变化。保留文件变化,提交为临时镜像,删除临时容器
    RUN  启动一个临时容器,yum install,提交为临时镜像,删除临时容器
    
    dockerfile RUN ==  docker run 
    
    

    加速的一种方法就是把执行的命令放到一行 && \

    [root@docker01 nginx]# vim dockerfile 
    FROM centos:6.9
    RUN  curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo && \
     curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo && \
     yum install nginx php -y
    CMD  ["nginx","-g","daemon off;"]
    

    6.2 测试——ADD

    #创建目录
    cd dockerfile/
    mkdir saolei
    [root@docker01 saolei]# pwd
    /opt/dockerfile/saolei
    
    #添加自动创建镜像的配置文件
    [root@docker01 saolei]# vim dockerfile
    FROM  centos:6.9
    RUN  curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    RUN  curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    RUN  yum  install  tomcat  -y
    
    RUN  cd /var/lib/tomcat/webapps/ && \
    curl -o saolei.tar.gz  http://192.168.37.202/linux59/saolei.tar.gz && \
    tar xf saolei.tar.gz && \
    mv saolei ROOT
    
    ADD  init.sh /init.sh
    CMD  ["/bin/bash","/init.sh"]
    
    
    #添加脚本文件
    [root@docker01 saolei]# vim init.sh
    #!/bin/bash
    service  tomcat start
    tail   -f   /var/log/tomcat/catalina.out
    
    
    #docker build自动构建docker镜像
    docker build -t centos6.9_tomcat7:v2  --network=host .
    
    #测试镜像可不可以使用
    docker run -d -p 8080:8080 centos6.9_tomcat7:v2
    docker ps -a -l
    

    浏览器访问10.0.0.11:8080


    image

    6.3 测试——EXPOSE

    #将站点包下载到saolei/下
    [root@docker01 saolei]# curl -o saolei.tar.gz  http://192.168.37.202/linux59/saolei.tar.gz
    [root@docker01 saolei]# vim dockerfile 
    FROM  centos:6.9
    RUN  curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    RUN  curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    RUN  yum  install  tomcat  -y
    
    RUN  cd /var/lib/tomcat/webapps/ 
    ADD  saolei.tar.gz .
    RUN  mv saolei ROOT
    
    ADD  init.sh /init.sh
    
    EXPOSE 8080 
    
    CMD  ["/bin/bash","/init.sh"]
    
    
    #docker build自动构建docker镜像
    [root@docker01 saolei]# docker build -t centos6.9_tomcat7:v5  --network=host .
    

    作业:

    交作业时候打包好dockerfile


    image

    作业1 : 编写kod的dockerfile

    
    

    作业2: 编写phpwind的dockerfile

    
    

    相关文章

      网友评论

        本文标题:云计算day05-Docker容器

        本文链接:https://www.haomeiwen.com/subject/ginjyctx.html