tnblog
首页
视频
资源
登录

docker常用命令

5829人阅读 2020/4/10 16:51 总访问:3464680 评论:1 收藏:0 手机
分类: docker

Docker远征

Docker简单命令整理清单

Login 获取账户信息

获取账户信息

  1. docker info | sed '/Username:/!d;s/.* //'

  1. username=$(docker info | sed '/Username:/!d;s/.* //');
  2. echo $username

登录账户

  1. docker login hub.docker.com

Images 镜像相关操作

获取本地镜像

  1. docker images

搜索镜像

  1. docker search <ImageName>

下载镜像到本地

  1. docker pull <url>

上传到Hub官网上

  1. docker push <Username>/<PacketName>:<Tag>

《 注意:格式规范 》

删除本地镜像

  1. docker rmi <ImageId>
  2. docker rmi <ImageId1> <ImageId2> <ImageId3>

问题一 : Error response from daemon: conflict: unable to delete c625e22473f6 (must be forced) - image is being used by stopped container 1c5efd98650e

当我们使用命令删除镜像时报这个错,请执行
docker rmi -f <ImageId>

更多包资源请访问 Hub官网

Build 相关操作

生成命令

  1. docker build -t <Username>/<ProjectName>:<Tag> <ProjectAddress>

举例

  1. docker build -t aidasi/demo1:v1 .

Tag 相关操作

剪切新的包

  1. docker tag <OldPacketName>:<Tag> <UserName>/<NewPacketName>:<Tag>

举例

  1. docker tag Demo1:v1 aidasi/demo1:v1

Network 相关操作

列出主机上的所有网络

  1. docker network ls

创建网络

  1. docker network create <NetworkName>

运行应用添加指定网络

  1. docker run -d -p <OutPort>:<InPort> --name <ContainerName> --net=<NetworkName> <PacketName>

将容器与指定网络断开

  1. docker network disconnect <NetworkName> <ContainerName>

给运行的容器添加网络

  1. docker network connect <NetworkName> <ContainerName>
  2. 还可以给网络创建别名
  3. docker network connect --alias <AliasName> <NetworkName> <ContainerName>

让容器与容器之间连接

  1. docker run -d -p 5001:80 --name aspnetcore --link <ContainerName2>:addb <ContainerName1>:<Tag>

我们可以浏览网络以查看连接了哪些容器及其IP地址

  1. docker network inspect <NetworkName>

Volume 卷存储

容器共享卷

  1. docker run ... --volumes-from <ContainerName>..

持久存储卷

  1. docker run -v <LocalPath>:<ContainerPath> ....
  2. 如果只需要只读
  3. docker run -v <LocalPath>:<ContainerPath>:ro ....

yml

  1. volumes:
  2. data-volume:
  3. driver: local
  4. driver_opts:
  5. type: none
  6. device: $PWD/logs
  7. o: bind

Log 获取日志信息

生成命令

  1. docker logs <ContainerName>

将容器日志转为系统日志记录

  1. docker run ... --log-driver=syslog
  2. 如何读取
  3. 参考链接如下??https://www.jianshu.com/p/038738073103

日志跟踪

  1. docker logs --follow <ContainerName>

当改为none后将禁用日志输出

  1. --log-driver=none

关于容器相关操作

查看当前所有所有为运行状态的容器

  1. docker ps

查看所有容器

  1. docker ps -A

运行应用到容器

  1. docker run -d -p <OutPort>:<InPort> --name <ContainerName> <PacketName>

停止运行的容器

  1. docker stop <ContainerId>

删除运行的容器

  1. docker rm <ContainerId>
  2. docker rm <ContainerId1> <ContainerId2> <ContainerId3>

导出与导入容器

导出容器

  1. docker export <ContainerName> > <ContainerName>.tar

导入容器

  1. docker import <ContainerName>.tar

导出与导入镜像

导出镜像

  1. docker save <ContainerName> > <ContainerName>.tar

导入镜像

  1. docker load <ContainerName>.tar
  2. ctr image import ingresscontrl.tar
  3. ctr image import ingresswebhook.tar

设备与读写

假设硬盘设备为 /dev/nvme0n1

访问特定的设备

  1. docker run --device=/dev/nvme0n1:/dev/nvme0n1 ...

限制写入速率(每秒IO)到设备。数字是一个正整数。

  1. # <device-path>:<number>
  2. #例如,该命令创建一个容器并将写入速率限制为每秒 3/IO
  3. docker run --device-write-iops /dev/nvme0n1:3 ...

限制来自设备的读取速率(每秒IO)数字是一个正整数。

  1. # <device-path>:<number>
  2. #例如,该命令创建一个容器,并且限制了读出速度,以 3/IO 每秒
  3. docker run --device-read-iops /dev/nvme0n1:3 ...

导出与导入镜像

导出镜像

  1. docker save -o <Name>.tar <ImageName>:<Tag>
  2. docker save > <Name>.tar <ImageName>:<Tag>

导入容器

  1. docker load -i <Name>.tar
  2. docker load < <Name>.tar

进入容器内部

  1. sudo docker exec -it <ContainerID> /bin/bash

查看CPU与IO状态

  1. # 查看单个容器情况
  2. docker stats <ContainerName>
  3. # 查看所有容器状态
  4. docker stats

容器运行时特殊参数

privileged使用该参数,container内的root拥有真正的root权限。privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。

  1. docker run --privileged ...

-d 设置要读取的磁盘,默认前缀为 /dev/sd 或者 /dev/xvd 的磁盘

  1. docker run -d /dev/sdb

-s 设置每次读取的数据量大小,单位为字节,默认为 67108864(也就是 64MB

  1. docker run -s 67108864

-c 设置每个子进程读取的次数,默认为 20 次,也就是读取 20*64MB 数据后子进程退出

  1. docker run -c 20

Docker-Compose的操作

启动

  1. docker-compose up

停止容器

  1. docker-compose down

停止容器并且移除数据

  1. docker-compose down -v

关于.NetCore中的DockerFile如下

Dockerfile

  1. FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
  2. WORKDIR /app
  3. EXPOSE 80
  4. EXPOSE 443
  5. FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
  6. WORKDIR /src
  7. COPY . k8s-demo/
  8. RUN pwd
  9. RUN ls
  10. RUN dotnet restore "k8s-demo/k8s-demo.csproj"
  11. COPY . .
  12. WORKDIR "/src/k8s-demo"
  13. RUN pwd
  14. RUN ls
  15. RUN mkdir -p /app/build
  16. RUN mkdir -p /app/publish
  17. RUN dotnet build "k8s-demo.csproj" -c Release -o /app/build
  18. FROM build AS publish
  19. RUN dotnet publish "k8s-demo.csproj" -c Release -o /app/publish
  20. FROM base AS final
  21. WORKDIR /app
  22. COPY --from=publish /app/publish .
  23. ENTRYPOINT ["dotnet", "k8s-demo.dll"]

项目中简单点

  1. FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
  2. WORKDIR /code
  3. COPY *.csproj ./
  4. RUN dotnet restore
  5. COPY . .
  6. RUN dotnet publish -c Release -o out
  7. FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
  8. WORKDIR /app
  9. COPY --from=build /code/out ./
  10. EXPOSE 80
  11. ENTRYPOINT dotnet User.API.dll

其他项目中的 DockerCompose 写法 docker-compose.yml

  1. version: '3'
  2. services:
  3. db:
  4. image: mysql:5.7
  5. container_name: db
  6. command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci
  7. restart: always
  8. ports:
  9. - '3306:3306'
  10. environment:
  11. MYSQL_ROOT_PASSWORD: pwd123456
  12. MYSQL_USER: aidasi
  13. MYSQL_PASSWORD: pwd123456
  14. volumes:
  15. - /home/mysql:/docker-entrypoint-initdb.d
  16. web:
  17. build: .
  18. container_name: 'aspnetcore'
  19. ports:
  20. - '5001:80'
  21. depends_on:
  22. - db

更多参考:https://yeasy.gitbook.io/docker_practice/compose/compose_file#environment
如果.netcore程序中对mysql初始化时没有迁移成功(Migrate),那么我们可以通过循环的方式或者熔断的方式如下代码所示:

  1. public static async Task<IApplicationBuilder> UseInitUserDatabase(this IApplicationBuilder builder, ILoggerFactory loggerFactoryMaaster, int? retry = 0)
  2. {
  3. var retryForAvaiabilitry = retry.Value;
  4. using (var scope = builder.ApplicationServices.CreateScope())
  5. {
  6. try
  7. {
  8. var loggerFactory = (ILogger<UserContext>)scope.ServiceProvider.GetService(typeof(ILogger<UserContext>));
  9. var userContext = scope.ServiceProvider.GetRequiredService<UserContext>();
  10. loggerFactory.LogDebug("Begin UserContext UseInitUserDatabase");
  11. //确定数据库得以创建
  12. userContext.Database.Migrate();
  13. //这种也可以但数据会被删除
  14. //userContext.Database.EnsureDeleted();
  15. //userContext.Database.EnsureCreated();
  16. if (!userContext.Users.Any())
  17. {
  18. userContext.Users.Add(new Models.AppUser { Name = "aidasi" });
  19. userContext.SaveChanges();
  20. }
  21. }
  22. catch (Exception ex)
  23. {
  24. //尝试重试10次
  25. if (retryForAvaiabilitry < 10)
  26. {
  27. retryForAvaiabilitry++;
  28. Thread.Sleep(500);
  29. var logger = loggerFactoryMaaster.CreateLogger(typeof(UserContext));
  30. logger.LogError(ex.Message);
  31. await UseInitUserDatabase(builder, loggerFactoryMaaster, retryForAvaiabilitry);
  32. }
  33. }
  34. }
  35. return builder;
  36. }

Startup.cs —> Configure

  1. app.UseInitUserDatabase(loggerFactory).Wait();

关于.NetCore中的简单发布的Yaml如下

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: k8s-demo
  5. namespace: netcore
  6. labels:
  7. name: k8s-demo
  8. spec:
  9. replicas: 2
  10. selector:
  11. matchLabels:
  12. name: k8s-demo
  13. template:
  14. metadata:
  15. labels:
  16. name: k8s-demo
  17. spec:
  18. containers:
  19. - name: k8s-demo
  20. image: <ImageName>:<Tag>
  21. ports:
  22. - containerPort: 80
  23. imagePullPolicy: Always
  24. ---
  25. kind: Service
  26. apiVersion: v1
  27. metadata:
  28. name: k8s-demo
  29. namespace: netcore
  30. spec:
  31. type: NodePort
  32. ports:
  33. - port: 80
  34. targetPort: 80
  35. selector:
  36. name: k8s-demo


参考链接

https://www.tnblog.net/hb/article/details/3479


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

尘叶心繁

2020/4/10 20:31:57

大家注意,DockerFile我的目录结构有点不同

window7 docker启动失败 error: Failed to create the VirtualBox object。VirtualBox com对象失败

docker启动失败 报错 error: Failed to create the VirtualBox object这个错是因为:virtuelbox 无法启动,所以启动之后会...

docker启动报错 No default Boot2docker ISO found locally downloading the latest

这是因为,启动时如果检测到没有 Boot2Docker,就会去下载,这个下载过程出现网络连接上的错误了,导致启动失败。可以去下...

docker常用命令删除镜像命令进入容器、docker重启命令等

1. docker version查看 Docker 版本信息2. docker info显示 Docker 系统信息,包括镜像,容器数等3. 运行容器第一次使用:d...

docker 二次启动失败(本人这里使用的是hyper-v)

fatal: failed to start daemon: Error initializing network controller: Error creating default network: hnsCall faile...

docker中Sware集群与service

swarm 总结:1,docker中使用swarm集群可以达到多任务分配到不同的节点进行处理,如果有空闲的docker机子将会把请求的处理...

.netCore 使用分布式缓存(docker+redis)

1. 通过docker创建 Redis执行命令:dockerrun--nameasp-redis-p6379:6379-dredis查看redis状态:dockerps可以发现alreadywo...

.net Core3.0在Ubuntu 16.04上面的部署(Supervisor+nginx)(扩展docker)

前 言Linux 随着Linux越来越流行,本人一个.net程序员也多次研究linux与.net的相关产品,以及中间件的使用方式。So今天给...

docker 下载 mcr.microsoft.com/dotnet/core/sdk:3.1 老不行

请将其修改为:mcr.azk8s.cn/dotnet/core/sdk:3.1

windows安装docker

win7、win8 等需要利用 docker toolbox 来安装,国内可以使用阿里云的镜像来下载,下载地址:http://mirrors.aliyun.com/do...

Linux 安装Web版Vscode(docker+Local)

Linux 安装Web版Vscode(Docker+Local)[TOC] code-server 介绍 在任何地方的任何机器上运行VS代码,并在浏览器中访问它...

docker运行 Elasticsearch Kibana和Cerebro

Docker运行 Elasticsearch Kibana和Cerebro[TOC] Demo 运行 Docker-compose,本地构建更高效的开发环境,更直观地了解 El...

docker部署简单的mysql

Docker部署简单的mysql[TOC] 首先这玩意我是真不想写,网上写的太多了,但是又没有找到快速的创建方式。so…有疑问都可...

Unable to get the local Boot2docker ISO version: Did not find prefix "-v" in version string

我已经从 github 上下载 v19.03.12 的镜像到 vps 然后拖回本地放在 C:\Users\Administrator.docker\machine\cache 下了。依...

docker容器和镜像的区别

下面这两个比喻说得比较好 镜像就类似操作系统光盘介质,容器相当于通过光盘安装后的系统。通过光盘(镜像),我们能在不同...
这一世以无限游戏为使命!
排名
2
文章
633
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术