一、查看 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'
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-attack-surface
启动容器测试
[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