zoukankan      html  css  js  c++  java
  • docker基础(上)

    docker-从入门到实践

    https://yeasy.gitbooks.io/docker_practice/repository/registry.html

     

    docker基础所有包下载

    链接:https://pan.baidu.com/s/1TYH3RUFR3OiN6fX67sa5rg 
    提取码:yy44

     

    什么叫虚拟化

    正常服务器丨真实硬件层丨操作系统kernel丨shell层丨应用程序层

    kvm丨真实硬件层丨虚拟化层丨Virual硬件层丨操作系统kernel丨shell层丨应用程序层

    docker丨真实硬件层丨操作系统kernel丨分成一份一份的shell层丨分成一份一份的程序

    LVM硬盘虚拟化

    KVM硬件虚拟化(需要单独装操作系统,半虚拟化通过接口vitio)

    Docker容器虚拟化(虚拟化后不需要装操作系统,比KVM小的多)

     

    一,Docker简介,功能特性与应用场景

     

    1.1 Docker简介

    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

     

    一个完整的Docker有以下几个部分组成

    Docker Client 客户端

    Docker Daemon 守护进程

    Docker Image 镜像

    Docker Container 容器

     

    1.2 Docker功能特性

    隔离环境(系统,网络,文件系统)与应用

    解决依赖与版本问题

    易于分发,开箱即用

    节点与容器快速扩容

    镜像制作简单便捷,管理方便

     

    (1)隔离

    通过cgroup(隔离和跟踪资源的使用)& namespace(组与组之间隔离)来实现轻量级的进程隔离

    对于容器中运行的进程来说,自己独占了一个系统

    容器间网络,文件及其他资源都互相隔离

     

    (2)版本与依赖

    传统模式下,多个不同环境或版本的项目需要部署在不同机器上,部署与后期维护管理复杂繁琐。

    使用Docker,通过多个不同版本或者环境的镜像,可以同时运行在一台机器上互不干扰,部署与后期维护简单方便。

     

    (3)分发与使用

    镜像可以通过导入,导出,上传到镜像仓库等多种方式进行分发

    在启动了Docker的系统上直接使用docker run即可启动镜像,无需特别配置。

     

    (4)扩容

    容器扩容简单方便

    扩容节点只需安装并启动Docker即可

     

    (5)镜像制作

    镜像的灵魂Dockerfile

    使用Dockerfile进行指令控制

    基于Linux命令,易于理解,快速上手

    易于定制与修改

     

    1.3 Docker应用场景

    Docker通常应用于如下场景

    web应用的自动化打包和发布

    自动化测试和持续集成,发布

    应用服务,如MySQL,Redis等,通过Docker实现快速部署

    k8s私有云

     

    1.3.1 场景1:多版本多种类系统与软件

    image_1crs4lqd8fu32l11a5p63a19vm9.png-257.5kB

     

    1.3.2 场景2: 环境

    image_1crs4m6a01q741lu9d6t19m21gf6m.png-243kB

     

    1.3.3 场景3: 分发

    image_1crs4mhrq1rn7kq98o7pqhpp13.png-195.6kB

     

    二,Docker的安装(安装社区版进行测试)

     

    2.1 安装环境

     

    最小化安装Centos7.5

    cat /etc/redhat-release

    uname -r

    QQ浏览器截图20181127162503.png-9kB

     

    关闭防火墙和selinux

    systemctl stop firewalld

    systemctl disable firewalld

    setenforce 0

    image_1cta4f4vc7jd1r2h1vspc9fgk430.png-12.7kB

     

    2.2 版本选择

    Docker 
    17.03之后版本变为Docker CE

    Docker CE(测试选择社区版) 
    社区版,Community Edition

    Docker EE 
    企业版,Enterprise Edition 
    收费版本,强调安全性,提供一些高级特性及商业支持

     

    2.3 Docker安装:标准版本(版本太低不用)

    特别提示:
    centos7.5在搭建本地yum仓库的时候只需要修改
    CentOS-Media.repo 文件即可(不需要将其他文件仍子目录里)
    确保虚拟机能正常上网
    
    [root@Docker ~]# yum -y install docker
    [root@Docker ~]# systemctl start docker #启动docker进程
    [root@Docker ~]# systemctl enable docker    #加入docker开机启动
    Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
    [root@Docker ~]# docker ps  #查看封装在docker镜像中的正在运行的镜像进程
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@Docker ~]# docker version
    Client:
     Version:         1.13.1
     API version:     1.26
     Package version: docker-1.13.1-63.git94f4240.el7.centos.x86_64
     Go version:      go1.9.4
     Git commit:      94f4240/1.13.1
     Built:           Fri May 18 15:44:33 2018
     OS/Arch:         linux/amd64
    Server:
     Version:         1.13.1
     API version:     1.26 (minimum version 1.12)
     Package version: docker-1.13.1-63.git94f4240.el7.centos.x86_64
     Go version:      go1.9.4
     Git commit:      94f4240/1.13.1
     Built:           Fri May 18 15:44:33 2018
     OS/Arch:         linux/amd64
     Experimental:    false
    
     

    2.4 Docker安装:CE社区版(清理docker方法)

    首先清理掉yum安装的docker标准版
    这里有两种方式
    
    #第一种清理docker方法
    [root@Docker ~]# yum -y remove docker
    #第二种清理docker方法
    [root@Docker ~]# yum history list   #查看yum安装的历史列表
    已加载插件:fastestmirror
    ID     | 登录用户                 | 日期和时间       | 操作           | 变更数 
    -------------------------------------------------------------------------------
         6 | root <root>              | 2018-07-02 22:30 | Install        |   17 EE         #这次就是安装的docker
         5 | root <root>              | 2018-07-02 20:08 | I, U           |   60   
         4 | root <root>              | 2018-07-03 03:54 | Install        |   93   
         3 | root <root>              | 2018-07-03 03:53 | Install        |    1   
         2 | root <root>              | 2018-07-03 03:53 | Install        |    1   
         1 | 系统 <空>                | 2018-07-03 03:46 | Install        |  313   
    history list
    [root@Docker ~]# yum history info 6     #查看yum历史安装ID为6的安装信息
    已加载插件:fastestmirror
    事务 ID: 6
    起始时间    : Mon Jul  2 22:30:11 2018
    启动 RPM 数据库     : 409:3aba29f1d5b7e2d7ff3ed9f169ec4a2225595390
    结束时间       :            22:30:27 2018 (16 秒)
    结束 RPM 数据库      : 426:28338758ec6a2332cabb3a1439336bd451c52366
    用户           : root <root>
    返回码    : 成功
    命令行   : -y install docker
    事务完成属主:
        已安装 rpm-4.11.3-32.el7.x86_64                      @anaconda
        已安装 yum-3.4.3-158.el7.centos.noarch               @anaconda
        已安装 yum-plugin-fastestmirror-1.1.31-45.el7.noarch @anaconda
    已变更的包:
        依赖安装 audit-libs-python-2.8.1-3.el7.x86_64                         @base
        依赖安装 checkpolicy-2.5-6.el7.x86_64                                 @base
        依赖安装 container-selinux-2:2.55-1.el7.noarch                        @extras
        依赖安装 container-storage-setup-0.9.0-1.rhel75.gite0997c3.el7.noarch @extras
        安装 docker-2:1.13.1-63.git94f4240.el7.centos.x86_64              @extras
        依赖安装 docker-client-2:1.13.1-63.git94f4240.el7.centos.x86_64       @extras
        依赖安装 docker-common-2:1.13.1-63.git94f4240.el7.centos.x86_64       @extras
        依赖安装 libcgroup-0.41-15.el7.x86_64                                 @base
        依赖安装 libsemanage-python-2.5-11.el7.x86_64                         @base
        依赖安装 oci-register-machine-1:0-6.git2b44233.el7.x86_64             @extras
        依赖安装 oci-systemd-hook-1:0.1.15-2.gitc04483d.el7.x86_64            @extras
        依赖安装 oci-umount-2:2.3.3-3.gite3c9055.el7.x86_64                   @extras
        依赖安装 policycoreutils-python-2.5-22.el7.x86_64                     @base
        依赖安装 python-IPy-0.75-6.el7.noarch                                 @base
        依赖安装 setools-libs-3.3.8-2.el7.x86_64                              @base
        依赖安装 skopeo-containers-1:0.1.29-3.dev.git7add6fc.el7.0.x86_64     @extras
        依赖安装 yajl-2.0.4-4.el7.x86_64                                      @base
    Scriptlet 输出:
       1 setsebool:  SELinux is disabled.
    history info
    [root@Docker ~]# yum -y history undo 6  #进行yum安装操作回退
    
     

    特别提示:

    yum的回退安装在工作中很有用

     

    安装Docker的CE社区版

     

    安装依赖包

    yum -y install yum-utils device-mapper-persistent-data lvm2

    image_1cta4i2h913021eesaoc1ui91kt23d.png-34.5kB

     

    添加docker的CE版本的yum源配置文件

    curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo

    ll /etc/yum.repos.d/docker-ce.repo

    image_1cta4j430me3iak14m9onovni4a.png-27.8kB

     

    安装CE版本的docker

    yum -y install docker-ce

    systemctl start docker #启动docker

    systemctl enable docker #添加开机启动

    docker version #查看docker版本

    image_1cta4o4hblp0iopclm18mstn94n.png-103.7kB

     

    三,Docker的操作命令

     

    3.0 添加docker国内镜像源

    在开始学习docker之前,我们首先要更改一下docker的默认源镜像下载地址(默认是从国外下载,很慢),我们需要添加国内的源地址

    vim /etc/docker/daemon.json

    cat /etc/docker/daemon.json

     
    1. {
    2. "registry-mirrors":[ "https://registry.docker-cn.com" ]
    3. }

    systemctl daemon-reload

    systemctl restart docker

    image_1cta528ev12am1o0phk6bpr106154.png-20.4kB

     

    3.1 Docker命令:search(查看镜像)

    用于从docker的官方公有镜像仓库查找镜像

     

    (1)查看Docker Hub上公开的centos镜像

    docker search centos

     
    1. 特别说明:
    2. Name:镜像的名字
    3. DESCRIPTION:描述
    4. STARS:星级(越高越好)
    5. OFFICIAL:是否是官方发布的(OK代表官方发布的)
    6. AUTOMATED:是否自动化的

    image_1cta5c2d6j321ua1eqv1gb51htq5h.png-123.7kB

     

    (2)查找星级多于100的centos镜像

     

    查找,星级大于100的centos镜像

    docker search centos -f stars=100

     
    1. 特别提示:
    2. /:符号用于分割作者名称和镜像名称
    3. ansible/centos7-ansibleansible是作者名称,centos7-ansible是镜像名称

    image_1cta5dkno1dv7vv11sdkdk6l0j5u.png-24.3kB

     

    (3)多条件查找--filter

     

    查找官方发布的,星级大于100的centos镜像

    docker search centos --filter is-official=true --filter stars=100

    QQ浏览器截图20181127164501.png-10.8kB

     

    3.2 Docker命令:pull(下载镜像)

     

    用于从Docker Hub上下载公有镜像

    docker pull nginx

    docker pull richarvey/nginx-php-fpm

    docker pull mysql:5.6

    docker pull centos

    image_1cta69b8kkcj13m31g1q1okvld28o.png-27.6kB

     

    3.3 Docker命令:images(查看本地镜像)

     

    用于本地镜像的查看

    docker images

     
    1. 特别说明:
    2. REPOSITORY:镜像仓库(下边罗列的都是本地已有镜像名称)
    3. TAG:镜像的标记(为了区分同名镜像)
    4. IMAGES ID:镜像的ID
    5. CREATED:此镜像的创建时间
    6. SIZE:此镜像的大小

    image_1cta69fks77o114e1k7r1m5u15cf95.png-27.6kB

     

    3.4 Docker命令:build(自定义)

     

    用于本地自定义镜像的构建,需要创建Dockerfile文件(只是创建,写法在后面)

     

    创建Dockerfile文件的存储目录

    mkdir -p /root/dockerfile/lib/centos/7

    cd /root/dockerfile/lib/centos/7

    image_1cta7go9u1m3kbbh1rk8au1303a2.png-15.7kB

     

    创建docker.sh脚本

    vim docker.sh

    cat docker.sh

     
    1. #!/bin/bash
    2. while true
    3. do
    4. echo "welcome"
    5. sleep 5
    6. done

    image_1cta7houi15gvvdh14aqudd161af.png-12.3kB

     

    创建Dockerfile配置文件,文件名称必须为Dockerfile,第一个字母必须大写

    vim Dockerfile

    cat Dockerfile

     
    1. FROM centos
    2. LABEL MAINTATNER="Mr.sl.com"
    3. RUN ln -sfv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    4. ADD docker.sh /home/test/
    5. RUN chmod +x /home/test/docker.sh
    6. CMD ["/home/test/docker.sh"]
     
    1. 配置详解
    2. FROM centos
    3. #从centos源镜像的基础上进行构建
    4. LABEL MAINTATNER="Mr.sl.com"
    5. #作者的名称
    6. RUN ln -sfv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #RUN:f是强制覆盖,v是有信息输出,在镜像构建过程中运行命令
    7. ADD docker.sh /home/test/
    8. #从本地系统中把docker.sh文件添加到构建中的镜像的/home/test/目录下
    9. RUN chmod +x /home/test/docker.sh
    10. #在镜像构建过程中运行命令
    11. CMD ["/home/test/docker.sh"]
    12. #构建镜像完成时,最后执行的命令

    image_1cta7ir8219sq1alj1frkame1r9gas.png-26.6kB

     

    根据Dockfile配置文件构建一个自定义镜像

    docker build -t Mr.sl/centos7:1 . #-t 指定镜像名称 :1 设定镜像的tag标记

    docker images

    image_1cta7jncqc6a1bps1t21guh14ikb9.png-104.6kB

     

    3.5 Docker命令:run(运行镜像)

     

    运行一个本地镜像

    docker images

    docker run -dit Mr.sl/centos7:1 /bin/bash --->/bin/bash代替配置文件里面的CMD,可以不用写

     
    1. 特别提示:
    2. docker run:运行一个指定的images id或镜像名字
    3. -d:放在后台运行
    4. -i:可以进行命令交互
    5. -t:制作一个伪终端用于登陆
    6. 0523fda5f122:镜像的ID,可以简写成052

    image_1cta7npmv1fptm3k1rjk134q3hke0.png-39.6kB


    docker run -dit --name centos_test Mr.sl/centos7:1 --->不指定名字系统默认自己起名字

    image_1cta8lr6552ina3qj1lalj1nha.png-39.9kB

     

    3.6 Docker命令:ps(看容器)

     

    查看已经运行的镜像的进程

    docker ps -a #查看所有运行的镜像进程(包含退出的exit)

     
    1. 特别提示:
    2. STATUS:进程的状态,UP表示正在运行中,EXIT表示已经退出了。

    image_1cta8n54117h5t3g1kt1mt4slghn.png-24.4kB

     

    3.7 Docker命令:attach(切入)

     

    从本地系统中切入到某个STATUS状态是UP的镜像进程里

    docker ps -a

    docker attach 25c #切入到容器号为25c5cae76baf的镜像进程里

    ls #已经进入容器里了

    exit #退出容器

    docker ps -a 
    容器的进程的STATUS已经处于EXIT状态(之前是后台运行的,切入进去后执行exit就等于手动退出了)

    image_1cta8pkrv1l6ndidlt14rb1a88i4.png-61.5kB

     

    3.8 Docker命令:stop(停止)

     

    用于停止一个正在运行着的容器进程

    docker ps -a

    docker stop 7d2

    QQ浏览器截图20181127174452.png-32.2kB

     

    3.9 Docker命令:start(启动)

     

    用于启动一个已经停止了的容器进程

    docker ps -a

    docker start 7d2 25c

    image_1cta92q6ul038i21mrorb9evcl3.png-51.4kB

     

    3.10 Docker命令:rm(删容器,需要先停止)

     

    用于删除一个已经停止了的容器进程

    docker ps -a

    docker rm 093e4fb8b09c

    image_1cta9fvveguq1os4cugofo1tmgm0.png-63.1kB

     

    3.11 Docker命令:rmi(删镜像,给在没有容器启动的情况下)

     

    用于删除一个未用作容器启动的本地镜像

    docker images

    docker rmi -f 052 #-f 强制删除(即便被占用)

    docker rmi 052 #但要注意,被用作容器启动的镜像是不能删除的(需先rm删除容器进程)

    image_1cta9ie7bl8ktgn691qr315jtmd.png-102.3kB

     

    3.12 Docker命令:commit(更改并保存)

     

    将一个更改过的容器进程的容器状态保存为一个新的镜像

    docker ps -a #查看启动的容器进程

    docker attach 686 #切入容器进程

    mkdir yunjisuan #在容器进程里创建yunjisuan目录

    ls

    exit #退出容器进程

    docker commit 686 mr.sl/centos7:2 #将更改后的容器进程保存为一个新的镜像

    docker images

    image_1ctaagra31bm43b8om5kim10np.png-81.5kB

     

    生产一个新的容器并切入查看结果

    docker images

    docker run -d -it 06e /bin/bash

    docker ps -a #查看新镜像的容器进程

    docker attach 426 #切入新镜像的容器进程

    ls #我们发现之前创建的目录仍旧存在

    image_1ctaam8sh1ml1s7goq51qp512d2o6.png-86.2kB

     

    3.13 Docker命令:exec(不切入情况下执行命令或切入容器)

     

    用于从本地操作系统上直接向容器进程发布执行命令并返回结果

    docker ps -a

    docker exec 686 ls /tmp #查看容器进程里的/tmp目录下所有内容

    image_1ctaaopsqov41ffjsij1fccmsoj.png-31.6kB

     

    用于从本地操作系统上切入向容器并退出不关闭方法

    docker pa -a

    docker exec -it 686 /bin/bash

    exit

    image_1ctaav45spud5u5c9l1aaf1bf8p0.png-62.6kB

     

    3.14 Docker命令:cp(复制)

     

    用于在容器进程和本地系统之间复制文件

    ls

    touch xin

    docker ps -a

    docker exec 686 ls /tmp #向容器进程发布命令

    docker cp xin 686:/tmp

    image_1ctabfrpg8sh1ton1hgn1si913ibpd.png-55.7kB

     

    将指定容器进程的/tmp/yum.log复制到当前目录下

    docker exec 686 ls /tmp

    docker cp 686:/tmp/yum.log . #将本地文件复制到容器进程里

    ls

    image_1ctabne3m1nvt1l0t15k21e5417idpq.png-17.9kB

     

    3.15 Docker命令:create(创建容器,并不启动zd)

     

    用于创建一个容器进程,但是并不启动它

    docker images

    docker create -it 148 #创建一个镜像的容器进程,但不直接启动

    docker ps -a

    docker start 5ed #启动容器进程

    docker ps -a

    QQ浏览器截图20181127193219.png-54.6kB

     

    3.16 Docker命令:diff(做对比)

     

    查看容器进程与源镜像做对比,发生了改变的文件或文件夹

    docker ps -a

    cd /yunjisuan/

    touch {1..6} #在容器进程中创建文件

    ls

    exit #退出容器进程

    docker diff 686 #查看容器进程的变化

    image_1ctafhm07qrc1ro61f4eo9kc1oqs.png-67.2kB

     

    3.17 Docker命令:events(时时监测)

     

    时时监测容器的变化情况

    docker events

    前台时时监控容器的变化若要检测,需要另外再起一个窗口进行操作

    image_1ctafodfvm33e79gjf1tap6nir9.png-25.8kB


    image_1ctafos2sij018ej15cdgs91902rm.png-93.1kB

     

    3.18 Docker命令:export(导出容器)

     

    将容器进程的文件系统导出到本地

    docker ps -a

    docker export ab06a9794e45 > centos.tar #将容器进程导出成一个tar包

    ls

    image_1ctaigv7dvcn1flm7pft5a19cvs3.png-33.5kB

     

    3.19 Docker命令:import(导入容器自动创建镜像)

     

    用于将export导出的文件系统创建为一个镜像

    ls

    docker import centos.tar Mr.sl/centos:3

    docker images

    image_1ctailh3s1tt51vi61s52ffumansg.png-92.1kB

     

    3.20 Docker命令:history(查看镜像历史记录)

     

    用于查看一个镜像的历史修改纪录

    docker images

    docker history 148

    image_1ctaipgb35r819bf1f4f14r316j9st.png-83.4kB

     

    3.21 Docker命令:info(查看docker运行信息)

     

    用于查看当前操作系统的docker运行信息

    docker info

     
    1. Containers: 1 #容器进程1个
    2. Running: 1 #正在运行状态的容器1个
    3. Paused: 0
    4. Stopped: 0
    5. Images: 8 #一共有8个镜像

    image_1ctaiqudjqok1vq41aorbek1m1ata.png-88.1kB

     

    3.22 Docker命令:inspect(查看某个镜像的详细信息)

     

    查看某个镜像的详细信息(json格式)

    docker images

    docker inspect 148

    image_1ctaits9dvqf1c1m17hp2b66astn.png-95.1kB

     

    3.23 Docker命令:kill(强行停止容器)

     

    强行停止一个或多个正在运行状态的容器进程

    docker ps -a

    docker kill ab06a9794e45

    image_1ctaivr6lqvm1bq614e7fdq12g7u4.png-47.5kB

     

    3.24 Docker命令:save(导出镜像)

     

    用于将一个镜像的文件系统导出到本地(export导出的是容器)

    docker images

    docker save test:1 > nginx.tar --->用ID号和镜像名都可以

    ls

    image_1ctaj7di81i78jqkhau161m115nuh.png-40.4kB

     

    3.25 Docker命令:load(导入镜像)

     

    用于将save导出到本地的tar包,重新加载为镜像(和源镜像的名字标识完全一样)

    docker images

    ls

    docker load < test.tar #将之前nginx这个镜像的save备份导入系统

    image_1ctajdjuof1h1dh3b061oujo1uu.png-131.2kB

     

    3.26 Docker命令:logs(看容器日志)

     

    用于输出一个容器进程内的操作日志

    docker ps -a

    docker logs 686

    docker logs --tail 3 686 #只显示容器日志的后3行

    image_1ctajqn891d2h5u1b491pek2u6vr.png-84.6kB

     

    3.27 Docker命令:pause && unpause(暂停和恢复)

     

    用于将一个或多个容器的进程暂停和恢复

    docker ps -a

    docker pause 686 #暂停容器进程

    docker unpause 686 #恢复容器进程

    image_1ctajvfavm6a1je61rfe1jqd1a7p108.png-71.6kB

     

    3.28 Docker命令:port(端口及协议)

     

    用于列出一个容器的端口映射及协议

    docker images

    docker run -dit -p 2222:22 test:1 #启动一个镜像的容器进程 -p

    docker ps -a

    docker port 3b5 #查看容器进程的端口映射及协议

    image_1ctak7egenf1ggq10vqhmi1vka10l.png-74.2kB

     

    3.29 Docker命令:rename(容器重命名)

     

    给容器进程重命名

    docker ps -a

    docker rename nginx_test nginx

    image_1ctakba3h16h518g911lkhfb1e3n112.png-58.5kB

     

    3.30 Docker命令:restart(重启)

     

    重启一个容器进程

    docker ps -a

    docker restart 686

    image_1ctakevl71999jhd4m6ikm5cu11f.png-59.6kB

     

    3.31 Docker命令:stats(容器资源使用情况)

     

    用于时时输出容器的资源使用情况

    docker ps -a

    docker stats 686 --no-stream

    image_1ctakjbsj1hvhmi0vk25g13jd129.png-43.5kB

     

    3.32 Docker命令:tag(克隆镜像)

     

    用于从一个指定的镜像创建另外一个镜像

    docker images

    docker tag 62f test:2 #也可以指定镜像名字

    image_1ctaks2h81ncsc36cpq1r1sfid12m.png-65kB

     

    3.33 Docker命令:top(查看容器进程信息)

     

    用于显示指定容器的进程信息

    docker ps -a

    docker top 686

    image_1ctakvdf617ef1bon1ttpvgm1f08133.png-33.3kB

     

    3.34 Docker命令:update(调整配置)

     

    用于调整一个或多个容器的启动配置

    docker update --help

    image_1ctal14ka139r31915jp1gam1g2p13g.png-67.7kB

     

    3.35 Docker命令:version and wait

     

    version用于显示docker的版本信息

    docker version

    image_1ctal29sgebfi5k1195pv61bbk13t.png-40kB

     

    wait用于捕捉一个或多个容器的退出状态,并返回退出状态码

    docker ps -a

    docker wait 6321c3a3481f #需要在开一个窗口stop这个容器进程再查看

    image_1ctal59q475g5m1m701i3qk414a.png-29.6kB


    image_1ctal5jj35a01flp1le419lg1uje14n.png-35.4kB

     

    3.36 Docker命令:login && logout && push

     

    login用于登陆docker hub官方公有仓库

     

    logout用于登出docker hub官方公有仓库

     

    push用于将本地镜像提交到docker hub

    由于docker hub国内已经无法注册,因此无法演示上述内容

    DockerHub官方公有镜像仓库:https://hub.docker.com/

     

    四,管理应用程序数据

     

    4.1 Volume和Bind Mount

     

    将Docker主机数据挂载到容器

    Docker提供三种不同方式将数据从宿主机挂载到容器中:volumes,bind mounts和tmpfs。

    volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)

    bind mounts:可以存储在宿主机系统的任意位置

    tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统

    image_1crs4o7t8vrbhkh6qs1v7h1os11t.png-64.4kB

     

    4.1.1 Volume(挂载卷)

    docker volume ls

    cd /var/lib/docker/volumes/

    docker volume create nginx-vol

    docker images

    docker run -dit --name nginx-test -p 80:80 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx

    docker exec nginx-test ls /usr/share/nginx/html

    docker exec nginx-test touch /usr/share/nginx/html/xin

    cd nginx-vol/_data

    ls

    curl 127.0.0.1

     
    1. 特别说明
    2. --name #容器的名字
    3. --mount #挂载
    4. src #源卷的名字
    5. dst #挂载到容器中的路径

    image_1ctam33001fl91405t4qneb1rqe154.png-115.2kB

     

    4.1.2 Bind Mounts(绑定目录)

    mkdir -p /www/html

    docker run -dit --name nginx-test1 -p 81:80 --mount type=bind,src=/www/html,dst=/usr/share/nginx/html nginx

    docker ps -a

    docker exec nginx-test1 ls /usr/share/nginx/html

    echo "yunjisuan" > /www/html/index.html

    curl 127.0.0.1:81

    image_1ctamvb00191vfk4q2lqh7orm15h.png-62.2kB

     

    特别提示

    bind mounts可以挂载宿主机上的任意目录(创建的目录要是没有文件绑定以后对方也会没有文件),而volume先得创建后才能挂载

     

    4.1.3 批量删除volume

    使用 docker run -v 启动的容器被删除以后,在主机上会遗留下来孤单的卷。可以使用下面的简单方法来做清理

    docker volume ls -qf dangling=true

    docker volume rm $(docker volume ls -qf dangling=true)

     

    4.2 实战容器部署LNMP网站平台

    首先我们下载一个wordpress博客(上文有所有包)

    wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz

     

    4.2.1 创建MySQL数据库容器

     

    下载MySQL5.6版本镜像

    docker pull mysql:5.6

    docker images --->之前下载过了这里就不重新下载了

    image_1ctap80ko191og8d1bm41ggs11k915u.png-31.4kB

     

    创建一个自定义网络

    docker network create lnmp

    docker network ls

     
    1. b02d86520223 lnmp bridge local #默认驱动为网桥

    image_1ctap9bv1o0n1bqkq4611u1or516b.png-27kB

     

    启动MySQL数据库容器

    docker run -dit --name lnmp_mysql --network lnmp -p 3306:3306 --mount src=mysql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=linyaonie mysql:5.6 --character-set-server=utf8

    docker ps -a

    image_1ctapb3iq1d10lgmco213kaju216o.png-35.5kB

     

    特别提示

     
    1. 自定义网络lnmp如果不提前创建的话,在启动容器进程时会报错
    2. 如果没有提前pullmysql:5.6那么容器在启动时会自动下载对应镜像
    3. 如果没有提前docker volume create mysql-vol,那么容器启动时会自动创建
     

    查看容器lnmp_mysql的日志输出

    docker logs lnmp_mysql

    image_1ctapd4p41rco1t1i8a71udg1e9k175.png-69.6kB

     

    查看容器里启动的进程

    docker top lnmp_mysql

    image_1ctapdkif1c62jg01d511e526dr17i.png-17.3kB

     

    4.2.2 向容器里的Mysql创建一个库并查看

    docker exec lnmp_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"create database wp"'

    docker exec -it lnmp_mysql /bin/bash

    mysql -uroot -plinyaonie -e 'show databases;'

    image_1ctapigb2hk7onb76f5h91gsa17v.png-82kB

     

    4.2.4 创建nginx+PHP环境容器

     

    创建一个网页目录

    mkdir -p /app/wwwroot

    ll -d /app/wwwroot

    image_1ctapjdh71gpb1c4035h2kt107j18c.png-13.8kB

     

    下载richarvey/nginx-php-fpm镜像

    docker pull richarvey/nginx-php-fpm --->之前已经下好了

    docker images

    image_1ctapk2tm13da1hongq95h4rfr18p.png-31.8kB

     

    启动richarvey/nginx-php-fpm镜像的容器

    docker run -dit --name lnmp_web --network lnmp -p 88:80 --mount type=bind,src=/app/wwwroot,dst=/var/www/html richarvey/nginx-php-fpm

    docker ps -a

    image_1ctapl7dl1tp3im5gl413o9h51196.png-39.1kB

     

    4.2.5 解压wordpress到网页目录/app/wwwroot下

    ls

    tar xf wordpress-4.7.4-zh_CN.tar.gz -C /app/wwwroot/

    ls /app/wwwroot/

    echo "yunjisuan" > /app/wwwroot/index.html

    cat /app/wwwroot/index.html

    image_1ctappqrt1fies0r2331ir1cj91at.png-29.7kB

     

    4.2.6 博客wordpress访问测试

    通过浏览器进行docker宿主机的88端口的访问测试

    http://192.168.200.70:88

    http://192.168.200.70:88/wordpress

    image_1ctapqvu9g5f1jnf177a1pv7g6r1ba.png-11.5kB


    image_1ctapn4nqe469u71lrs1k5613891ag.png-84.4kB

     

    特别提示

    如果出现连接不上的情况,那么请按顺序执行以下命令一遍

    systemctl stop firewalld

    systemctl stop iptables.service

    iptables -F

    iptables -P FORWARD ACCEPT

    iptables -P INPUT ACCEPT

    iptables -P OUTPUT ACCEPT

    如果多次连续访问同一网页,那么浏览器有可能默认去掉指定的端口 
    若访问不到,请查看是否指定了88端口

  • 相关阅读:
    web.xml配置详解(转载)
    http协议无状态中的 "状态" 到底指的是什么?!(转载)
    sublime配置python运行环境
    Eclipse下载安装教程
    局域网访问文件共享了访问不了解决方法
    ThreadLocal实现线程级上下文
    Spring中ApplicationEvent和ApplicationListener封装
    MySQL根据出生日期计算年龄的五种方法比较
    常用正则
    java.lang.OutOfMemoryError: PermGen space有效解决方法
  • 原文地址:https://www.cnblogs.com/linyaonie/p/11238347.html
Copyright © 2011-2022 走看看