1.容器创建 docker run

docker run -i -t -d —name 容器名 —restart=always /bin/bash -p 宿主机端口:容器端口 -P 镜像名称:tag -c 命令 —link 容器名 —net 网络模式

-i:保证容器中的STDIN是开启的,可以进行输入。
-t:告诉docker需要创建一个伪tty终端,提供交互式shell。
-d:容器将在后台运行,直到容器或其进程停止。
镜像名称:创建什么样的容器,docker会首先在本地搜寻镜像,然后到官方仓库搜寻,找到后就会下载到本地主机上。如果没有指定tag,则会自动使用lastest标签
—name:指定容器的名称。
1.容器名称必须是唯一的。
2.字符限定:小写字母,大写字母,数字,下划线,圆点,横线(正则形式[a-zA-Z0-9_.-])
—restart:容器出现异常停止时自动重新启动。
=always:无论发生什么错误的都重启。
=on-failure:只有容器的退出代码不为0的时候重启。
onfailure可以接受重启次数的参数-onfaliure:5。
-c:要在容器内运行的命令。
-p:用来控制Docker再运行时应该开放那些网络端口给宿主机。
1.只开放容器端口,不指定宿主机端口,Docker会在宿主机上端口号位于49153-65535之间选择一个较大的端口映射到容器端口上。
2.使用 宿主机端口:容器端口的方式指定宿主机端口和容器端口的对应关系。
3.也可以将端口绑定到特定的网络接口上
image.png
4.在端口绑定时使用/udp后缀绑定UDP端口。
-P:用来对外公开在Dockerfile中EXPOSE指令中设置的所有端口。
image.png
—link 指定和哪个容器网络联通,原理是修改容器的/etc/host 文件,增加映射

2.查看容器状态 docker ps

查看系统中正在运行的容器的列表
-a:列出所有的容器,包括正在运行的和已经停止的
-l:列出最后一次运行的容器,包括正在运行的和已经停止的
-n:列出最后x个容器,包括正在运行的和已经停止的 -n x
显示的信息
1.容器id CONTAINER ID
2.使用的镜像 IMAGE
3.端口映射 …PORTS
4.容器名 NAMES

3.容器启动 docker start

启动一个已经停止的容器 docker start xxxx(容器名,容器ID)

4.容器重启 docker restart

重新启动容器 docker restart xxxx(容器名,容器ID)

5.附着到容器 docker attach

docker attach xxxx(容器名,容器ID)

6.查看容器日志 docker logs

docker logs [ -f ] xxxx(容器名,容器ID)
-f:监控日志,类似tail -f
—tail 10:获取日志的最后10行 docker logs —tail 10 xxxx
docker logs —tail 0 -f xxxx用来跟踪日志而不用读取日志文件

7.查看容器内的进程 docker top

docker top xxxx
image.png

8.启动额外进程 docker exec

docker1.3以后支持此命令,早期版本参考nsenter
docker exec -d xxxx 命令
docker exec -i -t xxxx /bin/bash
任务类型:后台任务和交互式任务
后台任务:-d 再容器内运行且没有交互需求,可以对运行的容器进行维护,监控,管理
交互式任务:-i -t 在前台保持运行

9.停止守护式容器 docker stop

docker stop xxxx

10.获取容器详细信息 docker inspect

返回容器的配置信息,包括名称,命令,网络配置等,该标志支持完整的GO语言模板
此命令也可以查看新创建的镜像的详细信息
/var/lib/docker/下存放了docker的镜像,容器和容器配置(待证实,桌面版并没有发现这个文件夹)
主要信息:
State:容器的各种状态,包括启动,停止,重启,PID,ExitCode,ERROR。
HostConfig:
Config:容器配置信息,包括容器名,端口映射,CMD和镜像名等
NetworkSettings:容器的网络配置信息
image.png
-f/—format:选择要查看的信息
可以指定多个容器,查看多个容器的信息,输出结果会按容器分开,最好带上{{.Name}}便于区分
image.png
用法: —fromat ‘{{ .第一层状态名1.具体状态名称1 } } {{ .第一层状态名2.具体状态名称2 } }’
例:docker inspect —format ‘{{ .State.Running }}’ 查看容器的运行状态

11.删除容器 docker rm

docker rm xxxx
1.rm不能删除运行中的容器,需要先kill/stop
2.批量删除-docker rm docker ps -a -q

12.查找镜像 docker search

docker search xxxx 此命令会去Docker Hub上查找所有带xxxx的镜像
返回值:
仓库名
镜像描述
用户评价(Star)
是否官方(Official)-由上游开发者管理的镜像
自动构建(Automated)-表示这个镜像是由Docker Hub自动构建

13.拉取镜像到本地 docker pull 镜像名

14.构建镜像 docker commit/docker build/Docker file

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12435212/1612332400934-cf2f5820-681b-4c2c-b507-f9b0c248decf.png#crop=0&crop=0&crop=1&crop=1&height=101&id=zKm0V&margin=%5Bobject%20Object%5D&name=image.png&originHeight=101&originWidth=580&originalType=binary&ratio=1&rotation=0&showTitle=false&size=67619&status=done&style=none&title=&width=580)

1.docker commit 容器ID 仓库地址/镜像名:tag —不推荐

commit只提交容器创建的镜像和当前容器差异的部分,所以更新很轻量
参数:
-m=””:指定镜像的提交信息
—author:列出镜像的作者信息
tag:镜像的版本,不指定默认为latest

2.Dockerfile

1.构建环境(构建上下文)
image.png
Docker会在构建镜像时将构建上下文中的文件和目录上传到Docker守护进程
2.Dockerfile示例
#Version:0.0.1
**FROM**`` xxxx:tag
RUN command1
RUN command2 ....
Dockerfile中的指令会会从上到下执行
执行流程:
1.Docker从基础镜像运行一个容器
2.执行一条指令,对容器做出修改
3.执行类似docker commit的操作,提交一个新的镜像层
4.Docker再基于刚提交的镜像运行一个新的容器
5.执行下一条指令
。。,直到指令执行完毕
image.png

3.docker build

docker build -t=”镜像名:tag” 镜像构建过程中的上下文环境的目录
build的过程
1.docker run 基础镜像 生成基础container
2.在基础container中执行命名
3.docker commit 基础container 中间镜像
4
会将Dockerfile中的所有命令执行并提交,执行完成后生成一个新的镜像,使用docker image查看
.dockerignore 文件中指定在传递给 docker引擎 时需要忽略掉的文件或文件夹。
因为会按顺序执行Dockerfile的命令,并每一步都会返回镜像(此处返回的镜像都会生成缓存,下次有相同的镜像需要生成时会使用该缓存,如果需要忽略缓存需要添加 —no-cache参数),在中间失败时也可以用临时镜像继续手动操作,或者调试Dockerfile中的代码

15.查看容器端口映射 docker port

docker port xxxx 端口号

16.docker network

ls 列出所有网络的信息
网络模式
bridge:桥接模式(默认)
none:不配置
host:主机模式
container
rm 删除某个网络
inspect 查看某个网络的详细信息
creat 创建一个新的网络
— driver 模式
—subnet 子网,同一个子网下容器可以相互通信
—gateway 网关
connect 将指定的容器添加到某个网络
docker network connect 网络名 容器名

常用

docker ps // 查看所有正在运行容器
docker stop containerId // containerId 是容器的ID
docker ps -a // 查看所有容器
docker ps -a -q // 查看所有容器ID
docker stop 容器id //停止某个容器
docker rm 容器id //删除某个容器
docker stop $(docker ps -a -q) // stop停止所有容器
docker rm $(docker ps -a -q) // remove删除所有容器#所有镜像和容器都删除的命令
docker system prune -a

查看镜像
docker images

删除单个镜像
docker rmi -f <镜像id>

删除所有镜像,不删除容器
docker rmi $(docker images -q)

删除容器
首先需要停止所有的容器(只停止单个时把后面的变量改为image id即可)
docker stop $(docker ps -a -q)

删除所有的容器(只删除单个时把后面的变量改为image id即可)
docker rm $(docker ps -a -q)

查看镜像
docker images

删除镜像名称
docker rmi 镜像ID

查看运行中的容器
docker ps

查看所有容器
docker ps -a

强制删除容器
docker rm -f 容器ID