首页
视频
资源
登录
原
精
docker常用命令
4636
人阅读
2020/4/10 16:51
总访问:
2625122
评论:
1
收藏:
0
手机
分类:
docker
![Docker远征](https://img.tnblog.net/arcimg/hb/656ec4beace04f5e9a7b1d58b6368639.jpg "Docker远征") >#Docker简单命令整理清单 [TOC] Login 获取账户信息 ------------ 获取账户信息 ````bash docker info | sed '/Username:/!d;s/.* //' ```` 或 ````bash username=$(docker info | sed '/Username:/!d;s/.* //'); echo $username ```` 登录账户 ````bash docker login hub.docker.com ```` Images 镜像相关操作 ------------ 获取本地镜像 ````bash docker images ```` 搜索镜像 ````bash docker search <ImageName> ```` 下载镜像到本地 ````bash docker pull <url> ```` 上传到Hub官网上 ````bash docker push <Username>/<PacketName>:<Tag> ```` **《 注意:格式规范 》** 删除本地镜像 ````bash docker rmi <ImageId> 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官网](hub.docker.com) Build 相关操作 ------------ 生成命令 ````bash docker build -t <Username>/<ProjectName>:<Tag> <ProjectAddress> ```` 举例 ````bash docker build -t aidasi/demo1:v1 . ```` Tag 相关操作 ------------ 剪切新的包 ````bash docker tag <OldPacketName>:<Tag> <UserName>/<NewPacketName>:<Tag> ```` 举例 ````bash docker tag Demo1:v1 aidasi/demo1:v1 ```` Network 相关操作 ------------ 列出主机上的所有网络 ````bash docker network ls ```` 创建网络 ````bash docker network create <NetworkName> ```` 运行应用添加指定网络 ````bash docker run -d -p <OutPort>:<InPort> --name <ContainerName> --net=<NetworkName> <PacketName> ```` 将容器与指定网络断开 ````bash docker network disconnect <NetworkName> <ContainerName> ```` 给运行的容器添加网络 ````bash docker network connect <NetworkName> <ContainerName> 还可以给网络创建别名 docker network connect --alias <AliasName> <NetworkName> <ContainerName> ```` 让容器与容器之间连接 ````bash docker run -d -p 5001:80 --name aspnetcore --link <ContainerName2>:addb <ContainerName1>:<Tag> ```` 我们可以浏览网络以查看连接了哪些容器及其IP地址 ````bash docker network inspect <NetworkName> ```` Volume 卷存储 ------------ 容器共享卷 ```bash docker run ... --volumes-from <ContainerName>.. ``` 持久存储卷 ```bash docker run -v <LocalPath>:<ContainerPath> .... 如果只需要只读 docker run -v <LocalPath>:<ContainerPath>:ro .... ``` yml ```bash volumes: data-volume: driver: local driver_opts: type: none device: $PWD/logs o: bind ``` Log 获取日志信息 ------------ 生成命令 ````bash docker logs <ContainerName> ```` 将容器日志转为系统日志记录 ````bash docker run ... --log-driver=syslog 如何读取 参考链接如下??https://www.jianshu.com/p/038738073103 ```` 日志跟踪 ````bash docker logs --follow <ContainerName> ```` 当改为none后将禁用日志输出 ```bash --log-driver=none ``` 关于容器相关操作 ------------ 查看当前所有所有为运行状态的容器 ````bash docker ps ```` 查看所有容器 ````bash docker ps -A ```` 运行应用到容器 ````bash docker run -d -p <OutPort>:<InPort> --name <ContainerName> <PacketName> ```` 停止运行的容器 ````bash docker stop <ContainerId> ```` 删除运行的容器 ````bash docker rm <ContainerId> docker rm <ContainerId1> <ContainerId2> <ContainerId3> ```` 导出与导入容器 ------------ 导出容器 ````bash docker export <ContainerName> > <ContainerName>.tar ```` 导入容器 ````bash docker import <ContainerName>.tar ```` 导出与导入镜像 ------------ 导出镜像 ````bash docker save <ContainerName> > <ContainerName>.tar ```` 导入镜像 ````bash docker load <ContainerName>.tar ctr image import ingresscontrl.tar ctr image import ingresswebhook.tar ```` 设备与读写 ------------ >假设硬盘设备为 /dev/nvme0n1 访问特定的设备 ```bash docker run --device=/dev/nvme0n1:/dev/nvme0n1 ... ``` 限制写入速率(每秒IO)到设备。数字是一个正整数。 ```bash # <device-path>:<number> #例如,该命令创建一个容器并将写入速率限制为每秒 3/IO docker run --device-write-iops /dev/nvme0n1:3 ... ``` 限制来自设备的读取速率(每秒IO)数字是一个正整数。 ```bash # <device-path>:<number> #例如,该命令创建一个容器,并且限制了读出速度,以 3/IO 每秒 docker run --device-read-iops /dev/nvme0n1:3 ... ``` 导出与导入镜像 ------------ 导出镜像 ````bash docker save -o <Name>.tar <ImageName>:<Tag> 或 docker save > <Name>.tar <ImageName>:<Tag> ```` 导入容器 ````bash docker load -i <Name>.tar 或 docker load < <Name>.tar ```` 进入容器内部 ------------ ````bash sudo docker exec -it <ContainerID> /bin/bash ```` 查看CPU与IO状态 ------------ ````bash # 查看单个容器情况 docker stats <ContainerName> # 查看所有容器状态 docker stats ```` 容器运行时特殊参数 ------------ tn>`privileged`使用该参数,container内的root拥有真正的root权限。privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。 ````bash docker run --privileged ... ```` tn>`-d` 设置要读取的磁盘,默认前缀为 `/dev/sd` 或者 `/dev/xvd` 的磁盘 ````bash docker run -d /dev/sdb ```` tn>`-s` 设置每次读取的数据量大小,单位为字节,默认为 `67108864`(也就是 `64MB`) ````bash docker run -s 67108864 ```` tn>`-c` 设置每个子进程读取的次数,默认为 `20` 次,也就是读取 `20*64MB` 数据后子进程退出 ````bash docker run -c 20 ```` Docker-Compose的操作 ------------ 启动 ````bash docker-compose up ```` 停止容器 ````bash docker-compose down ```` 停止容器并且移除数据 ````bash docker-compose down -v ```` 关于.NetCore中的DockerFile如下 ------------ ![Dockerfile](https://img.tnblog.net/arcimg/hb/82ea39d390f04d779fb5ccee3e54e8b8.png "Dockerfile") ```bash FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build WORKDIR /src COPY . k8s-demo/ RUN pwd RUN ls RUN dotnet restore "k8s-demo/k8s-demo.csproj" COPY . . WORKDIR "/src/k8s-demo" RUN pwd RUN ls RUN mkdir -p /app/build RUN mkdir -p /app/publish RUN dotnet build "k8s-demo.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "k8s-demo.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "k8s-demo.dll"] ``` >###项目中简单点 ```bash FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build WORKDIR /code COPY *.csproj ./ RUN dotnet restore COPY . . RUN dotnet publish -c Release -o out FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base WORKDIR /app COPY --from=build /code/out ./ EXPOSE 80 ENTRYPOINT dotnet User.API.dll ``` >###其他项目中的 DockerCompose 写法 docker-compose.yml ```yaml version: '3' services: db: image: mysql:5.7 container_name: db command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci restart: always ports: - '3306:3306' environment: MYSQL_ROOT_PASSWORD: pwd123456 MYSQL_USER: aidasi MYSQL_PASSWORD: pwd123456 volumes: - /home/mysql:/docker-entrypoint-initdb.d web: build: . container_name: 'aspnetcore' ports: - '5001:80' depends_on: - db ``` >更多参考:https://yeasy.gitbook.io/docker_practice/compose/compose_file#environment >如果.netcore程序中对mysql初始化时没有迁移成功(Migrate),那么我们可以通过循环的方式或者熔断的方式如下代码所示: ```csharp public static async Task<IApplicationBuilder> UseInitUserDatabase(this IApplicationBuilder builder, ILoggerFactory loggerFactoryMaaster, int? retry = 0) { var retryForAvaiabilitry = retry.Value; using (var scope = builder.ApplicationServices.CreateScope()) { try { var loggerFactory = (ILogger<UserContext>)scope.ServiceProvider.GetService(typeof(ILogger<UserContext>)); var userContext = scope.ServiceProvider.GetRequiredService<UserContext>(); loggerFactory.LogDebug("Begin UserContext UseInitUserDatabase"); //确定数据库得以创建 userContext.Database.Migrate(); //这种也可以但数据会被删除 //userContext.Database.EnsureDeleted(); //userContext.Database.EnsureCreated(); if (!userContext.Users.Any()) { userContext.Users.Add(new Models.AppUser { Name = "aidasi" }); userContext.SaveChanges(); } } catch (Exception ex) { //尝试重试10次 if (retryForAvaiabilitry < 10) { retryForAvaiabilitry++; Thread.Sleep(500); var logger = loggerFactoryMaaster.CreateLogger(typeof(UserContext)); logger.LogError(ex.Message); await UseInitUserDatabase(builder, loggerFactoryMaaster, retryForAvaiabilitry); } } } return builder; } ``` >Startup.cs --> Configure ```bash app.UseInitUserDatabase(loggerFactory).Wait(); ``` 关于.NetCore中的简单发布的Yaml如下 ------------ ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: k8s-demo namespace: netcore labels: name: k8s-demo spec: replicas: 2 selector: matchLabels: name: k8s-demo template: metadata: labels: name: k8s-demo spec: containers: - name: k8s-demo image: <ImageName>:<Tag> ports: - containerPort: 80 imagePullPolicy: Always --- kind: Service apiVersion: v1 metadata: name: k8s-demo namespace: netcore spec: type: NodePort ports: - port: 80 targetPort: 80 selector: name: k8s-demo ``` <br> 参考链接 ------------ https://www.tnblog.net/hb/article/details/3479
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
尘叶心繁
这一世以无限游戏为使命!
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net后台框架
170篇
linux
17篇
linux中cve
1篇
windows中cve
0篇
资源分享
10篇
Win32
3篇
前端
28篇
传说中的c
4篇
Xamarin
9篇
docker
15篇
容器编排
101篇
grpc
4篇
Go
15篇
yaml模板
1篇
理论
2篇
更多
Sqlserver
4篇
云产品
39篇
git
3篇
Unity
1篇
考证
2篇
RabbitMq
23篇
Harbor
1篇
Ansible
8篇
Jenkins
17篇
Vue
1篇
Ids4
18篇
istio
1篇
架构
2篇
网络
7篇
windbg
4篇
AI
18篇
threejs
2篇
人物
1篇
嵌入式
3篇
python
13篇
HuggingFace
8篇
pytorch
9篇
opencv
6篇
Halcon
2篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术