zoukankan      html  css  js  c++  java
  • Docker

    目标:

    知道什么是docker
    使用命令启动或停止docker(*)
    使用docker镜像相关命令
    使用docker容器相关命令
    部署MySQL、Tomcat、Nginx、Redis
    docker 的迁移与备份
    知道Dockerfifile的常用命令

    一:什么是docker

    Docker 是一个开源的应用容器引擎,基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
     

    小结

    • Docker是一个应用容器引擎;

    • 应用场景:web的自动化打包发布,自动化测试、可持续集成,安装各种组件;

    • 与传统虚拟机比较:docker启动速度比较快,占用体积(内存)较小;

    • 组成:docker守护进程,仓库,镜像,容器,docker客户端

    • 为了避免测试人员和开发人员的环境不一致,使用docker来避免这种问题。

    docket架构

      Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

    docket镜像与容器:(相当于类和对象)


    二、Docker安装与启动

    docker 安装命令:
    yum update
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo http://mirrors.ustc.edu.cn/docker- ce/linux/centos/docker-ce.repo
    docker -v   //查看docker版本

    然后要设置ustc镜像

     

    Docker启动与停止命令:

    systemctl start docker     // 启动docker
    systemctl restart docker  //重启docker
    systemctl stop docker    //停止docker
    systemctl status docker  //查看运行状态

    卸载docker命令
    yum list installed |grep docker
    镜像列表
    yum remove 镜像列表名称
    find / -name docker*
    rm -rf 查找的文件名称


    三、docker镜像相关命令

    查看镜像:  docker images
    搜索镜像: docker search  镜像名称 
    拉取镜像:docker pull 镜像名称
    删除镜像 :docker rmi 镜像id


    四、docker容器相关命令

    4.1容器相关命令:

    查看正在运行的容器: docker ps

    查看所有容器:docker ps -a

    创建并启动交互式容器:docker run -it --name=mycentos7 centos:7 /bin/bash

    启动交互式容器之后是直接进入容器终端;可以查看容器的文件结构;使用exit 命令则会退出终端并且停止容器。

    长期运行的容器,我们需要创建一个守护式容器,容器名不能重复。

    # 创建并启动守护式容器

    docker run -di --name=mycentos2 centos:7

     

    # 启动容器后再进入容器

    docker exec -it mycentos2 /bin/bash

    守护式容器在启动之后会一直在后台运行,即使进入容器之后执行exit命令也不会停止容器,适用于需要长期运行容器的情况。

     

    停止和启动容器命令

    docker stop 容器名/容器id

    docker start 容器名/容器id

    将文件拷贝到容器命令格式:

    dir     //查看有什么文件

    docker cp 文件名 容器名:/use/local     //将文件复制到容器的/use/local的目录下

    docker exec -it 容器名 /bin/bash     //启动容器后再进入容器

    cd  /usr/local           //进入这个目录下

    dir        //查看这个文件已经复制过来了。

    Exit      //退出

    将容器的文件拷贝出来如图命令:

    查看容器IP:   Docker inspect  容器名

    删除容器: docker rm 容器名

    删除所有容器:docker rm `docker ps -a -q`  (慎用)


    五、部署

    5.1在虚拟机上部署Mysql 

    mysql部署命令:
    1.拉取mysql镜像到本地
    docker pull centos/mysql-57-centos7
    2.以守护式创建容器并设置mql登录密码, -p表示映射 ,宿主机端口:容器端口,通过操作宿主机端口来操作容器中的mql,centos/mysql-57-centos7:容器名
    docker run -di --name=tensquare_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWOR D=123456 centos/mysql-57-centos7 

    3.docker ps    //查看正在运行的容器,如果发现Mysql容器没有运行,则查docker ps -a    在docker start 容器id,来开启容器。

    4. ip addr    //查看虚拟机ip,然后用Mysql图形界面画工具连接这个ip

     

     部署成功:(这里是通过宿主机ip对容器的访问,因为做了端口映射)

    小结

    在创建容器的时候指定环境变量MYSQL_ROOT_PASSWORD表示使用root进行远程连接时候的密码。如果需要进行远程连接的话可以使用-p进行端口映射。

    5.2  部署Tomcat

    1.拉取镜像
    docker pull tomcat
    2.创建容器。name=容器名,-p映射端口,-v目录挂载,/usr/local/tomcat/webapps:下载到webapps下,如果文件目录没有自动下载,tomcat:镜像名,或者用id也可以。
    docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/tomcat/webapps tomcat
    3.查看运行状态 docker ps //如果没运行,则命令开启运行。

     

     

    浏览器访问刚刚映射的端口号,看到猫你就部署成功了。

    5.3 Nginx部署
    1.拉取镜像
    docker pull nginx
    2.创建Nginx容器,name=创建的容器名, -p 映射端口 镜像名
    docker run -di --name=mynginx -p 80:80 nginx

    3.查看是否启动

    docker ps

     浏览器输入   宿主机ip:80  即可看到这个页面,则部署成功。

    接下来我们把静态页面部署到Nginx上去。

    1.将准备好的静态页面文件名index.html(一定这个名字,否则覆盖不了,一般都是网站的主页)拷贝到一个路径文件夹下
    C:developstatic //我放在这个本地目录下
    2.命令:上传这个目录到宿主机上
    put -r C:developstatic

     显示上传成功

     可以看到static目录下的dongtu.html       //由于开始我名称不对,导致没有覆盖。后面访问不到,

    将上传的这个目录拷贝到容器中

    hdocker exec -it mynginx /bin/bash   //进入容器

    cd etc //进入etc目录
    cd nginx //进入nginx 目录
    dir //查看文件
    cat nginx.conf //查看配置信息基本
    cd conf.d
    dir
    cat default.conf //查看配置信息

     可以看到其实配置了一个server,root 路径下/usr/share/nginx/html.就是我们看到的欢迎页。

    我们需要将我们刚上传的static目录下的页面拷贝到root这个路径下。

    exit  //退出

    dir //查看下目录
    mv static html //把static 目录改名为html ,要为了覆盖root路径下的html
    docker cp html mynginx:/usr/share/nginx/ //把html目录拷贝到root的路径下

     如图输入命令

    由于我的dongtu.html 名称不对,没有覆盖。后面我修改过来了。就可以访问了。

    5.4 部署Redis
    1.拉取镜像
    docker pull redis
    2.创建容器,两种任选一
    docker run -di -- name=myredis -p 6379:6379 redis //redis不设置密码
    docker run -id --name=myredis -p 6379:6379 redis --requirepass "123456"// 设置 密码的
    3.查看开启状态
    docker ps
    4.找到本地redis客户端路径
    C:develop edis-2.8.9 //我的本地redis路径
    5.管理员身份打开cmd
    cd C:develop edis-2.8.9
    redis-cli -h 宿主机ip //比如redis-cli -h 192.168.0.1 。这里是远程访问
    6.如果设置密码
    auto "123456" //如:auto "你的password"

    7.测试存储
    set name mkk
    get name

     

     部署成功。


    六.docker 的迁移与备份

    docker 的迁移与备份-- 命令中以mynginx容器为例,因为它之前已经部署了静态页面。用它来测试恢复。

    1.将docker容器保存为镜像
    docker commit mynginx mynginx_a           //mynginx:容器名,mynginx_a:镜像名。此新镜像的内容就是当前容器的内容,接下来你可以用此镜像再次运行新的容器
    docker run -di --name=mynginx2 -p 81:80 mynginx_a    //基于这个新镜像来创建一个容器。当然,以后我们可以把修改好之后的容器在保存为镜像。基于含有内容的新镜像来操作。浏览器测试:ip:81可以访问


    2.镜像备份:把镜像保存为一个文件即可。比如,我们要把当前的镜像放到另一台服务器上去部署,我们可以把当前镜像保存为一个文件,然后把文件恢复为镜像即可。
    简单理解就是:镜像保存(备份)为文件,文件恢复为镜像。在做好文件之后,在把这个镜像给删掉即可。

    docker save -o mynginx.tar mynginx_a      //-o 表示输出,mynginx.tar是自定义文件名,mynginx_a:是新镜像
    dir //查看下,有这个文件mynginx.tar。

    3.镜像恢复与迁移:事先把镜像备份为文件,如果该镜像损坏或删除了,则可以用镜像的备份文件来恢复。

    如果镜像里面有容器,先要停止容器运行。在删除容器,在删镜像。
    docker stop mynginx2
    docker rm mynginx2
    docker rmi mynginx_a

    docker load -i mynginx.tar       // -i :表输出,恢复文件为镜像
    docker images //查看镜像



    docker 私有仓库的搭建
    1.拉取私有仓库镜像
    docker pull registry

    2.启动私有仓库容器
    docker run -di --name=registry -p 5000:5000 registry
    3.浏览器访问 看到下图内容表示搭建成功,且内容为空。

    4.修改daemon.json
    vi /etc/docker/daemon.json
    添加以下内容,保存退出。
    {"insecure-registries":["宿主机ip:5000"]} //表示信任私有仓库的地址


    5.重启docker 服务生效
    systemctl restart docker


    将镜像上传到私有仓库
    docker tag jdk1.8 宿主机IP:5000/jdk1.8
    docker start registry //开启私有仓库
    docker push 宿主机IP:5000/jdk1.8

    在浏览器访问如下:


     

     

    作者:MuRongKang
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    集群间如何实现session共享
    详解PHP如何实现单点登录
    jsonp原理详解
    跨站请求CSRF攻击
    防止SQL注入
    在springboot中使用h2数据库
    Datalab实验
    飞步无人驾驶2018届校园招聘在线笔试A轮
    HDU6030 Happy Necklace
    HDU5950 Recursive sequence
  • 原文地址:https://www.cnblogs.com/mukk/p/12106737.html
Copyright © 2011-2022 走看看