docker 容器操作
1.docker环境信息 — docker [info|version]
2.容器生命周期管理 — docker [create|exec|run|start|stop|restart|kill|rm|pause|unpause]
3.容器操作管理 — docker [ps|inspect|top|attach|wait|export|port|rename|stat]
4.容器rootfs命令 — docker [commit|cp|diff]
5.镜像仓库 — docker [login|pull|push|search]
6.本地镜像管理 — docker [build|images|rmi|tag|save|import|load]
7.容器资源管理 — docker [volume|network]
8.系统日志信息 — docker [events|history|logs]
9.其他命令 — docker [update|prune]
1.docker环境信息
docker [info|version]
2.容器生命周期管理
docker [create|exec|run|start|stop|restart|kill|rm|pause|unpause]
2.1.新建并启动容器
语法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
#OPTIONS:
-d, --detach=false: 后台运行容器,并返回容器ID
-i, --interactive=false: 以交互模式运行容器,通常与 -t 同时使用
-P, --publish-all=false: 随机端口映射,容器内部端口随机映射到主机的端口。不推荐使用该参数
-p, --publish=[]: 指定端口映射,格式为:主机端口:容器端口,推荐各位小伙伴们使用,-p 5540-5545:550-555可以配置端口段,5540::550......5544:554,5545:555。
-t, --tty=false: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
--name="centos-container": 为容器指定一个名称,不能使用:。
-h , --hostname="laosiji": 指定容器的hostname
-e , --env=[]: 设置环境变量,容器中可以使用该环境变量
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型
--link=[]: 添加链接到另一个容器;不推荐各位小伙伴使用该参数
-v, --volume : 绑定一个卷,主机:docker,两个目录可以共享数据。
-v /hostdir:/dockerdir
-v /dockerdir 没有指定主机目录,会自动绑定:/var/lib/docker/volumes/*/_data
--privileged=false: 指定容器是否为特权容器,特权容器拥有所有的capabilities
--restart=no:指定容器停止后的重启策略
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时总是重启,推荐使用
--rm=false: 指定容器停止后自动删除容器,不能以docker run -d启动的容器
--entrypoint:可以指定容器启动时要执行的命令,可以作为自动启动程序使用。
执行实例 :
sudo docker run -itd --rm --name centos-container --privileged=true --user=root -p 805:80 centos:latest /bin/bash
sudo docker run -itd --rm --name centos-container --privileged=true --user=root -p 805:80 centos-image:latest /bin/bash
sudo docker run -itd --rm --name centos-container --privileged=true --user=root -p 805:80 -p 5545:554 centos-image:latest /bin/bash
# 结果输出good
sudo docker run --entrypoint="echo" centos:latest good
2.2.创建容器
docker create :创建一个新的容器但不启动它。用法同 docker run命令。
Ps:创建容器时不允许用-d参数,如果使用了-d参数则会报:unknown shorthand flag: ‘d’ in -d
语法:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
#OPTIONS:
#常用参数与run基本相同:
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
-h "mars": 指定容器的hostname;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--volume , -v: 绑定一个卷
与run不同的参数
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--expose=[]: 开放一个端口或一组端口;
执行实例:
sudo docker create -it --name centos-container --privileged=true --user=root -p 805:80 centos:latest /bin/bash
sudo docker create -it --name centos-container --privileged=true --user=root -p 805:80 centos:centos7.9.2009 /bin/bash
sudo docker create -it --name centos-container --privileged=true --user=root -p 805:80 centos-image /bin/bash
失败:需要指定image:tag
sudo docker create -it --name centos-container --privileged=true --user=root -p 805:80 centos7.9.2009 /bin/bash
2.3.进入容器
早期有attach命令,对于阻塞命令会等待,所以不方便。在Docker 1.3.0后提供了exec 可以在容器内直接执行任意命令。
语法:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
#OPTIONS:
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
执行实例:
sudo docker exec -it centos-container /bin/bash
sudo docker exec -it centos-container /bin/bash
Ps:exec到底使用sh还是/bin/bash 需要看实际的镜像,通常centos系统的可以使用/bin/bash,apline系统的使用sh。
2.4.启动、重启、终止容器
docker start :启动一个或多个已经被停止的容器
docker stop :停止一个运行中的容器
docker restart :重启容器
语法:
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker restart [OPTIONS] CONTAINER [CONTAINER...]
执行实例:
sudo docker start centos-container
sudo docker stop centos-container
sudo docker restart centos-container
sudo docker start centos-container
sudo docker stop centos-container
sudo docker restart centos-container
2.5.杀掉容器
docker kill :杀掉一个运行中的容器。
语法:
docker kill [OPTIONS] CONTAINER [CONTAINER...]
#OPTIONS:
-s :向容器发送一个信号
执行实例:
docker kill centos-container
docker ps
docker ps -a
docker start centos-container
2.6.删除容器
删除一个或多个容器。docker rm命令只能删除处于终止或退出状态的容器,并不能删除还处于运行状态的容器。
语法:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
#OPTIONS:
-f :通过 SIGKILL 信号强制删除一个运行中的容器。
-l :移除容器间的网络连接,而非容器本身。
-v :删除与容器关联的卷。
执行实例:
sudo docker rm centos-container
3.容器操作管理
docker [ps|inspect|top|attach|wait|export|ip|port|rename|stat]
3.1.列出容器
语法:
docker ps [OPTIONS]
#OPTIONS:
-a :显示所有的容器,包括未运行的。
-q :只显示容器编号。
执行实例:
sudo docker ps
#返回数据:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。状态有7种:
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
推荐使用:
停止所有运行容器
docker stop $(docker ps -qa)
删除所有的容器
docker rm $(docker ps -aq)
删除所有容器,先停止运行后进行删除
docker rm $(docker stop $(docker ps -q))
删除所有的镜像
docker rmi $(docker images -q)
删除所有运行失败的容器
docker rm $(docker ps -a | grep Exited | awk '{print $1}')
3.2.查看容器
获取容器/镜像的元数据。
通过 docker inspect 命令,我们可以获取镜像的详细信息,其中,包括创建者,各层的数字摘要等。
docker inspect 返回的是 JSON格式的信息,如果您想获取其中指定的一项内容,可以通过 -f 来指定,如获取镜像大小。
语法:
docker inspect [OPTIONS] CONTAINER [CONTAINER...]
#OPTIONS:
-f :指定返回值的模板文件。
-s :显示总的文件大小。
--type :为指定类型返回JSON。
执行实例:
docker inspect centos-container
3.3.查看容器IP
语法:
docker ip CONTAINER [CONTAINER...]
执行实例:
sudo docker ip centos-container
3.4.查看端口映射
语法:
docker port CONTAINER [CONTAINER...]
执行实例:
sudo docker port centos-container
参考:
https://blog.csdn.net/ygq13572549874/article/details/129130654
4.容器rootfs命令
docker [commit|cp|diff]
4.1.commit命令
格式:
docker commit [OPTIONS] CONTAINER IMAGE
#OPTIONS:
-m '镜像描述'
-a '制作者'
执行实例:
sudo docker commit -m ‘centos container’ -a ’creater‘
4.2.数据拷贝
语法:
docker cp HOSTFILE CONTAINER:DOCKERFILE
执行实例:
sudo docker cp build.tar centos-container:/home
sudo docker cp config centos-container:/home
sudo docker cp build.tar centos-container:/home
sudo docker cp config centos-container:/home
5.镜像仓库
docker [login|pull|push|search]
5.1.search命令
docker search :从Docker Hub查找镜像
语法:
docker search [OPTIONS] TERM
#OPTIONS:
--no-trunc :显示完整的镜像描述;
--f, --filter filter : 过滤输出的内容;
--limit int :指定搜索内容展示个数;
执行实例:
sudo docker search zlmediakit
sudo docker search centos
Docker Hub 查找所有镜像名包含 java,并且收藏数大于 100 的镜像
docker search -f stars=100 java
5.2.pull命令
语法:
docker pull [OPTIONS] TERM[:tag]
#OPTIONS:
-a, --all-tags=true|false : 是否获取仓库中所有镜像,默认为否;
--disable-content-trust : 跳过镜像内容的校验,默认为 true;
执行实例:
sudo docker pull centos:latest
sudo docker pull centos (默认拉取centos:latest,最新的tag)
6.本地镜像管理
docker [build|images|rmi|tag|save|import|load]
6.1.images命令
列出本机已有的镜像 ps:两个命令效果一样,推荐使用第一个
语法:
docker images [OPTIONS]
执行实例:
docker images
docker image ls
#选项说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
6.2.rmi命令
删除本地一个或多少镜像。
语法:
docker rmi [OPTIONS] IMAGE [IMAGE...]
#OPTIONS:
-f :强制删除;
--no-prune :不移除该镜像的过程镜像,默认移除;
执行实例:
docker rmi centos:latest
docker image rm centos:latest
删除镜像的限制
删除镜像很简单,但也不是我们何时何地都能删除的,它存在一些限制条件。当通过该镜像创建的容器未被销毁时,镜像是无法被删除的。
6.3.tag命令
语法:
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
标记本地镜像,将其归入某一仓库(注意不让大写)。
docker tag centos:latest test-group/tomcat:9
默认latest
sudo docker tag centos:centos7.9.2009 centos-image
sudo docker tag centos:centos7.9.2009 centos-image:v1.0
sudo docker tag centos-image centos-image:v1.0
6.4.save命令
导出镜像(默认导出到当前目录)
语法:
docker save [OPTIONS] IMAGE [IMAGE...]
#OPTIONS:
-o :输出到的文件
执行实例:
sudo docker save centos-image > centos-image.tar
sudo docker save centos-image -o centos-image.tar
6.5.load命令
导入打包的镜像
sudo docker load -i centos-image.tar
常用参数:
--input , -i : 指定导入的文件。
--quiet , -q : 精简输出信息。
7.容器资源管理
docker [volume|network]
8.系统日志信息
docker [events|history|logs]
8.1.history命令
从前面的命令中,我们了解到,一个镜像是由多个层组成的,那么,我们要如何知道各个层的具体内容呢?
通过 docker history命令,可以列出各个层的创建信息,例如:查看 centos:latest的各层信息:
语法:
docker history [OPTIONS] IMAGE
#OPTIONS:
-H :以可读的格式打印镜像大小和日期,默认为true;
--no-trunc :显示完整的提交记录;
-q :仅列出提交记录ID。
执行实例:
docker history centos:latest
8.2.容器日志
语法:
docker logs [OPTIONS] CONTAINER
#OPTIONS:
-f : 跟踪日志输出
--tail :仅列出最新N条容器日志
执行实例:
docker logs -f centos-container
9.其他命令
9.1.更新容器
docker update :可以动态地更新容器配置。可以更新一个或多个容器配置。多个容器名称或ID之间使用空格分隔。但update命令不是很成熟,有很多配置项不能动态更新。推荐还是rm容器后,再重新run一个新的镜像。
语法:
docker update [OPTIONS] CONTAINER [CONTAINER...]
执行实例:文章来源:https://uudwc.com/A/ykGY8
docker update --restart always centos-container
9.2.清理镜像
我们在使用 Docker 一段时间后,系统一般都会残存一些临时的、没有被使用的镜像文件,可以通过以下命令进行清理。执行完命令后,还是告诉我们释放了多少存储空间!
语法:文章来源地址https://uudwc.com/A/ykGY8
docker image prune
#OPTIONS:
-a, --all : 删除所有没有用的镜像,而不仅仅是临时文件;
-f, --force :强制删除镜像文件,无需弹出提示确认;