4.0 查看 Docker 命令行帮助
#查看帮助的方法
Docker 操作命令分为: 管理命令与直接命令参数
1) 管理命令为区分每个项目的命令, 比如说镜像操作, 就是以docker image 开头
2) 直接命令参数就是在docker 命令之后直接的命令, 比如说删除镜像 docker rmi
3) 管理命令相对于直接命令参数,更加严谨。
[root@node-2 ~]# docker --help
4.1 常用基本操作列表
4.2 常用容器操作命令详解
4.2.0 查看容器日志
#启动容器, -P 生成随机映射端口 [root@localhost ~]# docker run --name t1 -d -P nginx #查看日志 [root@localhost ~]# docker logs -f t1 #获取到端口 [root@localhost ~]# docker ps -a #访问容器 [root@localhost ~]# curl http://localhost:32770 #显示日志 [root@localhost ~]# docker logs -f t1 172.17.0.1 - - [20/Mar/2020:03:59:44 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
4.2.1 创建容器
语法:docker container run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
-i 交互模式
-t 终端
-it 为分配一个交互式终端
-d 放在后台 (nohup command &)
-p 端口映射
-v 源地址(宿主机):目标地址(容器) (本地的宿主机的目录挂载到容器目录)
-h 指定容器主机名
--name 指定容器的名字
--restart=always 每次重启服务,容器跟着重启
#创建容器, 并且挂载本地目录到容器目录
#把宿主机的/test目录挂载到容器的/mnt目录(新开终端)
#宿主机建立目录
/
[root@docker ~]# mkdir /test #启动新容器, 指定主机名为 test, 容器名为 t11, 在终端打开-it [root@localhost ~]# docker run -it --name t11 -h test -v /test:/mnt centos /bin/bash #宿主机建立文件 [root@localhost test]# touch /test/1.txt #容器查看文件 [root@1444e17a8998 mnt]# ls /mnt/1.txt /mnt/1.txt
#创建一台新容器,并进入镜像系统
[root@docker ~]# docker container run -it centos /bin/bash [root@f30520fafcbf /]#
/
Docker 容器内的第一个进程必须一直处于前台运行的状态(必须挂起),否则这个容器,就会处于退出状态(-d 后台运行)。
当执行 docker run 时,Docker会启动一个新进程,同时给这个进程分配其独占的文件系统。
注:使用run选项会打开另外一个会话窗口,进入容器,ID不同,并不是同一个容器,相当于在系统当中又开启一个新容器,但是镜像是使用相同的镜像。
4.2.2 容器启动、停止
语法:docker container start [OPTIONS] CONTAINER [CONTAINER...] 完整信息,请查看:docker container start --help 启动一个 container。 #列出所有容器,包括运行与停止的容器, 获取到容器 id [root@docker ~]# docker ps -a #根据容器 id 启动容器 [root@docker ~]# docker start c06fc46a1176 c06fc46a1176 [root@docker ~]# docker ps # 列出正在运行的容器
4.2.3 进入docker 容器
4.2.3.1 exec
语法:docker container exec [OPTIONS] CONTAINER [CONTAINER...] 完整信息,请查看:docker exec–help # exec 会分配一个新的终端(pts) docker container exec -it 容器id 或容器名字 /bin/bash #执行进入必须要带参数和COMMAND(如:/bin/bash) #进入容器可以用容器运行的 id, 也可以用容器名称, 其目的都是唯一定位到容器 [root@localhost ~]# docker container exec -it t11 /bin/bash (父镜像)
/
4.2.3.2 attach
/
语法:docker container attach CONTAINER #如果 Docker 容器是使用/bin/bash 命令启动的,则可以使用 attach [root@localhost temp]# docker attach t11
#exec 与attach 区别
EXEC: 在一个正在运行的容器中执行命令,exec是针对已运行的容器实例进行操作,在已运行的容器中执行命令,不创建和启动新的容器,退出shell不会导致容器停止运行。
Attach: 将本机的标准输入(键盘)、标准输出(屏幕)、错误输出(屏幕)附加到一个运行的容器,也就是说本机的输入直接输到容器中,容器的输出会直接显示在本机的屏幕上,如果退出容器的shell,容器会停止运行。
4.2.4 重启服务,容器自启动当Docker重启时,容器能自动启动
命令行添加参数docker run --restart=always [root@master ~]# docker run -d --restart=always nginx [root@master ~]# service docker restart
/
#查看状态
[root@master ~]# docker ps | grep nginx 5b9a13d0aedb nginx "nginx -g 'daemon of…" About a minute ago Up 48 seconds 80/tcp fervent_lehmann
4.2.5 容器其他操作
/
# 关闭所有正在运行的容器 [root@master ~]# docker kill $(docker ps -q) # 移除所有停止的容器 [root@master ~]# docker rm $(docker ps -a -q) [root@demo ~]# docker container prune # 根据状态移除 [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}')
4.3 容器资源限制
#查看容器资源情况
[root@master ~]# docker stats 67d1b66c71ce
4.3.1 #CPU 资源限制
#根据CPU核心去绑定 # 容器可占用的 CPU 核编号,0-3 表示占用四个核,0,1 表示占用两个核 [root@master ~]# docker run --name nginx-cpu-t1 --cpuset-cpus=0-1 -d -P nginx [root@master ~]# docker run --name nginx-cpu-t2 --cpuset-cpus=0 -d -P nginx
4.3.2 #内存限制
[root@master ~]# docker run --name nginx-memoy-t3 -d --cpuset-cpus=0 -m 300M -P nginx
4.3.3 #容器空间限制
#限制单个容器使用的磁盘空间(非全局)
root@master ~]# 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 #https://github.com/moby/moby/issues/40667 [root@demo ~]# mkdir /data [root@demo jdk]# docker info | grep "Storage Driver" Storage Driver: overlay2 [root@demo ~]# docker info | grep "Backing" Backing Filesystem: <unknown> [root@demo ~]# fdisk /dev/sdb [root@master ~]# mkfs.xfs /dev/sdb1 [root@demo ~]# ll /dev/disk/by-uuid/* #正常情况 [root@demo yum.repos.d]# docker info Server Version: 19.03.6 Storage Driver: overlay2 Backing Filesystem: xfs #设置/etc/fstab UUID=c620987d-9e05-441d-b67b-c6015c51975a /data xfs rw,pquota 0 0 Mount -a #查看挂载 [root@master ~]# cat /proc/mounts | grep sdb /dev/sdb1 /data xfs rw,relatime,attr2,inode64,prjquota 0 0 #配置docker [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 ~]# service docker restart Redirecting to /bin/systemctl restart docker.service #查看docker [root@master ~]# docker info | grep 'Docker Root Dir' WARNING: API is accessible on http://0.0.0.0:2375 without encryption. Access to the remote API is equivalent to root access on the host. Refer to the 'Docker daemon attack surface' section in the documentation for more information: https://docs.docker.com/engine/security/security/#docker-daemon-attacksurface Docker Root Dir: /data/docker #启动容器测试 [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