赞
踩
目录
1.6docker帮助命令文档——docker --help
3.4启动容器(一次性执行)—— docker run
3.8容器导出/导入——docker export/import
4.2怎么看当下有多大号容器,怎么看当下所有容器占用的I/O有多少,占用内存多少?
引言:本章介绍docker的一些基本命令操作
- #查看下载到本地的所有镜像
- docker images
-
- REPOSITORY TAG IMAGE ID CREATED SIZE
- --------------------------------------------------------------------------------
- REPOSITORY:镜像属于的仓库;
- TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
- IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像,经过md5方式加密过;
- CREATED:镜像创建时间;
- VIRTUAL SIZE:镜像大小;
-
-
- #选项
- -a //列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
- --digests //显示镜像的摘要信息;
- -f //显示满足条件的镜像;
- --format //指定返回值的模板文件;
- --no-trunc //显示完整的镜像信息;
- -q //只显示镜像ID
- docker ps -a #-a 选项可以显示所有的容器
-
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-
- ##字段说明
- CONTAINER ID:容器的ID号
- IMAGE:加载的镜像
- COMMAND :运行的程序
- CREATED :创建时间
- STATUS:当前的状态
- PORTS:端口映射
- NAMES:名称
docker run hello-world
run指令 运行
①**检测**本地有没有该镜像(没有的话直接到docker hub上下载)
②create(将镜像创建为容器)+ start 将创建好的容器运行起来
工作流程:
(1)docker client客户端连接到了服务端(服务端是以一个守护进程的形式跑在操作系统里面的) restful api典型的c/s架构
(2)由docker服务端的守护进程从docker hub 上下载了镜像(Ps:服务端会先检查本地系统是否有这个镜像)
(3)服务端创建了一个新的容器,然后从拉去的这个镜像启动了一个容器,容器执行了脚本/可执行程序让我们可以查看/使用(client)
(4)docker 服务端把这些信息流(传递)返回到客户端并展示出来,(展示在终端上)
(5)docker client可以是多种形式,比如"docker"命令工具所在的终端
- docker version
- docker -v
- docker info
- #可以用该命令统计每一个状态的容器有多少个
-
- Client:
- Context: default
- Debug Mode: false
- Plugins:
- app: Docker App (Docker Inc., v0.9.1-beta3)
- buildx: Docker Buildx (Docker Inc., v0.7.1-docker)
- scan: Docker Scan (Docker Inc., v0.12.0)
-
- Server:
- Containers: 1 #容器连接数量
- Running: 0 #正在运行的容器数量
- Paused: 0 #暂停的容器数量
- Stopped: 1 #停止的容器数量
- Images: 2 #统计的镜像数量
- Server Version: 20.10.12 #docker版本
- Storage Driver: overlay2 #存储引擎,早期有一段用的是aufa存储引擎,可以把多个目录叠在在一起后挂载到同一个目录一下
- Backing Filesystem: xfs #后端的文件系统
- Supports d_type: true
- Native Overlay Diff: true
- userxattr: false
- Logging Driver: json-file
- Cgroup Driver: cgroupfs #linux中资源控制,资源管理的驱动:cgroupfs
- Cgroup Version: 1
- Plugins: #插件
- Volume: local #镜像默认保存位置。可以不保存在本地,docker是以引擎的方式架设在linux之上的。
- Network: bridge host ipvlan macvlan null overlay #所支持的默认的网络类型。bridge(桥接)、host(主机)、ipvlan(三层模式划分vlan)、macvlan(二层模式划分vlan)、null(躺平:不与别人交互)、overlay(叠加网络)
- Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
- Swarm: inactive
- Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc #运行时
- Default Runtime: runc #默认运行时的版本
- Init Binary: docker-init
- containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
- runc version: v1.0.2-0-g52b36a2
- init version: de40ad0
- Security Options:
- seccomp
- Profile: default
- Kernel Version: 3.10.0-693.el7.x86_64
- Operating System: CentOS Linux 7 (Core)
- OSType: linux
- Architecture: x86_64
- CPUs: 4 #总计cpu
- Total Memory: 1.718GiB #总计内存
- Name: docker
- ID: DT7Y:MDZR:NVOS:NQBJ:C2RV:L5IS:OSLD:E3DG:3PSN:EJDH:ZYMU:42HS
- Docker Root Dir: /var/lib/docker #docker家目录
- Debug Mode: false
- Registry: https://index.docker.io/v1/ #默认仓库
- Labels:
- Experimental: false
- Insecure Registries:
- 127.0.0.0/8
- Registry Mirrors:
- https://4abdkxlk.mirror.aliyuncs.com/
- Live Restore Enabled: false
docker --help
默认是在公共仓库找,如果有私有仓库,会在私有仓库找
- #格式:docker search 关键字
- #示例:
- docker search hello-word
- docker search nginx
- docker search centos:7
- ——》同时我们也可以自己制作镜像推送到docker hub上
- Docker Hub(Docker埠,内有大量存储库或叫仓库)是Docker提供的一项服务,用于查找和与团队共享容器镜像。
- #格式:docker pull 仓库名称[:标签]
- #如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
- docker pull centos:7
- docker pull nginx
docker images
- #格式:docker inspect 镜像ID
- #示例:查看nginx镜像信息
- docker insect 605c77e624dd
- #格式:docker tag 名称:[旧标签] 新名称:[新标签]
- #示例:
- docker tag nginx:latest nginx:lnmp #给nginx打上标签lnmp,原来的标签是latest
- #导出镜像
- #格式:docker save -o 存储文件名 存储的镜像
- docker save -o nginx_docker nginx:latest #存出镜像命名为nginx存在当前目录下
- scp nginx_v1 @root:192.168.137.15:/opt #将导出的镜像以scp方式导到别的服务器上
docker rmi是docker rm image的简写
- #格式:
- docker rmi 仓库名称:标签 #当一个镜像有多个标签时,只是删除其中指定的标签
- docker rmi 镜像ID号 #会彻底删除该镜像
- #docker images -q 可以加载镜像id
-
- #批量删除所有镜像
- docker rmi `docker images -q`
-
- #批量删除nginx镜像
- docker rmi `docker images|grep "nginx"
- #导入镜像,可以异地导入,但是必须要有docker引擎,并且版本不可以差太多
- #格式:docker load < 存出的文件
- docker load < nginx_lnmp
docker save -o 包名.tar 镜像1 镜像2 镜像3
示例: 批量打包方法
将机器上的所有镜像打包到xiao.tar文件里面
docker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o xiao.tar
迁移到其他主机,解压加载镜像:
docker load -i xiao.tar
- docker ps -a
-
- #选项:
- -a : 显示所有的容器,包括未运行的。
- -f : 根据条件过滤显示的内容。
- --format : 指定返回值的模板文件。
- -l : 显示最近创建的容器。
- -n : 列出最近创建的n个容器。
- --no-trunc : 不截断输出。
- -q : 静默模式,只显示容器编号。
- -s : 显示总的文件大小。
- docker ps -a
-
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-
- 容器的ID号 加载的镜像 运行的程序 创建时间 当前的状态 端口映射 名称
- 新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。
-
- #格式:docker create [选项] 镜像
- #常用选项:
- -i:让容器的输入保持打开
- -t:让 Docker 分配一个伪终端
- -d:后台守护进程的方式运行
-
- #示例:
- docker create -it nginx:latest /bin/bash
- #格式:docker start 容器的ID/名称
- docker start b2a57b3ea48a
- docker ps -a
-
-
- 停止容器
- docker stop 容器ID
- #加 -d 选项让 Docker 容器以守护形式在后台运行。并且容器所运行的程序不能结束。
-
- #示例1:
- docker run -itd nginx:latest /bin/bash
-
- #示例2:执行后退出
- docker run centos:7 /usr/bin/bash -c ls /
-
- #示例3:执行后不退出,以守护进程方式执行持续性任务
- docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"
示例1:
示例2:
示例3:
- watch -n 2 docker ps -a
-
- 每两秒执行一次docker ps -a
- #命令格式:
- docker logs [容器id]
- #命令效果:
- $ docker logs 7c5a24a68f96
- #命令格式:
- docker port [容器id]
- #命令效果:
- $ docker port 930f29ccdf8a
- #没有效果没有和宿主机关联
- #作用:
- 修改容器的名称
- #命令格式:
- docker rename [容器id]或[容器名称] [容器新名称]
- #命令效果:
- $ docker rename 930f29ccdf8a u1
- #格式:docker inspect 容器id
- docker ps -a #先查看运行时容器的id
- docker inspect e5f97c4ce37f
先查看运行时容器的id
查看容器ip地址
进入容器的容器状态必须是up状态
exec和shell 是两种运行模式
docker run -it会创建前台进程,但是会在输入exit后终止进程。
docker attach会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止容器进程
docker exec -it 会连接到容器,可以像sSH一样进入容器内部,进行操作,可以通过exit退出容器,不影响容器运行。
- #需要进入容器进行命令操作时,可以使用 docker exec 命令进入运行着的容器。
-
- #格式:docker exec -it 容器ID/名称 /bin/bash
- -i 选项表示让容器的输入保持打开;
- -t 选项表示让 Docker 分配一个伪终端。
-
- #示例:进入(三种方式)
- docker run -itd centos:7 /bin/bash #先运行容器
- docker ps -a
- ①使用run进入,可以使用ctrl+d退出,直接退出终端
- docker run -it centos:7 /bin/bash
-
- ②想永久性进入,退出后还是运行状态,用docker exec
- docker ps -a
- docker exec -it b99e0771c4e1 /bin/bash
-
- ③docker attach,会通过连接stdin,连接到容器内输入输出流,公在输入exit后终止容器进程(临时性的,不推荐)
①使用run进入,是一次性进入
②永久性进入,用docker exec
我们生产中常用的进入容器方法是使用脚本,脚本内容如下:
- #!/bin/bash
- #定义进入仓库函数
- docker_in(){
- NAME_ID=$1
- PID=$(docker inspect --format {{.State.Pid}} $NAME_ID)
- nsenter --target $PID --mount --uts --ipc --net --pid
- }
- docker_in $1
用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export 命令将已经创建好的容器导出为文件,无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。
- #导出格式:docker export 容器ID/名称 > 文件名
- docker export 4ca1bf9275c4 > nginx_latest
-
- #导入格式:cat 文件名 | docker import – 镜像名称:标签
- 法①
- docker import nginx_latest nginx_v1 #导入后会生成镜像,但不会创建容器
- 法②
- cat nginx_latest |docker import - nginx_v2
导出:
导入:
方法一:
方法二:
- #格式:docker rm [-f] 容器ID/名称
-
- 1.#不能删除运行状态的容器,只能-f强制删除,或者先停止再删除
- docker rm 3224eb044879
-
- 2.#已经退出的容器,可以直接删除
- docker rm 1270a6791069
-
- 3.#基于名称匹配的方式删除
- docker rm -f distracted_panini
-
-
- 4.#删除所有运行状态的容器
- docker rm -f `docker ps -q`
-
- 5.#删除所有容器
- docker rm -f `docker ps -aq`
-
- 6.#有选择性的批量删除 (正则匹配)
- docker ps -a l awk ' {print "docker rm "$1}'l bash
-
- 7.#删除退出状态的容器
- for i in `dockef ps -a l grep -i exit / awk '{print $1}' '; do docker rm -f $i;done
不能删除运行状态的容器,只能-f强制删除,或者先停止再删除
已经退出的容器,可以直接删除
扩展:自定义一个容器
- docker run -it --name nginx \
- -v /data_nginx/:/usr/local/nginx/conf \
- -v /log_nginx:/usr/local/nginx/logs \
- log-driver=json-file \
- log-opts max-size=500m \
- log-opts max-file=3 \
- -p 81:80 \
- -P 8443:443 \
- --network ky19 \
- --ip 172.18.0.10 \
- nginx:latest
- docker run -itd --name nginx.01 nginx:latest /bin/bash
- ###指定一个容器运行
- docker commit 8d0eb4fd2119 nginx-v1beta
- ### commit 直接提交
docker stats
使用docker stats命令查看
Docker容器可以有四种状态:
运行
已暂停
重新启动
已退出
LowerDir
MergedDir
UpperDir
WorkDir
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。