一、查看 Docker 命令行帮助
1、查看帮助的方法
Docker 操作命令分为: 管理命令与直接命令参数
1、管理命令为区分每个项目的命令, 比如说镜像操作, 就是以docker image 开头
2、直接命令参数就是在docker 命令之后直接的命令, 比如说删除镜像 docker rmi
3、管理命令相对于直接命令参数,更加严谨。
[root@master ~]# docker --help
2、常用基本操作列表
动作
|
解释 |
创建container |
docker container create image_name |
创建并运行container 及进入交互终端参数 |
docker container run -it image_id CMD -i 交互模式
-t 终端 -it 为分配一个交互式终端
-d 放在后台 |
创建并运行container 并让其在后台运行,并端口映射 |
docker container run -p [port incontainer]:[port inphysical system] -d [image][command]
|
查看正在运行的所有container 信息 |
docker container ps = docker ps |
查看最后创建的container |
docker container ps -l = docker ps -l |
查看所有container,包括正在运行和已经关闭的 |
docker container ps -a = docker ps -a |
输出指定container 的stdout 信息(用来看log,效果和tail -f 类似,会实时输出。) |
docker container logs -f [container] |
获取container 指定端口映射关系 |
docker container port [container] [port] |
查看container 进程列表 |
docker container top [container] |
查看container 详细信息 |
docker container inspect [container] |
停止continer |
docker container stop [container] |
强制停止container |
docker container kill [container] |
启动一个已经停止的container |
docker container start [container] |
重启container(若container 处于关闭状态,则直接启动) |
docker container restart [container] |
删除container |
docker container rm [container] -f 强制删除 |
3、常用容器操作命令详解
# 启动容器, -P 生成随机映射端口 [root@master ~]# docker run --name t1 -d -P nginx 1ae96c67531d50333b332e1e1d59c152b3edb2a807443b360c2ce298bff3051d
#查看日志
[root@master ~]# docker logs -f t1
# 获取到端口
[root@master ~]# docker ps -a
# 访问容器
[root@master ~]# curl http://localhost:32769
# 显示日志
[root@master ~]# docker logs -f t1
172.17.0.1 - - [25/Aug/2020:06:25:37 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
4、创建容器
语法:docker container run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
-i 交互模式
-t 终端
-it 为分配一个交互式终端
-d 放在后台 (nohup command &)
-p 端口映射
-v 源地址(宿主机):目标地址(容器) (本地的宿主机的目录挂载到容器目录)
-h 指定容器主机名
--name 指定容器的名字
--restart=always 每次重启服务,容器跟着重启
创建容器, 并且挂载本地目录到容器目录,把宿主机的/test目录挂载到容器的/mnt目录(新开终端)
# 宿主机建立目录 [root@master ~]# mkdir /test #启动新容器, 指定主机名为 test, 容器名为 t11, 在终端打开-it [root@master ~]# docker run -it --name t11 test -v /test:/mnt centos /bin/bash # 宿主机创建文件 [root@master /]# touch /test/t11.txt # 容器查看文件 [root@test /]# ls /mnt/ t11.txt
创建一台新容器,并进入镜像系统
[root@master ~]# docker container run -it centos /bin/bash
[root@5dc2f7bd6bc9 /]#
5、容器启动、停止
# 列出所有容器,包括运行与停止的容器, 获取到容器 id [root@master ~]# docker ps -a = [root@master ~]# docker container ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5dc2f7bd6bc9 centos "/bin/bash" 3 minutes ago Exited (130) 7 seconds ago nervous_cori # 根据容器 id 启动容器 [root@master ~]# docker start 5dc2f7bd6bc9 5dc2f7bd6bc9 # 查看正在运行的程序 [root@master ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5dc2f7bd6bc9 centos "/bin/bash" 5 minutes ago Up 12 seconds nervous_cori
6、进入docker容器
1、exec
语法:docker container exex [OPTIONS] CONTAINER [CONTAINER...] 完整信息请查看:docker exec --help
exec 会分配一个新的终端(pts)
docker container exec -it 容器ID或者容器名字 /bin/bash
# 执行进入必须要带参数和COMMAND 如:/bin/bash
# 进入容器可以用容器运行的 id, 也可以用容器名称, 其目的都是唯一定位到容器 [root@master ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5dc2f7bd6bc9 centos "/bin/bash" About an hour ago Up About an hour nervous_cori [root@master ~]# docker container exec -it 5dc2f7bd6bc9 /bin/bash [root@5dc2f7bd6bc9 /]#
2、attach
语法:docker container attach CONTAINER
# 如果 Docker 容器是使用/bin/bash 命令启动的,则可以使用 attach [root@master ~]# docker attach 5dc2f7bd6bc9 [root@5dc2f7bd6bc9 /]# exit
exec 与attach 区别
EXEC: 在一个正在运行的容器中执行命令,exec是针对已运行的容器实例进行操作,在已 运行的容器中执行命令,不创建和启动新的容器,退出shell不会导致容器停止运行。
Attach: 将本机的标准输入(键盘)、标准输出(屏幕)、错误输出(屏幕)附加到一个运行 的容器,也就是说本机的输入直接输到容器中,容器的输出会直接显示在本机的屏幕上, 如果退出容器的shell,容器会停止运行。
7、重启服务,容器自启动
Docker命令行添加参数docker run --restart=always
[root@master ~]# docker run -d --restart=always nginx 72a3c79b3c5e951d91e4b02d75922615b9954059ef93f2fc6085160381262070 [root@master ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 72a3c79b3c5e nginx "/docker-entrypoint.…" 21 seconds ago Up 20 seconds 80/tcp compassionate_euler 1ae96c67531d nginx "/docker-entrypoint.…" 10 hours ago Up 10 hours 0.0.0.0:32769->80/tcp t1 6816ade398c3 repo.abc.com/nginx:v1.0 "/docker-entrypoint.…" 41 hours ago Up 41 hours 0.0.0.0:9091->80/tcp condescending_shaw [root@master ~]# systemctl restart docker [root@master ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 72a3c79b3c5e nginx "/docker-entrypoint.…" 37 seconds ago Up 4 seconds 80/tcp compassionate_euler
8、容器其他操作
# 关闭所有正在运行的容器 [root@master ~]# docker kill $(docker ps -q) # 移除所有停止的容器 [root@master ~]# docker rm $(docker ps -a -q) # 根据状态移除 [root@master ~]# docker rm $(docker ps -q -f ‘status=exited‘ -n 3)
[root@master ~]# docker rm $(docker ps -q -f ‘status=exited‘) # 根据标签移除 [root@master ~]# docker rm $(docker ps -a | grep nginx | awk ‘{print $1}‘)
9、容器资源限制
查看容器资源情况
[root@master ~]# docker stats 72a3c79b3c5e CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 72a3c79b3c5e compassionate_euler 0.00% 1.391MiB / 3.682GiB 0.04% 656B / 0B 0B / 0B 2
CPU 资源限制
根据CPU核心去绑定
# 容器可占用的 CPU 核编号,0-3 表示占用四个核,0,1 表示占用两个核 [root@master ~]#
[root@master ~]# docker run --name nginx-t1 --cpuset-cpus=0 -d -P nginx
内存限制
[root@master ~]# docker run --name nginx-t2 --cpuset-cpus=0 -m 300M -d -P nginx
10、容器空间限制
容器可占用的 CPU 核编号,0-3 表示占用四个核,0,1 表示占用两个核 [root@master ~]# docker run --name nginx-t1 --cpuset-cpus=0 -d -P nginx
限制单个容器使用的磁盘空间(非全局)
docker run -it --storage-opt size=12m alpine:latest /bin/df -h | grep overlay
Dokcer 中使用overlay2.size (注意存储驱动overlay),限制每个容器可以占用的磁盘空 间,并且需要xfs(CentOS 7默认的文件)文件系统支持,xfs挂载时使用pquota参数, 在实 际的生产中,建议用独立的磁盘作为docker的存储盘。
增加一块硬盘格式化为xfs
[root@master /]# mkdir /data1 [root@master /]# docker info | grep "Storage Driver" Storage Driver: overlay2
[root@master /]# docker info | grep "Backing"
Backing Filesystem: <unknown>
[root@master /]# fdisk /dev/sdb
[root@master /]# mkfs.xfs /dev/sdb
[root@master /]# ll /dev/disk/by-uuid/*
正常情况
[root@master /]# docker info Server Version: 19.03.6 Storage Driver: overlay2 Backing Filesystem: xfs
设置/etc/fstab挂载
[root@master /]# vim /etc/fstab UUID=64f31a87-89fe-4b36-9e56-95d72ffe82fd /data1 xfs defaults 0 0
查看挂载
[root@master /]# cat /etc/fstab /dev/sdb /data1 xfs rw,relatime,attr2,inode64,noquota 0 0
配置docker(这块配置有问题docker起不来,json格式好像不对)
[root@master ~]# mkdir -p /data/docker [root@master ~]# vi /etc/docker/daemon.json
{ "registry-mirrors": ["https://plqjafsr.mirror.aliyuncs.com"],
"data-root": "/data/docker", "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true", "overlay2.size=1G"] }
重启docker
[root@master ~]# ssystemctl restart docker.service
查看docker
[root@master ~]# docker info | grep ‘Docker Root Dir‘
启动容器测试
[root@master ~]# docker run -it centos /bin/bash [root@f6b9617d3736 /]# dd if=/dev/zero of=/test.txt bs=130M count=10
dd: error writing ‘/ test.txt‘: No space left on device
启动新容器,写入文件
[root@master ~]# docker run -it centos /bin/bash [root@4dd62c6ef62e /]# dd if=/dev/zero of=/test1.txt bs=230M count=1
1+0 records in 1+0 records out
原文:https://www.cnblogs.com/lhanghang/p/13574286.html