zoukankan      html  css  js  c++  java
  • docker-基础命令

    docker 容器, 只能启动一个指定的程序, 程序结束, 容器退出

    查看命令: docker --help

       docker run --name centos -d -h centos --rm -v /opt/:/opt/ wenbronk/centos /bin/bash

    总得来说, docker的命令为以下几种: 

    • 容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
    • 容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
    • 容器rootfs命令 — docker [commit|cp|diff]
    • 镜像仓库 — docker [login|pull|push|search]
    • 本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
    • 其他命令 — docker [info|version]

    1, 镜像操作: 

    1, 搜索镜像
    docker search alpine
    2, 下载镜像
    docker pull apline
    3, 查看镜像
    docker images
    4, 删除镜像
    docker rmi apline

    2, 容器操作

    1), 启动容器: 

    a), 输出hellowork, 运行后立马退出

    docker run centos /bin/echo 'helloworld'

    b), 打开终端并保持在容器中

    docker run --name centos -d -it centos /bin/bash

    参数解释:   --name: 指定运行名字, 

           --i: 始终保持链接状态

           -t: 打开伪终端并绑定在docker上

          /bin/bash: 需要执行的命令

    运行的时候, 会先检测有没有镜像, 没有的话自动pull下载

    c), 后台运行:  加 -d

    d), 端口映射: 不加的话, 随机映射, 使用: 

             -p 主机端口:容器端口

    docker run -d --name nginx -p 81:80 nginx

        使用 -p ip:hostPort:containerPort 可以指定主机的多个ip:port

        也可以使用 -p 指定多个 端口

    2, 停止容器

    docker stop CONTAINER_ID | CONTAINE_NAME

    3, 查看容器

    docker ps -a  # -a指查看所有, 不加只查看正在运行的

    4, 进入容器

    docker exec -it /bin/bash CONTAINER_NAME 
    docker attach CONTAIN_ID: 进入后退出, 容器会退出

     -i: 始终打开链接

       -t: 打开伪终端使用绑定在docker上

       /bin/bash: 需要docker容器运行的命令

    使用更好的方式进入容器

    需要工具包:

    yum install -y util-linux

    查看docker 的pid

    docker inspect --format "{{.State.Pid}}" CONTAINER_ID | CONTAINER_NAME

    使用 nsenter 进入容器

    nsenter --target 23907 --mount --uts --ipc --net --pid

    写成脚本链接进容器: 

    # /bin/bash
    CNAME=$1
    if [ ! -n "$1" ]; then
    echo the param CONTAINER_ID or CONTAINER_NAME is must
    exit 0
    fi

    CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME)
    nsenter --target "$CPID" --mount --uts --ipc --net --pid

    5, 启动已经终止的程序

    docker start CONTAIN_ID

    6, 删除容器

    docker rm

    7, 保存正在运行的容器 

    docker commit -m 'yourtags' CONTAINER_ID wenbronk/CONTANER_NAME

    3, docker数据管理

      数据卷是经过特殊设计的容器, 可绕过联合文件系统(UTS), 为一个或多个容器提供服务

      目的是数据的永久化, 完全独立于容器生命周期, 不会存在类似垃圾回收机制

      数据卷容器: --volumes-

      数据卷: -v /data     -v src:dst: 将数据直接写在物理机上, 也可以挂载文件到容器中

        可添加 -v /data:/opt/nginx/log:ro   添加 ro 参数 使得容器内只读

    可通过 docker inspect CONTAINER_ID 查看是否挂载数据卷

    1, 挂载目录或文件, 到docker 容器中 

    docker run -d --name=tomcat -v /b2b:/test -it centos /bin/bash

     此时操作本地的 /b2b 目录, 就会在docker容器下看到 相应的文件管理

    会自动创建  /b2b目录

     2, dockerfile种创建数据卷

    dockerfile中使用 [VOLUME] 挂载数据卷, 但不可以是本地存在的, 启动时会创建相同名字的数据卷

    相同镜像的不同容器, 创建的数据卷不同, 因此使用数据卷容器

    3, 可以使用 volumes-from参数, 将docker容器启动为数据卷容器

      命名的容器挂载数据卷, 其他容器通过挂载容器挂载数据卷, 

    # 启动一个容器作为数据卷容器
    docker run -it -v /b2b:/test --name dataTest centos /bin/bash
    # 启动两外两个容器链接数据卷
    docker run -it --volumes-from dataTest --name db1 centos
    docker run -it --volumes-from dataTest --name db2 centos

    这样 db1 和 db2 都可以访问该目录, 且做的更改对其他容器是可见的

    即使删除了容器  dataTest, db1, 和db2 也可以正常进行数据共享, 数据卷容器的存在仅仅为了配置信息传递

    避免暴露服务器真是路径

    4, 数据备份和恢复

    备份

    docker run --volumes-from dbdata -v $(pwd):/backup --name worker centos tar zcf /backup/backup.tar.gz /dbdata

    创建数据卷容器: 

    docker run -v /dbdata/dbdata --name db centos /bin/bash

    进行数据恢复

    docker run --volumes-from db -v $(pwd):/backup  centos tar xf /backup/backup.tar.gz

     

  • 相关阅读:
    x01.Weiqi.6: 立体棋子
    x01.Game.MapEditor: 地图编辑器
    SQL Server插入中文出现乱码??的解决办法
    Cachecontrol使用:header('Cachecontrol:private')
    验证身份证号码Javascript代码
    .Net GDI+缩放绘图
    Access(JETSQL)问题集锦
    Android开发中Google谷歌地图坐标系怎么转Baidu百度地图坐标系
    21、桥接模式(Bridge模式)详解
    22、装饰模式(装饰设计模式)详解
  • 原文地址:https://www.cnblogs.com/wenbronk/p/8497002.html
Copyright © 2011-2022 走看看