zoukankan      html  css  js  c++  java
  • Docker使用整理

    Docker技术的基础:

    namespace,容器隔离的基础,保证A容器看不到B容器. 6个名空间:User,Mnt,Network,UTS,IPC,Pid

    cgroups,容器资源统计和隔离。主要用到的cgroups子系统:cpu,blkio,device,freezer,memory

    unionfs,典型:aufs/overlayfs,分层镜像实现的基础

    Docker常见命令

    容器相关操作

    注意run的时候有两个常用参数

    docker run --name xxx -d -p 5000:5000 镜像地址

    这里写了个-d,目的是后台运行,也可以写-it,就是运行,会输出代码里的console.writeln()。

    docker create # 创建一个容器但是不启动它
    docker run # 创建并启动一个容器
    docker stop # 停止容器运行,发送信号SIGTERM
    docker start # 启动一个停止状态的容器
    docker restart # 重启一个容器
    docker rm # 删除一个容器
    docker kill # 发送信号给容器,默认SIGKILL
    docker attach # 连接(进入)到一个正在运行的容器
    docker wait # 阻塞到一个容器,直到容器停止运行

    获取容器相关信息

    docker ps # 显示状态为运行(Up)的容器
    docker ps -a # 显示所有容器,包括运行中(Up)的和退出的(Exited)
    docker inspect # 深入容器内部获取容器所有信息
    docker logs # 查看容器的日志(stdout/stderr)
    docker events # 得到docker服务器的实时的事件
    docker port # 显示容器的端口映射
    docker top # 显示容器的进程信息
    docker diff # 显示容器文件系统的前后变化

    导出容器

    docker cp # 从容器里向外拷贝文件或目录
    docker export # 将容器整个文件系统导出为一个tar包,不带layers、tag等信息

    执行

    docker exec -it containerid /bin/bash # 在容器里执行一个命令,可以执行bash进入交互式

    镜像操作

    在利用docker对打包文件进行docker包装时,注意

    docker build -t 打包的名字 .  (注意最后的空格和.)

    这里的原因是打包的build命令需要的是dockerfile的文件目录,默认.是当前的目录,可以自行修改。

    docker images # 显示本地所有的镜像列表
    docker import # 从一个tar包创建一个镜像,往往和export结合使用
    docker build # 使用Dockerfile创建镜像(推荐)
    docker commit # 从容器创建镜像,可以把修改过的容器再打包成镜像
    docker rmi # 删除一个镜像
    docker load # 从一个tar包创建一个镜像,和save配合使用
    docker save # 将一个镜像保存为一个tar包,带layers和tag信息
    docker history # 显示生成一个镜像的历史命令
    docker tag # 为镜像起一个别名

    镜像仓库(registry)操作

    docker login # 登录到一个registry
    docker search # 从registry仓库搜索镜像
    docker pull # 从仓库下载镜像到本地
    docker push # 将一个镜像push到registry仓库中

    获取Container IP地址(Container状态必须是Up)

    docker inspect id | grep IPAddress | cut -d '"' -f 4

    获取端口映射

    docker inspect -f '{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' id

    获取环境变量

    docker exec container_id env

    杀掉所有正在运行的容器

    docker kill $(docker ps -q)

    删除老的(一周前创建)容器

    docker ps -a | grep 'weeks ago' | awk '{print $1}' | xargs docker rm

    删除已经停止的容器

    docker rm `docker ps -a -q`

    删除所有镜像,小心

    docker rmi $(docker images -q)

    那么如何打包docker呢,java和netcore类似

    java下

    Dockerfile
    FROM frolvlad/alpine-oraclejdk8
    COPY . /publish
    #设置工作目录为 `/publish` 文件夹,即容器启动默认的文件夹
    WORKDIR /publish
    #设置Docker容器对外暴露80端口
    EXPOSE 8080
    ENTRYPOINT ["java","-jar","boot-security-1.0.jar"]

    netcore下

    "#基于 `microsoft/dotnet:1.0.0-core` 来构建我们的镜像
    FROM microsoft/aspnetcore:latest
    #拷贝项目publish文件夹中的所有文件到 docker容器中的publish文件夹中 
    COPY . /publish
    
    #设置工作目录为 `/publish` 文件夹,即容器启动默认的文件夹
    WORKDIR /publish
    
    #设置Docker容器对外暴露80端口
    EXPOSE 80
    
    #使用`dotnet HelloWebApp.dll`来运行应用程序
    ENTRYPOINT [""dotnet"", ""NetCore.dll""]"

    常用的一套

    #进入文件打包的路径,包含有Dockerfile的目录下
    cd XXX
    #打包docker,注意有个空格 .
    docker build -t ImageName .
    #包打一个tag
    docker tag ImageName AliyunImageRegistryUrl
    #docker包推送到阿里云镜像仓库中
    docker push AliyunImageRegistryUrl
    #停止现有的容器(如果有的话)
    docker stop ContainerName
    #删掉容器
    docker rm ContainerName
    #删掉镜像
    docker rmi AliyunImageRegistryUrl
    #运行该镜像,如果没有docker自己会尝试下载
    docker run --name ContainerName -d -p 5000:5000 AliyunImageRegistryUrl

     如果想要开机自启动容器,则需要在创建容器的时候增加参数 --restart=always

    但是如果是修改已创建的容器,则可以执行修改,其中xxx是容器id

    docker update --restart=always xxx

     启动docker

    systemctl start docker
  • 相关阅读:
    单词接龙
    洛谷 P1015 回文数
    洛谷 P1012 拼数
    codevs 2780 ZZWYYQWZHZ
    专项练习之字符串
    模拟题1
    专项训练之线段树
    复习题之求后序遍历
    复习题之二叉树的遍历
    Hdu 3037 Saving Beans(Lucus定理+乘法逆元)
  • 原文地址:https://www.cnblogs.com/Rexcnblog/p/11168431.html
Copyright © 2011-2022 走看看