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
Docker仓库
**
Docker Hub:https://hub.docker.com/
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
1、示例:推送到阿里云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的镜像
镜像归档
**
将指定镜像保存成 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
从归档文件中创建镜像
- 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:总是重启容器。(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):删除所有停止的容器
1、查看容器内部信息
**
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]:检查容器里文件结构的更改。(相对原始镜像的文件结构)
2、查看容器运行日志
**
docker启动后默认日志位置:/var/lib/docker/containers/容器ID/容器ID-json.log
docker logs [options] [container id or name]:查看指定容器Id的的运行日志
OPTIONS说明:
-f : 跟踪日志输出
—since :显示某个开始时间的所有日志
-t : 显示时间戳
—tail :仅列出最新N条容器日志
容器与主机之间的数据拷贝
**
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 参数的注意事项:
1、host机器的目录路径必须为全路径(准确的说需要以/或~/开始的路径)
2、如果host机器上的目录不存在,docker会自动创建该目录
3、如果container中的目录不存在,docker会自动创建该目录
4、如果container中的目录已经有内容,那么docker会使用host上的目录将其覆盖掉
5、linux下 $PWD 是一个系统环境变量,指代当前目录环境
6、windows下的路径如:D:\PycharmProjects 要写为 /d/PycharmProjects (试试原始目录行不信)
**
docker运行一个 .NET Core程序
目录规划:
———container // 容器根目录
————mk.admin // 容器名
—————Logs // 用于映射日志的目录
—————Config // 用于映射配置的目录
.NET Core端口设置
host.json文件
{
"urls": "http://*:44380"
}
第一步:发布.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
EXPOSE 44380
#使用`dotnet ***.dll`来运行应用程序
ENTRYPOINT ["dotnet", "Mk.Admin.HttpApi.Host.dll"]
**
第三步:创建镜像
在发布目录 \publish\mk.admin 目录下,执行命令:
1、构建镜像
docker build -t img.mk.admin .
2、运行容器
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目录,这样就可以在宿主机上查看和删除日志文件)
3、查看运行中的容器
docker ps
第四步:输入地址,查看站点运行状态
Docker 容器连接
https://www.runoob.com/docker/docker-container-connection.html
容器生命周期管理
- run docker run -d … create and start a container, run in playground when add -d parameter
- start/stop/restart docker start / stop / restart <containerId> / <container_name> // start stop restart container
- kill
- rm docker rm <containerId> / <container_name> // remove container
- pause/unpause
- create
- exec docker exec -it <containerId> /bin/bash // enter into container
- docker rm $(docker ps -a -q) // delete all the container
rename docker rename oldName newName // rename a container
容器操作
ps docker ps -a// watch all the container which is created already docker ps -s // watch all the start container
- inspect
- top
- attach
- events
- logs
- wait
- export
-
容器rootfs命令
- cp
-
镜像仓库
- pull
- push
search docker search nginx // search nginx in docker market
本地镜像管理
- rmi
- tag
- build
- history
- save
- load
-
info|version
- version
docker 启动容器并后台运行
docker run —name myNginx -p 8080:80 -d nginx
有时候,我们创建容器时忘了添加参数 --restart=always
,当 Docker 重启时,容器未能自动启动,
现在要添加该参数怎么办呢,方法有二:
1、Docker 命令修改docker container update --restart=always 容器名字
2、直接改配置文件端口
- 停止容器(docker stop d00254ce3af7)
- 停止docker服务(systemctl stop docker)
- 修改这个容器的hostconfig.json文件中的端口(原帖有人提到,如果config.v2.json里面也记录了端口,也要修改) ```bash
- cd /var/lib/docker/containers/d00254ce3af7* #这里是CONTAINER ID
- vim hostconfig.json
- 如果之前没有端口映射, 应该有这样的一段:
- “PortBindings”:{}
- 增加一个映射, 这样写:
- “PortBindings”:{“8080/tcp”:[{“HostIp”:””,”HostPort”:”60000”}]}
- 前一个数字是容器端口, 后一个是宿主机端口。将宿主机的60000端口映射到容器的8080端口
- 而修改现有端口映射更简单, 把端口号改掉就行。
```
注:我原来的容器中只有22的对外访问,现在想在容器中部署一个springboot项目,端口为8091,则修改如下:
“PortBindings”:{“22/tcp”:[{“HostIp”:””,”HostPort”:”10022”}],”8091/tcp”:[{“HostIp”:””,”HostPort”:”8000”}]}
- 启动docker服务(systemctl start docker)
- 启动容器(docker start d00254ce3af7)
hostconfig.json文件
config.v2.json文件
注:config.v2.json文件修改为(原文档修改的是Ports位置,验证有问题,改为修改ExposedPorts)
“ExposedPorts”:{“22/tcp”:{},”8091/tcp”:{}},