• Docker 常用命令(.NET Core示例)


           本篇文章,整理docker中常用的命令,方便大家学习和命令查询。最后分享一个.NET Core docker部署的示例。

    Docker安装
     
    Docker运行基本命令
    docker [--helper]:显示所有docker命令
    docker [command] --help:显示指定命令的帮助文档
    docker info:显示docker系统信息
    docker version:显示docker版本信息
    docker stats:显示运行的容器占用的容器资源(eg:容器名、cpu、内存、io等)(Ctrl+C退出)
    systemctl status docker:显示docker的运行状态
    systemctl start docker:启动docker
    systemctl stop docker:关闭docker
    systemctl restart docker:重启docker
     
     
    Repository 仓库操作
    docker login -u 用户名 -p 密码 [仓库地址]登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
    docker logout:退出仓库
    docker search [image id or name]:从Docker Hub查找镜像
    docker pull [image id or name]:拉取镜像
    docker tag [local image id or name]:[tag] [registry host]/[镜像仓库]/[image name][:tag]: 标记本地镜像,将其归入某一仓库。
    docker push [image id or name]:推送镜像到Docker Hub
     
    #、示例:推送到阿里云images仓库
    sudo docker login --username=*** registry.cn-shenzhen.aliyuncs.com
    sudo docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/mk-application/mk.admin:[镜像版本号]
    sudo docker push registry.cn-shenzhen.aliyuncs.com/mk-application/mk.admin:[镜像版本号]
    (registry.cn-shenzhen.aliyuncs.com/mk-application/mk.admin 为images仓库地址)
     
    images 操作
    docker tag [image id] REPOSITORY:TAG(仓库:标签):重命名镜像名
    docker images [options]:显示所有镜像文件
    常用OPTIONS说明:
    -a :列出本地所有的镜像
    -f :显示满足条件的镜像;
    -q :只显示镜像ID
    docker image inspect : 获取镜像的元数据。
    docker build [options] [image id or name] . :构建一个镜像。 (注意:最后空格后面有一个.)。
    常用OPTIONS说明:
    --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;
    -f :指定要使用的Dockerfile路径;(默认当前目录的Dockerfile)
    -m :设置内存最大值;
    docker rmi [-f] [image id or name]:删除指定镜像(-f :强制删除)
    docker rmi $(docker images -q):删除所有镜像
    docker commit [container id or name] [image id or name[:tag]]:从容器创建一个新的镜像。
    docker images | grep "redis" :查询所有包含redis的镜像
     
    示例:
    clipboard
    注意:REPOSITORY 列,表示:镜像名称,用于标识镜像
     
    #、镜像归档
    将指定镜像保存成 tar 归档文件
    docker save -o /root/**.tar [image id or name]:
    docker save [image id or name]>/root/**.tar
    导入使用 docker save 命令导出的镜像
    docker load -i /root/**.tar
    docker load</root/**.tar
    从归档文件中创建镜像
    docker import /root/**.tar [image id or name]:从镜像归档文件创建指定命名的镜像
     
     
    container 操作
    docker ps:查看当前运行的容器
    docker ps [OPTIONS]
    常用OPTIONS说明:
    -a:显示所有的容器
    --filter,-f:根据条件过滤显示的内容(eg:-f name=imc.user,过滤容器名字为"imc.user")
    -n:列出最近创建的n个容器
    docker container inspect : 获取容器的元数据。
    docker rename [container id or name] [new Name]:重命名容器名
    docker run [OPTIONS] [image id or name]:创建一个新的容器并运行
    常用OPTIONS说明:
    -d: 后台运行容器,并返回容器ID;
    -p(小写): 指定端口映射,格式为:主机(宿主)端口:容器端口
    -name: 为容器指定一个名称;
    -m :设置容器使用内存最大值;
    --volume , -v: 绑定一个卷
    --restart=always:总是重启容器(eg:重启计算机后自动启动应用)。(Docker容器的重启策略及docker run的--restart选项详解
    docker update [options] [container id or name]:更新容器配置
    常用options说明
    -m:内存限制
    --restart=no|always|on-failure:重启策略
    docker stop [container id or name]:停止运行指定容器
    docker stop $(docker ps -q -f status=running):停掉所有正在运行的容器
    docker start [container id or name]:开启指定容器
    docker restart [container id or name]:重启指定容器
    docker rm [-f] [container id or name]:删除指定容器,加-f参数强制删除
    docker rm $(docker ps -a -q):删除所有停止的容器
     
    #、查看容器内部信息
    docker exec -it [container id or name] bash:在运行的容器中执行bash命令,比如执行ls命令列出目录或者查看文件。(退出容器:Ctrl + D 或 exit)
    docker top [options] [container id or name]:查看容器中运行的进程信息,支持 ps 命令参数。(能否用exec命令代替?不能,因为容器运行时不一定有/bin/bash终端来交互执行top命令,而且容器还不一定有top命令)
    docker pause [container id or name]:暂停容器中所有的进程
    docker unpause [container id or name]:恢复容器中所有的进程
    docker diff [container id or name]:检查容器里文件结构的更改。(相对原始镜像的文件结构)
     
    #、查看容器运行日志
    docker启动后默认日志位置:/var/lib/docker/containers/容器ID/容器ID-json.log
    docker logs [options] [container id or name]:查看指定容器Id的的运行日志
    OPTIONS说明:
    -f : 跟踪日志输出
    --since :显示某个开始时间的所有日志
    -t : 显示时间戳
    --tail :仅列出最新N条容器日志
    示例:
    查看容器mynginx从2016年7月1日后的最新10条日志。
    docker logs --since="2016-07-01" --tail=10 mynginx
     
    #、容器与主机之间的数据拷贝
    docker cp:用于容器与主机之间的数据拷贝。
    docker cp [container id or name]:src_path dest_path
    docker cp src_path [container id or name]:dest_path
     
    volume(数据卷)
    Docker Image可以理解成多个只读文件叠加而成,因此Docker Image是只读的。当我们将其运行起来,就相当于在只读的Image外包裹了一层读写层变成了容器。当你删除容器之后,使用这个镜像重新创建一个容器,此时的镜像的只读层还和原来的一样,但是你在读写层的修改全部都会丢失。
    docker使用volume实现数据的持久化,实现容器和容器之间,容器和host之间共享数据。volume的大小不会被加到容器本身上。
     
    命令
    docker volume create --name [volume name]:创建命名的volume,创建目录默认:/var/lib/docker/volumes/[volume name]/_data/
    docker volume ls:查看当前所有volume
    docker volume inspect [volume name]:查看volume详细信息
    docker volume rm [volume name]:删除volume(没有被容器使用的volume才能被删除)
     
    docker run .... -v 宿主目录文件:容器目录文件 :建立目录或文件的映射
    docker run .... -v [volume name]:容器目录
    docker run .... -v 容器目录 :[自管理卷模式]docker自动创建匿名的volume。默认目录/var/lib/docker/volumes/[container id]/_data。(自管理卷的volume删除方式:删除容器时,加 -v)
    -v 参数的注意事项:
    #、host机器的目录路径必须为全路径(准确的说需要以/或~/开始的路径)
    #、如果host机器上的目录不存在,docker会自动创建该目录
    #、如果container中的目录不存在,docker会自动创建该目录
    #、如果container中的目录已经有内容,那么docker会使用host上的目录将其覆盖掉
    #、linux下 $PWD 是一个系统环境变量,指代当前目录环境
    #、windows下的路径如:D:PycharmProjects 要写为 /d/PycharmProjects
     
     
    示例:docker运行一个 .Net Core 程序
    目录规划:
    ------container // 容器根目录
    --------mk.admin // 容器名
    ----------Logs // 用于映射日志的目录
    ----------Config // 用于映射配置的目录
     
    .NET Core端口设置
    方式一:
         代码中绑定端口,比如新建host.json文件,如下:

        {
           "urls": "http://*:44380"
         }

        image
    方式二、
       在Dockerfile文件中,使用Env设置环境变量

    clipboard

    方式三、
        docker run …… -e "ASPNETCORE_URLS=http://+:44380"
     
    开始进行.NET Core Docker部署:
    第一步:发布.net core应用程序。
    在要发布的项目目录执行如下命令:(或使用vs工具执行发布)
    dotnet publish -f netcoreapp3.1 -o **publishmk.admin
     
    第二步:创建 Dockerfile 定制镜像
    找 dotnet core 需要的运行时基础镜像:docker image:ASP.NET Core Runtime 
    将Dockerfile放在发布目录下(**publishmk.admin)
    内容:
    #第一个指令,FROM 指定基础构建镜像
    #基于 `microsoft/aspnet:3.1` 来构建我们的镜像
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
    
    #拷贝项目publish文件夹中的所有文件到 docker容器中的publish文件夹中  
    COPY . /publish
    
    #设置工作目录为 `/publish` 文件夹,即容器启动默认的文件夹
    WORKDIR /publish
    
    #使用`dotnet ***.dll`来运行应用程序
    ENTRYPOINT ["dotnet", "Mk.Admin.HttpApi.Host.dll"]
     
    第三步:创建镜像、容器
    在发布目录 **publishmk.admin 目录下,执行命令:
    #、构建镜像
    docker build -t img.mk.admin .
    #、创建并运行容器
    docker run --name mk.admin -p 44380:44380 -v /usr/application/Mk.Admin/Logs:/publish/Logs -d --restart=always img.mk.admin
    (数据卷:将宿主机的/usr/application/Mk.Admin/Logs目录映射到容器的/publish/Logs目录,这样就可以在宿主机上查看和删除日志文件)
    #、查看运行中的容器
    docker ps
    
    #、输入地址,查看站点运行状态
     
     
    推荐阅读:
     
     
  • 相关阅读:
    HashMap是无序的
    mysql随笔
    visual stdio 安装OpenGL库文件
    myeclipse解决JSP文件里script背景颜色的调整
    js的鼠标事件整理-------Day47
    Linux环境编程之IPC进程间通信(五):Posix消息队列1
    HDFS 读取、写入、遍历文件夹获取文件全路径、append
    Appfuse搭建过程(下源代码不须要maven,lib直接就在项目里(否则痛苦死!))
    CSS样式命名规则
    关于c++ list容器的操作摸索
  • 原文地址:https://www.cnblogs.com/heyuquan/p/docker-cmd-and-dotnetcore.html
Copyright © 2020-2023  润新知