• 43_Docker概述、部署Docker、Docker镜像、Docker基本命令


    1.安装Docker
    准备两台虚拟机,IP为10.10.11.10和10.10.11.20
    安装docker-engine 和 docker-engine-selinux
    关闭防火墙
     
    1.1 配置yum源
     
    1)配置第三方yum源(真机操作)
    ]# mkdir /var/ftp/docker
    ]# mv docker-engine-* /var/ftp/docker
    ]# ls /var/ftp/docker
    docker-engine-1.12.1-1.el7.centos.x86_64.rpm
    docker-engine-selinux-1.12.1-1.el7.centos.noarch.rpm
     
    ]# createrepo /var/ftp/docker/
     
    2)配置IP(虚拟机配置静态ip)docker1和docker2主机同样操作
    ]# echo docker1 > /etc/hostname
    ]# hostname docker1
    ]# echo docker2 > /etc/hostname
    ]# hostname docker2
     
    docker1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
    # Generated by dracut initrd
    DEVICE="eth0"
    ONBOOT="yes"
    IPV6INIT="no"
    IPV4_FAILURE_FATAL="no"
    NM_CONTROLLED="no"
    TYPE="Ethernet"
    BOOTPROTO="static"
    IPADDR="10.10.11.10"
    PREFIX="24"
    GATEWAY="10.10.11.1"
    docker1 ~]# systemctl restart network
     
    docker2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
    # Generated by dracut initrd
    DEVICE="eth0"
    ONBOOT="yes"
    IPV6INIT="no"
    IPV4_FAILURE_FATAL="no"
    NM_CONTROLLED="no"
    TYPE="Ethernet"
    BOOTPROTO="static"
    IPADDR="10.10.11.20"
    PREFIX="24"
    GATEWAY="10.10.11.1"
    docker2 ~]# systemctl restart network
     
    3)配置yum客户端(docker1和docker2主机同样操作)
    docker1 ~]# vim /etc/yum.repos.d/local.repo
    [local_repo]
    name=CentOS-$releasever - Base
    baseurl="ftp://192.168.1.254/system"
    enabled=1
    gpgcheck=0
    [loca]
    name=local
    baseurl="ftp://192.168.1.254/docker"
    enabled=1
    gpgcheck=0
     
    docker2 ~]# vim /etc/yum.repos.d/local.repo
    [local_repo]
    name=CentOS-$releasever - Base
    baseurl="ftp://192.168.1.254/system"
    enabled=1
    gpgcheck=0
    [loca]
    name=local
    baseurl="ftp://192.168.1.254/docker"
    enabled=1
    gpgcheck=0
     
    4)安装docker(docker1和docker2主机同样操作)
    ]# yum -y install docker
    ]# systemctl start docker
    ]# systemctl enable docker
    ]# ifconfig     //有docker0说明环境部署完成
    docker0: flags=4099  mtu 1500
            inet 172.17.0.1  netmask 255.255.0.0 ...
     
    ]# docker version  //查看版本
    Client:
     Version:         1.13.1
     API version:     1.26
     Package version: docker-1.13.1-108.git4ef4b30.el7.centos.x86_64
     Go version:      go1.10.3
     Git commit:      4ef4b30/1.13.1
     Built:           Tue Jan 21 17:16:25 2020
     OS/Arch:         linux/amd64

    Server:
     Version:         1.13.1
     API version:     1.26 (minimum version 1.12)
     Package version: docker-1.13.1-108.git4ef4b30.el7.centos.x86_64
     Go version:      go1.10.3
     Git commit:      4ef4b30/1.13.1
     Built:           Tue Jan 21 17:16:25 2020
     OS/Arch:         linux/amd64
     Experimental:    false

    2.镜像基本操作

    ************************************
    阿里云镜像加速器
    准备:
    1. 首先进入阿里云的docker库https://www.aliyun.com/product/kubernetes?spm=5176.10695662.1362911.1.3cab795d6uoX0P
    2. 注册登陆成功之后,选择“容器镜像服务”控制台
    3. 选择镜像加速器
     
    4. 修改文件“/etc/docker/daemon.json”(如果没有此文件,可以手动创建空文件)
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    ************************************

    导入镜像
    导出镜像
    启动镜像
     
    2.1 docker镜像
    ]# docker images 查看镜像
    1)下载镜像
    docker1 ~]# docker pull busybox
    2)上传镜像
    docker1 ~]# docker push busybox
    3)查看镜像
    docker1 ~]# docker images
    REPOSITORY          TAG      IMAGE ID        CREATED        SIZE
    docker.io/busybox   latest   6d5fcfe5ff17    2 months ago   1.22 MB

    4)查找busybox镜像
    docker1 ~]# docker search busybox
    5)导出busybox镜像为busybox.tar
    docker1 ~]# docker save busybox:latest >busybox.tar
    docker1 ~]# ls
    busybox.tar  
    6)导入镜像
    docker1 ~]# scp busybox.tar 10.10.11.20:/root
    docker2 ~]# ls
    busybox.tar  
    docker2 ~]# docker load < busybox.tar
    7)删除镜像
    docker2 ~]# docker rmi busybox
     
    2.2 一次性导入多个镜像
    docker1 ~]# yum -y install unzip
    docker1 ~]# unzip docker_images.zip
    docker1 ~]# ls
    busybox.tar  docker_images  docker_images.zip  eip
    docker1 ~]# cd docker_images
    images]# ls
    centos.tar  nginx.tar redis.tar registry.tar  ubuntu.tar
    images]# for i in *; do docker load <$i; done
    images]# docker images
    REPOSITORY          TAG     IMAGE ID      CREATED          SIZE
    docker.io/ubuntu    latest  72300a873c2c  4 days ago       64.2 MB
    docker.io/nginx     latest  2073e0bcb60e  3 weeks ago      127 MB
    docker.io/centos    latest  470671670cac  5 weeks ago      237 MB
    docker.io/busybox   latest  6d5fcfe5ff17  2 months ago     1.22 MB

    2.3 启动镜像
     
    1)启动centos镜像生成一个容器
    启动镜像时若不知道后面的命令加什么:
    1、可以猜(如:/bin/bash、/bin/sh)
    2、可以不加后面的命令,默认启动
    docker run -it 镜像的名称:标签 命令(容器内的命令)
    images]# docker run -it centos [/bin/bash]
     
    容器内:
    [root@bc8958e03d55 /]# ls
    bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

    [root@bc8958e03d55 /]# cd /etc/yum.repos.d/
    repos.d]# ls
    repos.d]# rm -rf C*
    repos.d]# vi dvd.repo    //在容器里面配置一个yum源
    [local]
    name=local
    baseurl=ftp://10.10.11.1/system
    enable=1
    gpgcheck=0
    repos.d]# yum -y install net-tools  //安装软件
    repos.d]# ifconfig
    ...inet 172.17.0.2
    repos.d]# exit
    exit
     
    3.镜像与容器常用指令
    镜像常用指令练习
    容器常用指令练习
     
    3.1 镜像常用命令
     
    images]# docker run -it xxx:latest (默认的)

    1)查看后台运行的容器
    docker1 ~]# docker run -d nginx  //启动nginx的镜像
    docker1 ~]# docker ps   //查看后台运行的容器
    CONTAINER ID  IMAGE   COMMAND                  CREATED           STATUS          PORTS   NAMES
    40c51d5c08d4  nginx   "nginx -g 'daemon ..."   15 seconds ago    Up 14 seconds   80/tcp  jovial_morse

    2)只显示容器ID
    images]# docker ps -q
    40c51d5c08d4
     
    3)显示所有的容器,包括没有启动的
    images]# docker ps -a(all)
     
    4)显示所有的容器ID
    images]# docker ps -qa
    40c51d5c08d4
    bc8958e03d55
     
    5)查看centos镜像历史(有几层)
    images]# docker history centos
     
    6) 查看镜像详细信息
    images]# docker inspect centos
    Cmd...(默认启动命令)
    Env...启动镜像以后,设置启动的变量
     
    7)删除镜像,如果用镜像启动过容器,删除镜像会失败,先删除容器,再删除镜像
    格式:docker rmi 镜像名
    images]# docker rmi nginx  //nginx为镜像名
    Error...删除时报错
     
    停止容器
    images]# docker stop 40c51d5c08d4
    删除容器
    images]# docker rm 40c51d5c08d4
    删除镜像
    images]# docker rmi nginx
    Deleted: ...
     
    8)修改镜像的名称和标签,默认标签为latest
    images]# docker tag centos:latest cen:v1
     
    9)修改镜像的标签
    images]# docker tag centos:latest cen:v1
    images]# docker images
    images]# docker rmi centos    //删除centos
     
    images]# docker run -it centos
    ... Downloaded newer image for centos:latest
    //启动的时候,因为是用标签标签启动的,所以会重新通过ID下载
    images]# docker run -it cen:v1   
    //通过新建的标签启动cen:v1,进入容器
     
    3.2 容器命令
     
    1)关闭容器
    命令:docker stop 容器ID
    images]# docker stop aca60f23b01b
     
    2)启动容器
    images]# docker start aca60f23b01b
     
    3)重启容器
    images]# docker restart aca60f23b01b

    4)删除容器
    运行中删除不掉,先关闭容器 0f为容器ID
    images]# docker rm ac     //删除失败
    images]# docker stop ac   //关闭容器
    images]# docker rm ac     //删除成功
     
    5)连接容器 attach(退出时,容器关闭) | exec(退出时,容器不关闭)
    images]# docker attach c5eb0cb9cb57
    images]# docker ps     //容器关闭
     
    images]# docker exec -it c5 /bin/bash
    images]# docker ps     //容器不会关闭                               
     
    images]# docker top $(docker ps -aq)      //查看容器进程列表
    images]# docker run -itd centos:latest
    images]# ps
     
    images]# docker exec -it c5eb0cb9cb57 /bin/bash
    root@85c6b0b62235:/# sleep 50 &
    [1] 9
    root@85c6b0b62235:/# exit
    exit
    images]#docker top c5
    UID    PID  PPID C   STIME     TTY         TIME      CMD
    root  2744 2729  0   18:01    pts/4  00:00:00   /bin/bash
     
    6)过滤查看mac和ip地址
    images]# docker inspect -f '{{.NetworkSettings.MacAddress}}' c5eb0cb9cb57
    02:42:ac:11:00:02
    images]# docker inspect -f '{{.NetworkSettings.IPAddress}}' c5eb0cb9cb57
    172.17.0.2
     
    7)修改nginx的显示内容
    images]# docker run -it nginx:latest
    images]# docker exec -it 9413edfbedea /bin/bash
    ea:/# nginx -T /usr/share/nginx/html/
    nginx: invalid option: "/usr/share/nginx/html/"   //查找并显示结果
    ea:/# echo  aaa > /usr/share/nginx/html/index.html
     
    //修改主页显示的内容
    ea:/# nginx -T
    ea:/# cat /usr/share/nginx/html/index.html
    aaa
     
    8)过滤查看nginx的ip地址
    docker1 ~]# docker inspect -f '{{.NetworkSettings.IPAddress}}' 9413edfbedea
    172.17.0.4
    docker1 ~]# curl 172.17.0.4
    aaa
     
    #################################
    总结:
     
    1.容器技术,Docker是实现容器技术的一种手段。
    对资源切分和利用的手段,核心手段是:
    资源管理(Cgroups)、进程隔离(NameSpace)、SELinux安全,让用户更加方便的使用容器技术,而不关心底层内核技术。
     
    2.Docker优点
    虚拟机里启动虚拟机为什么性能很差,因为新启动的虚拟机CPU不能支持VMX硬件虚拟化技术,使用容器技术可以解决这一问题。
    Docker使用的宿主机共享公共库和程序。
     
    3.Docker缺点
    容器的隔离性没有虚拟化强;功用Linux内核,安全性差;SELinux难以驾驭;容器监控和排错难度大(弹性)。
     
    4.镜像与容器
    镜像==模板(后端盘)
    容器==虚拟机(img,xml都是docker管理)
     
    docker镜像采用分层设计,利用后端盘映射前端盘,叠加前端盘为镜像,再创建(多个)前端盘,使用快照的COW技术,确保底层数据不丢失。
     
    Docker镜像仓库:https://hub.docker.com
    镜像的唯一性:镜像+标签
     
    5.docker run 注意事项
    ducker run -it 启动的是交互式进程(如: /bin/bash)
    ducker run -itd 启动的是进程(如: nginx,redis)
    docker attach/exec 是针对ducker run -itd 这种启动的是进程的容器设置的
    ###########################

  • 相关阅读:
    编译安装httpd
    ANSIBLE安装和常用模块模块使用详细教程
    MySQL集群高可用
    MySQL数据库备份和恢复
    MySQL数据库多表查询
    MySQL语句使用。
    MySQL多实例安装教程
    二进制安装MySQL数据库
    半自动化系统安装
    c语言分别用库函数和系统函数来进行文件操作效率对比
  • 原文地址:https://www.cnblogs.com/luwei0915/p/12368588.html
Copyright © 2020-2023  润新知