zoukankan      html  css  js  c++  java
  • dock 安装部署和初级管理命令

    环境:
    CentOS Linux release 7.6.1810 (Core)    #cat /etc/redhat-release
    3.10.0-957.el7.x86_64            #uname -r

    Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。
    社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。
    社区版按照stable和edge两种方式发布,每个季度更新stable版本,如17.06,17.09;每个月份更新edge版本,如17.09,17.10。
    一、docker安装

    yum update        #确保yum包更新到最新
    1、卸载旧版本(如有安装过旧版本)
    yum remove docker docker-common docker-selinux docker-engine
    #yum erase *** 卸载特定软件
    2、安装需要用的软件包,并设置yum源, yum-util提供yum-config-manager功能,另两个软件是devicemapper驱动依赖
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    3、可查看仓库所有docker版本,可选择特定版本安装
    yum list docker-ce --showduplicates | sort -r
    4、安装并加入开机启动,默认repo里只开启了稳定stable仓库
    yum -y install docker-ce
    systemctl start docker
    systemctl enable docker
    5、查看版本及是否成功安装
    docker version

    ##centos6.5+安装
    wget https://yum.dockerproject.org/repo/main/centos/6/Packages/docker-engine-1.7.1-1.el6.x86_64.rpm
    yum -y install docker-engine-1.7.1-1.el6.x86_64.rpm

    二、镜像管理命令
    1、搜索镜像
    docker search centos    #搜索所有的centos的镜像
    2、获取镜像
    docker pull centos    #获取centos镜像
    3、查看本机镜像
    docker images
    4、删除镜像
    docker rmi imageID/imagename    #删除docker镜像
    #删除镜像前先删除依赖镜像的所有容器 docker rm
    5、导出镜像
    docker save 镜像名 >/tmp/docker_name.tar
    docker image save 镜像名 >/tmp/docker_name.tar
    6、导入镜像
    docker load < 镜像
    docker image load < 镜像
    docker image ls #查看导入情况
    7、给镜像打标签
    docker image ls    #查看目前镜像标签
    docker tag centos centos:7.7
    docker image tag nginx:1.11 nginx:1.12

    8、查看pull镜像的版本

    docker image inspect mysql:latest |grep -i version

    三、容器管理
    1、启动容器
    docker create -it centos /bin/bash    #创建一个容器
    docker ps -a                #查看容器状态,目前容器是停止状态
    docker start CONTAINER ID(容器id)    #根据创建容器的id启动
    docker ps -a                #查看容器是否处于运行状态
    docker attach CONTAINER ID(容器id)    #根据id进入启动的容器中
    #可执行相应命令 cal/ls/ps -ef
    exit    #退出容器

    -i, --interactive 交互式
    -t, --tty 分配一个伪终端
    -d, --detach 运行容器到后台
    -a, --attach list 附加到运行的容器
    --dns list 设置DNS服务器
    -e, --env list 设置环境变量
    --env-file list 从文件读取环境变量
    -p, --publish list 发布容器端口到主机
    -P, --publish-all 发布容器所有EXPOSE的端口到宿主机随机端口
    -h, --hostname string 设置容器主机名
    --ip string 指定容器IP,只能用于自定义网络
    --link list 添加连接到另一个容器
    --network 连接容器到一个网络
    --mount mount 挂载宿主机分区到容器
    -v, --volume list 挂载宿主机目录到容器
    --restart string,容器退出时重启策略,默认no [always|on-failure]
    --add-host list 添加其他主机到容器中/etc/hosts
    -m,--memory 容器可以使用的最大内存量
    --memory-swap 允许交换到磁盘的内存量--memory-swappiness=<0-100> 容器使用SWAP分区交换的百分比(0-100,默认为-1--memory-reservation 内存软限制,Docker检测主机容器争用或内存不足时所激活的软 限制,使用此选项,值必须设置低于—memory,以使其优先
    --oom-kill-disable当宿主机内存不足时,内核会杀死容器中的进程。建议设置了memory选项再禁用OOM。如果没有设置,主机可能会耗尽内存
    --cpus 限制容器可以使用多少可用的CPU资源
    --cpuset-cpus 限制容器可以使用特定的CPU
    --cpu-shares  此值设置为大于或小于默认1024值,以增加或减少容器的权重, 并使其可以访问主机CPU周期的更大或更小比例
    创建容器常用选项

    docker run centos /bin/echo "Hello World"
    docker run --name mydocker1 -t -i centos /bin/bash
    ## --name 定义容器名称, -t 分配一个伪终端绑定到容器的标准输入上
    ## -i 让容器的标准输入保持打开,/bin/bash 执行一个命令

    创建容器时,docker后台运行的标准操作包括:
    1、检查本土是否存在指定的镜像,不存在则从公有仓库下载;
    2、利用镜像创建一个容器, 并启动该容器
    3、分配一个文件系统给容器,并在吟诗的镜像层外面挂载一层可读写层;
    4、从宿主主机的网桥接口中桥接一个虚拟接口到容器中;
    5、从网桥的地址池配置一个ip地址给容器;
    6、执行用户指定的应用程序;
    7、执行完毕后容器被自动终止;
    #启动已终止的容器 docker start

    docker ps -a    #查看所有的容器
    docker start CONTAINER ID(容器id)    #启动一个终止的容器
    docker ps    #查看已经启动的容器

    ##守护进程运行(后台运行) -d参数
    docker run -d centos /bin/bash -c "while true;do echo hello world;sleep 1;done"
    docker ps    #查看正在运行的容器
    docker logs container ID(容器id)    #获取容器输出信息

    2、停止容器
    docker ps -a    #查看所有的容器
    docker stop container id    #停止容器
    ##当容器中的指定的应用终结时,容器也会自动终结,当启动一个终端容器,用户通过exit或ctrl+d退出终端,创建的容器也会立刻停止

    3、进入容器

    3.1、attach命令
    docker attach container name/id    #通过attach进入容器
    #当多个终端attach到同一容器时,所有窗口会同步显示,当其中一个终端因命令阻塞,其它窗口也无法执行操作,并且通exit退出后容器自动终止

    3.2、nsenter命令 #需root权限
    yum install -y util-linux
    docker ps -a
    docker inspect -f "{{.State.Pid}}" container id    #找到容器的第一个进程id,后面可容器id或容器名
    nsenter -t 容器第一个进程id -m -u -i -n -p    #通过这个pid连接到容器
    #通过nsenter进入再退出容器还保持在运行状态
    #可通过脚本简化以上两条命令
    cat en_docker.sh
    #!/bin/bash
    #user nsenter to access docker

    docker_in(){
        name_id=$1
        pid=$(docker inspect -f "{{.State.Pid}}" $name_id)
        nsenter -t $pid -m -u -i -n -p
    }
    docker_in $1

    ./en_docker.sh docker name/id    #执行脚本加上容器id或name快速进入

    3.2、exec命令
    docker exec -it dockername /bin/bash
    exit
    docker ps

    4、导出和导入容器
    4.1、导出容器
    docker export dockername > back.tar    #导出一个容器,也可使用docker export -o back.tar dockername
    4.2、导入容器
    cat back.tar |docker import - test/centos:7.6

    5、删除容器
    5.1、删除终止状态的容器
    docker ps -a    #查看当前所有容器状态
    docker rm dockerid    #删除已经停止的容器

    5.2、删除一个运行中的容器,-f参数,docker发送stgkill信号给容器,再进行删除
    5.3、清理所有处于终止状态的容器--->慎用
    docker rm $(docker ps -a -q)    #获取全部容器的id,进行删除
      

    四、docker数据管理
    docker容器中管理数据有两种方式:
    数据卷
    数据卷容器

    1、数据卷
    可供一个或多个容器使用的特殊目录,它饶过ufs,提供以下特性:
    a、数据卷可以在容器之间共享和重用
    b、对数据卷的修改会立马生效
    c、对数据卷的更新,不影响镜像
    d、数据卷默认会一直存在,即使容器被删除

    1.1 管理卷
    docker volume create myvolume    #创建一个数据卷
    docker volume inspect myvolume    #查看数据卷的信息
    docker volume ls        #查看数据卷列表

    1.2 用卷创建一个容器
    docker run -d -it --name mycentos --mount src=myvolume,dst=/data centos    #创建一个mycentos容器,并将myvolume数据卷挂载到容器的/data目录
    docker exec -it mycentos /bin/bash    #进入容器
    ls /data    #查看目录为空

    #在另一个终端创建文件后再查看,有文件
    cd /var/lib/docker/volumes/myvolume/_data  #在另外一个终端进入到数据目录里面
    echo "hello world" >> test.txt    #在数据目录创建一个文件

    #再开一个终端创建一个容器,挂载同样的数据卷,实现共享和重用
    docker run -d -it --name mycentos01 --mount src=myvolume,dst=/data centos
    docker exec -it mycentos01 /bin/bash
    ls /data/    #可发现数据是一样的

    #另一种创建容器直接挂载数据卷,-v 数据卷名字:挂载路径,默认权限是rw,也可指定ro
    docker run -d -it --name mycentos02 -v myvolume:/test:ro centos
    #创建容器,并将数据卷挂载到容器的/test目录
    docker exec -it mycentos02 /bin/bash
    ls /test

    1.3、删除数据卷
    #需先停止使用数据卷的容器,删除容器后才能删除数据卷
    #删除容器不会自动删除数据卷
    docker rm mycentos mycentos01 mycentos02    #删除容器
    docker volume rm myvolume    #删除数据卷

    1.4、挂载一个主机目录到容器中的目录
    docker run -d -ti --name web -v /webapps:/opt/webapps centos
    #创建名叫web的容器,并将宿主机的/webapps目录,挂载到容器中的/opt/webapps
    ls /webapps/    #查看宿主机的目录,如没有会自动创建
    echo "你好" >>/webapps/index.html    #追加一个文件进去
    docker exec -ti web /bin/bash    #进入容器
    cat /opt/webapps/index.html    #查看容器对应目录文件的数据

    1.5、挂载一个宿主机文件作为数据卷
    docker run --rm -it -v ~/.bash_history:/.bash_history centos /bin/bash
    #创建一个容器,并将宿主机的文件挂载到容器的相应文件
    --rm #创建容器时此参数表示容器终止时自动删除


    2、数据卷容器
    # 如有持续更新的数据需在容器间共享,最好创建数据卷容器
    # 数据卷容器就是一个正常的容器,可提供数据卷给其它容器挂载
    docker run -d -v /dbdata --name dbdata centos    #创建一个数据卷容器
    docker run -d -it --volumes-from dbdata --name db1 centos #创建一个db1容器,使用参数--volumes-from来挂载dbdata容器中的数据卷
    docker exec -it db1 /bin/bash    #进入db1容器
    ls    #查看已成功挂载dbdata数据卷
    touch dbdata/filedb1    #在dbdata目录中创建一个文件
    docker run -d -it --volumes-from dbdata --name db2 centos    #创建一个db2容器,继续挂载dbdata容器中的数据卷
    docker exec -it db2 /bin/bash    #进入db2容器中
    ls    #查看也成功挂载dbdata数据卷
    ls dbdata/    #查看db1容器中创建的filedb1文件,看容器间是否数据共享了

    docker run -d -ti --name db3 --volumes-from db1 centos    #创建db3,挂载db1容器的数据卷
    docker exec -it db3 /bin/bash    #进入db3容器中
    ls dbdata/    #查看目录,确认是否有 filedb1文件
    #--volumes-from 挂载的数据卷容器自身需保持运行状态,如删除挂载数据卷容器的其它容器(db1 db2 dbdata),数据卷也不会自动删除,如要删除一个数据卷,必须在删除最后一个还挂载它的容器时使用 docker rm -v来指定同时删除关联的容器


    五、docker网络管理
    1、外部访问容器
    1.1 -P,docker随机映射一个端口到内容容器开放的网络端口
    docker run -d -P --name mynginx nginx:1.12    #创建一个容器,通过-P随机映射宿主机的端口到容器的网络端口
    docker ps    #查看容器信息,有相应宿主机端口到容器端口的映射
    curl localhost:port    #测试是否访问到容器
    docker logs -f mynginx    #查看应用日志

    1.2、-p指定要映射的端口,在一个指定端口上只能绑定一个容器
    ip:hostport:containerport
    docker run -d -p 8080:80 --name mynginx01 nginx:1.12
    docker ps
    docker run -d -p 127.0.0.1:18081:80 --name mynginx02 nginx:1.12
    docker ps
    docker run -d -p 127.0.0.1::80 --name mynginx03 nginx:1.12    #本地任意端口到容器80,宿主机自动分配一个端口
    docker ps
    docker run -d -p 127.0.0.1:8081:80/udp --name mynginx04 nginx:1.12    #映射8081到容器80,并指定udp

    1.3 查看映射端口配置
    docker port mynginx01
    docker inspect #可获到容器内部网络地址所有变量
    docker run -d --name mynginx05 -p 8082:80 -p 8083:443 nginx:1.12 #多次使用-p,同时绑定多个端口
    docker ps

    2、容器互联
    2.1 --link参数让容器之间安全进行交互
    docker run -e MYSQL_ROOT_PASSWORD=123456 -d --name mydb mysql    #创建一个新数据库容器
    docker run -d -P --name myweb --link mydb:db nginx:1.12    #创建一个web容器,并连接到mydb数据库容器
    docker ps
    ##避免暴露数据库端口到外部网络上

    docker run --rm --name myweb1 --link mydb:db nginx:1.12 env    #创建web容器,连接到mydb,查看web容器的环境变量
    docker run --rm -ti --name myweb2 --link mydb:db nginx:1.12 /bin/bash    #创建web容器,同样连接mydb
    cat /etc/hosts
    #host信息被添加到父容器的/etc/hosts文件


  • 相关阅读:
    vue项目搭建
    iview在ie9及以上的兼容问题解决方案
    中山大学校队内部选拔赛试题试题2【New Year Gift】--------2015年2月8日
    中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日
    ZOJ2812------2015年2月4日
    C++STL泛型编程基础知识讲解--------2015年2月3日
    中山大学校队选拔赛第一章题4【简单数迷Simple Kakuro】-------2015年1月28日
    UVALive
    UVA11375【火柴拼数Matches】-------2015年1月27日
    递推关系的运用加简单DP【UVA11137Ingenuous Cubrency】-------2015年1月27日
  • 原文地址:https://www.cnblogs.com/xiefugui/p/12118633.html
Copyright © 2011-2022 走看看