一文掌握 Docker 常用命令

 

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

       容器在整个应用程序生命周期工作流中提供以下优点:隔离性、可移植性、灵活性、可伸缩性和可控性。 最重要的优点是可在开发和运营之间提供隔离。

 

Docker安装
CentOS Docker 安装
Docker Compose linux安装
Docker 安装或升级
安装 Docker Desktop for Mac、Docker Desktop for Windows
Windows Server 2019 安装Docker
5步搞定 Windows 10 docker WSL2的镜像存储位置的修改
windows版 docker 配置镜像加速
加速
docker国内镜像加速
.Net Core:Docker无法拉取mcr.microsoft.com相关镜像解决办法
.dockerignore 文件的作用
Docker Hub
 
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 Hub
docker login -u 用户名 -p 密码 [仓库地址]登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker logout:退出仓库
docker search [image id or name]:从Docker Hub查找镜像。(返回的name,可以执行docker pull name拉去镜像)
docker pull [image id or name]:拉取镜像
Docker中latest标签引发的困惑
关于docker latest tag (docker image有一个tag叫做latest,latest通过最近一次没有指定版本的build或tag来生成)
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 or name] 账户名/REPOSITORY:TAG(仓库:标签):给镜像重命名和打新的tag
docker images [options]:显示所有镜像文件
常用OPTIONS说明:
-a :列出本地所有的镜像
-f :显示满足条件的镜像;
-q :只显示镜像ID
docker [image] inspect [image id or name] : 获取镜像的元数据。
docker build [options] [image id or name] . :构建一个镜像。 (注意:最后空格后面有一个.)。
常用OPTIONS说明:
--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;
-f :指定要使用的Dockerfile路径;(默认当前目录的Dockerfile)
-m :设置内存最大值;
docker build 后面的 . ,实际上是镜像构建上下文。
参考:docker 镜像构建上下文理解
想查看docker构建时上下文的临时文件,在windows中可以查看目录:C:\ProgramData\Docker\tmp
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的镜像
docker run -it --entrypoint sh <image name>:进入镜像,可以查看里面有些什么文件。eg:ls
docker history [image id or name]:查看镜像构建历史
 
示例:
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 [container id or name] : 获取容器的元数据。(eg:容器ip地址)
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 run的--rm选项详解
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命令(一些docker没有安装bash,可以改为sh),比如执行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
 
#、容器与主机之间的数据拷贝
对于没有运行的容器,或者运行失败的容器,可以通过cp命令把文件拷贝到本机,再查问题
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 volume rm $(docker volume ls -qf dangling=true):删除所有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 desktop 挂在文件时:exception Filesharing has been cancelled
Docker volume 挂载时文件或文件夹不存在

文件夹挂载
    #、允许不存在的文件夹或者存在的空文件夹挂载进container, container中对应的文件夹将被清空
    #、非空文件夹挂载进container将会覆盖container中原有文件夹
文件挂载
    #、禁止将不存在的文件挂载进container中已经存在的文件上
    #、存在的文件挂载进container中将会覆盖container中对应的文件, 若文件不存在则新建

 
迁移操作
docker镜像容器目录迁移
win10上修改docker的镜像文件存储位置
 
镜像迁移
Docker容器中的备份、恢复、迁移、导入、导出
Docker迁移与备份
Docker中Image、Container与Volume的迁移
 
示例:docker运行一个 .Net Core 程序
目录规划:
------container // 容器根目录
--------mk.admin // 容器名
----------Logs // 用于映射日志的目录
----------Config // 用于映射配置的目录
 
Visual Studio 中的容器工具
 
.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 **\publish\mk.admin
 
第二步:创建 Dockerfile 定制镜像
找 dotnet core 需要的运行时基础镜像:docker image:ASP.NET Core Runtime 
将Dockerfile放在发布目录下(**\publish\mk.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"]
 
第三步:创建镜像、容器
在发布目录 **\publish\mk.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
#、输入地址,查看站点运行状态
另外: 《传统.NET Framework容器化》,使用docker和Windows容器
 
容器的内存相关
优化 ASP.NET Core Docker 镜像的大小
.NET 6 的 docker 镜像可以有多小
Docker查看应用的实际内存
 
其他设置
cpu
如何给docker容器分配内存和cpu
cpu docker 内存限制 docker限制cpu使用率
Docker中如何限制容器可用的 CPU
docker网络模式(host,bridge,none,container,overlay)
如何优雅的关闭容器
容器的退出方式和差异
容器内操作命令报权限问题;容器挂在目录报权限问题等
在docker容器中执行apt install安装报错(13: Permission denied)
docker 命令报异常permission denied的解决方案
 
推荐阅读:
Iaas、Saas、Paas服务模式
Docker可视化管理工具:Portainer
优化您的部署:Docker 镜像最佳实践
docker volume
Docker Dockerfile
dockerfile中ENTRYPOINT与CMD的结合
清理
docker system prune 清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)
docker system prune -a 清理得更加彻底,可以将没有容器使用Docker镜像都删掉。
Docker磁盘占用与清理问题 (未使用、none、占用过高等)
Docker清理Overlay2占用磁盘空间的问题
网络
docker容器网络
Docker 容器连接((1)映射到主机localhost端口。(2)连接到同一个network)
Docker 容器抓包
容器互联互通(network connect)
Docker Compose
Docker Compose常用命令
Docker 与 Docker Compose版本对应关系
docker-compose yml文件详解
在docker compose中更改文件夹名称前缀做为容器名称
docker-compose 多个-f 参数以及config命令(多个配置文件)
两种方法在docker-compose.yml中使用参数
第一种:在.env文件中定义它
第二种:运行docker-compose命令时,以命令行参数发送.例如 docker-compose up -d --build-arg key=val...
docker compose 服务启动顺序控制
docker compose 启动部分服务
ASP.NET CORE在docker中的健康检查(healthcheck)
都知道不建议在Docker中运行MySQL,你知道为什么吗?
Abp Dockerfile
 
 
posted on 2020-04-14 22:27  滴答的雨  阅读(5078)  评论(18编辑  收藏  举报