docker4-容器命令及其案例
前言
Docker Container(容器)
什么是容器?
通俗地讲,容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要
的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容
器有初建、运行、停止、暂停和删除五种状态。
虽然容器的本质是主机上运行的一个进程,但是容器有自己独立的命名空间隔离和资
源限制。也就是说,在容器内部,无法看到主机上的进程、环境变量、网络等信息,
这是容器与直接运行在主机上进程的本质区别。
容器是基于镜像创建的可运行实例,并且单独存在,一个镜像可以创建出多个容器。
运行容器化环境时,实际上是在容器内部创建该文件系统的读写副本。 这将添加一个
容器层,该层允许修改镜像的整个副本。
比
镜像是不能改的–》类–》dockerfile来写镜像
容器是可以改的—》对象
为什么需要容器?
镜像是静态的文件,并不能提供服务,就像我拿了个Linux或者Windows的光盘一样,
只有安装到主机里面运行起来才能对外提供服务,我们才能使用。
容器的生命周期
容器的生命周期是容器可能处于的状态。
created:初建状态 ,插车钥匙
running:运行状态 踩油门
stopped:停止状态 --> 暂时退出不运行了,把车钥匙抽出来,还可以继续运行,相当于退出
paused: 暂停状态 --》可变为运行状态,暂停一会儿,踩刹车–》占cpu的时间片到了
deleted:删除状态 --》车报废
docker create : 创建容器后,不立即启动运行,容器进入初建状态;
docker run : 创建容器,并立即启动运行,进入运行状态;
docker start : 容器转为运行状态;
docker stop : 容器将转入停止状态;
docker kill : 容器在故障(死机)时,执行kill(断电),容器转入停止状态,这种
操作容易丢失数据,除非必要,否则不建议使用;
docker restart : 重启容器,容器转入运行状态;
docker pause : 容器进入暂停状态;
docker unpause : 取消暂停状态,容器进入运行状态;
docker rm : 删除容器,容器转入删除状态。
killed by out-of-memory(因内存不足被终止) :宿主机内存被耗尽,也被称为OOM:非计划终止 这时需要杀死最吃内存的容器
container process exitde(异常终止):出现容器被终止后,将进入Should restart?选
择操作:
• yes 需要重启,容器执行start命令,转为运行状态。
• no 不需要重启,容器转为停止状态
容器命令清单
docker create
docker container create
创建容器 ,不运行
docker run
docker container run
运行容器
docker attach
docker container attach
连接到正在运行中的容器
docker commit
docker container commit
将镜像提交为容器
docker cp
docker container cp
在容器和宿主机之间拷贝
docker diff
docker container diff
检查容器里文件结构的更改
docker exec
docker container exec
在运行的容器中执行命令
docker export
docker container export
将容器导出为tar
docker container inspect
查看容器详细信息
docker kill
docker container kill
杀死容器
docker logs
docker container logs
查看日志
docker ps
查看正在运行的容器进程
docker container ls,
docker container list,
docker container ps
docker pause
docker container pause
暂停进程 容器,剥夺cpu时间片
docker port
docker container port 查看容器的端口映射
docker container prune
删除停止的容器
docker rename
docker container rename
重命名容器
docker restart
docker container restart
重启容器
docker rm
docker container rm,
删除容器
docker container remove
docker start
docker container start
启动容器
ocker stats
docker container stats
查看资源占用信息
docker stop
docker container stop 停止容器
docker top
docker container top
查看某个容器的资源占用
docker unpause
docker container unpause
继续运行容器
docker update
docker container update
更新容器配置
docker wait
docker container wait 阻止一个或多个容器停 止,然后打印退出代码
docker create
功能
创建一个新的容器但不启动它
• 语法
docker create [OPTIONS] IMAGE [COMMAND] [ARG…]
[COMMAND] [ARG…] 就是启动的指令还有参数
• 别名
docker container create
-i: 以交互模式运行容器,通常与 -t 同时使用;
○ -P: 随机端口映射,容器内部端口随机映射到主机的端口
○ -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
○ -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
○ --name=“nginx-lb”: 为容器指定一个名称;
○ -h “mars”: 指定容器的hostname;
○ -e username=“ritchie”: 设置环境变量;
○ --cpuset-cpus=“0-2” or --cpuset-cpus=“0,1,2”: 绑定容器到指定 CPU运行;
○ -m :设置容器使用内存最大值;
○ --network=“bridge”: 指定容器的网络连接类型;
○ --link=[]: 添加链接到另一个容器;
○ --volume , -v: 绑定一个卷
○ --rm :shell退出的时候自动删除容器
比特就业课
○ --restart:自动重启
与docker run没有什么区别,区别就是docker run多了一个-d
docker create --name mywebsite1 -p 80:80 nginx:1.24.0
我们这个直接创建成功了
我们查看一下端口
netstat -nltp | grep 80
这个我们发现本地的80端口已经被占了,但是还是创建容器成功了
这个是因为没有运行,所以不会报错
docker ps -a就可以看到创建的容器了
但是docker ps看不到
状态是created
docker start mywebsite1
这个就可以启动了,这个容器就run起来了
但是会报错,因为80端口被占了
改一下就可以了
docker logs
功能
查看容器日志
• 语法
docker logs [OPTIONS] CONTAINER
CONTAINER 是容器的名字或者id
• 别名
docker container logs
• 关键参数
○ -f ,–follow: 跟踪日志输出 --》持续输出
○ --since :显示某个开始时间的所有日志
○ -t,–timestamps : 显示时间戳
○ -n,–tail :仅列出最新N条容器日志
我们先启动一个容器
docker run -d -p 8051:80 --name mywebsite4 nginx:1.24.0
docker logs mywebsite4
这个就是直接打印出所有的日志,然后就退出了
docker logs -f mywebsite4
这个是追踪输出,底下并没有直接退出
服务器有相应就会继续输出信息
可以试一下,网页8051端口一直刷新,就会实时一直更新日志
docker logs -f --since=“2099-07-01” mywebsite4
这个就是输出这个容器2099-07-01后的日志
肯定什么都没有了
docker logs -f -n 5 mywebsite4
这个就是看最新的前五条日志
然后就是每次刷新又会显示最新的前五条,因为是实时更新的
docker attach
用的不多
功能
连接到正在运行中的容器。
• 语法
docker attach [OPTIONS] CONTAINER
• 别名
docker container attach
• 关键参数
○ --sig-proxy:是否将所有信号代理,默认是true,如果设置为false,退出的
话不会影响容器,否则退出会导致容器退出
链接的是std的标准输入输出流,就是日志,err这种
docker attach mywebsite4
这个就可以进入这个容器
然后刷新8050端口,就会自动的输出了
因为这个attach接管的是输入输出流
这个就自动的输出日志了
如果我们输入ctrl c
直接就退出了
而且mywebsite4这个容器也是直接就退出了
但是容器并没有消失,只是退出了
我们在docker start mywebsite4就可以启动了
docker attach --sig-proxy=false mywebsite4
输入这个的话,我们再次ctrl+c就还是会退出
但是我们的站点,我们的容器还是在运行的
docker exec
功能
在容器中执行命令
• 语法
docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
• 别名
docker container exec
• 关键参数
○ -d :分离模式: 在后台运行
○ -i :即使没有附加也保持STDIN 打开
○ -t :分配一个伪终端
○ -e :设置环境变量
○ -u,–user :指定用户 “<name|uid>[:<group|gid>]”
○ -w,–workdir:指定工作目录
docker exec -it mywebsite4 bash
这个就是交互式运行
这样就进入了nginx容器里面了
这里面就可以输入命令了
docker exec -it mywebsite4 nginx -v
这个是查看nginx版本
docker exec -it mywebsite4 nginx -V
这个是查看详细版本
这个虽然是交互运行的
但是不像bash是持续性的交互
docker exec -d mywebsite4 nginx -V
如果是后台执行的话是没有打印的
docker exec -it -e mynginx=maxhou mywebsite4 bash
env | grep mynginx
我们可以指定一个环境变量,交互式进入这个容器
docker exec -it mywebsite4 cat /etc/passwd
这个可以查看nginx里面的用户
我们发现有一个用户叫做nginx
docker exec -it -u nginx mywebsite4 nginx -v
这个就是指定用户来交互式运行nginx -v这个命令,只交互一下下
如果是一个不存在的用户就会直接报错
docker exec -it -w /etc mywebsite4 bash
这个就是进入容器指定目录
不指定的话就是在/目录下
还是-it+bash进入好用
docker start
功能
启动停止的容器
• 语法
docker start [OPTIONS] CONTAINER [CONTAINER…]
• 别名
docker container start
• 样例
docker start mynginx
docker ps
看哪些容器在运行–》start和run起来的容器
docker stop mywebsite4
停止一些容器
docker start mywebsite4
这样docker ps就可以查看到了
docker stop
功能
停止运行的容器
• 语法
docker stop [OPTIONS] CONTAINER [CONTAINER…]
• 别名
docker container stop
• 关键参数
○ -s :发送的信号
docker run -it busybox sh
再开一个shell
docker stop busybox
另一边的就会自动退出来了
docker ps表示不管你是交互的还是后台运行
都可以停止
docker start就可以启动了
docker restart
功能
重启容器
• 语法
Shell
docker restart [OPTIONS] CONTAINER [CONTAINER…]
• 别名
Shell
docker container restart
• 关键参数
○ -s :发送信号
这个就等于先stop在start的操作
运行时间重新开始
docker restart -s 9 mywebsite4
这个就是强制停止杀死,比如kill 9
一般不用
docker kill
功能
强制退出容器
• 语法
docker kill [OPTIONS] CONTAINER [CONTAINER…]
• 别名
docker container kill
• 关键参数
○ -s :发送的信号
• 注意事项:
○ Docker stop发送的是SIGTERM信号,比较温柔,会慢慢退出,给你时间保存数据,有日志输出,docker kill发送的是SIGKILL信号,直接就杀死了 ,很快,没有日志输出
• 样例
docker logs -f -n 5 mywebsite4
我们可以通过这个来查看日志,就知道是怎么杀死的了
docker top
功能
查看容器中运行的进程信息,支持 ps 命令参数。
• 语法
docker top CONTAINER [ps OPTIONS]
• 别名
docker container top
• 注意事项
容器运行时不一定有/bin/bash终端来交互执行top命令,而且容器还不一定有
top 命令,可以使用docker top来实现查看container中正在运行的进程。
• 样例
就是在容器外面查看里面运行的进程
docker ps mywebsite4
docker ps mywebsite4 aux
这个看的更清楚
docker stats
功能
显示容器资源的使用情况,包括:CPU、内存、网络 I/O 等。
• 语法
docker stats [OPTIONS] [CONTAINER…]
• 别名
docker container stats
–all , -a :显示所有的容器,包括未运行的。
○ --format :指定返回值的模板文件。如table,json
○ --no-stream :展示当前状态就直接退出了,不再实时更新。
○ --no-trunc :不截断输出。
• 返回报文
CONTAINER ID 与 NAME: 容器 ID 与名称。
CPU % 与 MEM %: 容器使用的 CPU 和内存的百分比。
MEM USAGE / LIMIT: 容器正在使用的总内存,以及允许使用的内存总量。
NET I/O: 容器通过其网络接口发送和接收的数据量。
BLOCK I/O: 容器从主机上的块设备读取和写入的数据量。
PIDs: 容器创建的进程或线程数
docker stats
默认显示的是运行的容器资源信息,而且是实时刷新的
docker stats mywebsite4就是监控一个容器
docker stats -a
显示所有
docker stats --format json
docker stats --no-stream
不实时刷新
docker container inspect
功能
查看容器详细信息
• 语法
docker container inspect [OPTIONS] CONTAINER [CONTAINER…]
container 可以省略
• 关键参数
○ -f :指定返回值的模板文件。如table、json
○ -s :显示总的文件大小。
• 注意事项:
○ docker inspect 会自动检查是镜像还是容器然后显示相信信息
docker container inspect mywebsite4
默认是table的,json就是全部放在一行了
docker port
功能
用于列出指定的容器的端口映射,或者查找将 PRIVATE_PORT NAT 到面向公众
的端口。
• 语法
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
• 别名
docker container port
就是查看映射的哪些端口
docker port myweebsite4
就是查看映射本机的端口,可能有很多
docker port mywebsite3 80
就是看mywebsite3 的80端口映射的哪个,只有一个结果
docker port mywebsite3 80/tcp
就是看mywebsite3 的80端口且为tcp映射的哪个,只有一个结果
docker cp
功能
在容器和宿主机之间拷贝文件
• 语法
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
• 别名
docker container cp
拷贝的容器要有容器名作为识别
docker exec -it mywebsite4 bash
这个是容器运行的时候进入容器里面执行命令
而docker run-it mywebsite4 bash是容器还没运行的时候,直接运行+进入里面
docker cp mywebsite4:/usr/share/nginx/html/index.html .
这个就是把容器里面的这个文件拷贝到当前宿主机的目录上
当然也可以反过来拷贝都是一样的
docker diff
功能
检查容器里文件结构的更改。
• 语法
docker diff CONTAINER
就是相比镜像的文件内容修改了什么内容
A表示增加
C表示修改
docker commit
功能
从容器创建一个新的镜像。
• 语法
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
• 参数
○ -a :提交的镜像作者;
○ -c :使用Dockerfile指令来创建镜像;可以修改启动指令
○ -m :提交时的说明文字; 注释
○ -p :在commit时,将容器暂停
就是把我们运行中的一个容器提交为一个新的镜像,在提交到仓库
就是完成一个自定义镜像
docker commit mywebsite4forcomit mywebsite4:v1.0
这个的意思就是把mywebsite4forcomit 这个容器制作为镜像mywebsite4:v1.0
docker image mywebsite4
也是可以查到的
如果我们对一个容器里面进行了修改,然后commit成镜像
然后把这个镜像又运行
那么新的容器里面是有原来的修改的,内容也是不变的
这就是自定义镜像的制作
docker commit -a ‘bit’ -m ‘create by bit’ -p mywebsite4forcomit mywebsite4:v1.0
这个就会多了两个详细信息的
我们先看一下nginx的启动命令
docker image inspect nginx:1.24.0
就是nginx -g daemon off
这个就是启动命令
然后就是我们commit新的镜像的时候,可以修改cmd命令
docker commit -a ‘bit’ -m ‘create by bit’ -p -c ‘CMD [“tail”,“-f”,“/etc/hosts”]’ mywebsite4forcomit mywebsite4:v4.0
这样就修改了启动命令了
docker image inspect mywebsite4:v4.0
这样也看出了启动命令的修改
docker pause
功能
暂停容器中所有的进程。
• 语法
docker pause CONTAINER [CONTAINER…]
• 别名
docker container pause
就是剥夺cpu的时间片
docker pause mywebsite4
docker unpause
docker unpause mywebsite4
就是取消暂停
暂停状态也就是pause状态,docker ps是可以查看到的–》暂停,启动,运行
暂停状态但是无法使用容器
docker puase mywebsite4 mywebsite5
可以暂停多个
也可以回复暂停多个
docker rm
功能
删除停止的容器 —》stop的
• 语法
docker rm [OPTIONS] CONTAINER [CONTAINER…]
• 别名
docker container rm
• 关键参数
○ -f :通过 SIGKILL 信号强制删除一个运行中的容器。
运行中的容器不能docker rm mywebsite4
docker rm -f mywebsite4—》这个很危险
docker export
功能
导出容器内容为tar文件
• 语法
docker export [OPTIONS] CONTAINER
• 别名
docker container export
• 关键参数
○ -o:写入到文件
就是把容器转化为一个tar文件
docker export -o mywebsite4.tar mywebsite4
这样就会生成mywebsite4.tar 在当前目录
docker import
这个是镜像的命令
就是把tar文件还原成镜像
docker import mywebsite4.tar mywebsite4:v1.0
docker image mywebsite4
这样就有镜像了
docker image inspect mywebsite4:v1.0
注意这个镜像,很多东西都丢了,比如Env,Cmd
所以说docker export导出的镜像,会丢失源数据的信息
但是docker save导出的镜像就可以携带源数据的信息
docker import -c ‘CMD [“nginx”,“-g”,“daemon off”]’ -m “createByme” mywebsite4.tar mywebsite4:v2.0
这样把tar变成的镜像就有了Cmd还有注释Commnet了
一般用save
docker wait
功能
阻塞运行直到容器停止,然后打印出它的退出代码。
• 语法
docker wait CONTAINER [CONTAINER…]
• 别名
docker container wait
docker wait mywebsite4
输入了这个,就会一直等着这个容器
直到它停止,就会打出退出码
我们在另一个shell
docker kill mywebsite4
就可以得到退出码了
docker rename
功能
重命名容器
• 语法
docker rename CONTAINER NEW_NAME
• 别名
docker container rename
docker rename mywebsite4 mywebsite9
改成了名字不能被其他容器使用的
docker container prune
功能
删除所有停止的容器 --》stop的
• 语法
docker container prune [OPTIONS]
• 关键参数
○ -f, --force:不提示是否进行确认
没有-f还会提示一下
docker update
功能
更新容器配置
• 语法
docker update [OPTIONS] CONTAINER [CONTAINER…]
• 别名
docker container update
• 关键参数
○ --cpus:cpu数量
○ --cpuset-cpus :使用哪些cpu
○ --memory :内存限制
○ --memory-swap:交换内存
○ --cpu-period :是用来指定容器对CPU的使用要在多长时间内做一次重新分
配 —》cpu有多少份–》100份
○ --cpu-quota:是用来指定在这个周期内,最多可以有多少时间用来跑这个容
器 --》使用多少份–》十份
docker stats mywebsite4
查看容器使用资源
docker update -m 500m mywebsite4
修改最大使用内存
但是一般是在run的时候指定使用的内存
所以这个命令使用很少
操作案例
容器基本操作
docker images nginx
docker run -d --name mynginx001 -p 8101:80 nginx:1.22.0
docker ps
docker container inspect mynginix001
docker logs -f mynginix001
-f是持续的打印
docker ps
docker stop mynginix001
docker rm mynginix001
docker ps -a | grep mynginix001
容器状态迁移
docker create --name mynginx002 -p 8102:80 nginx:1.22.0
docker ps看不到的mynginx002 ,因为这个是创建态,不是运行态—>created
创建态也就是停止态
docker start mynginx002 变成了运行态–》up
docker kill就是把运行态变为退出态
docker start mynginx002 退出态变成运行态
docker stop mynginx002 运行态变为退出态
docker start mynginx002 退出态变成运行态
docker restart mynginx002 运行态变退出态然后是运行态
docker pause mynginx002 运行态变为暂停态
docker unpause mynginx002暂停态变为运行态
docker runmynginx002 退出态变为运行态
容器批量处理技巧
docker container ls -qf name=xxx 根据名称过滤得到容器编号
docker container ls --filter status=running 根据状态过滤容器信息
docker container ls -aq 静默获取全部容器id
docker container ls --filter ancestor=xxx 过滤镜像名为xxx 的容器信息
docker container ls --filter ancestor=xxx 过滤镜像id为xxx的容器信息
docker container ls 就是docker ps
-a:表示打印所有的容器信息, 包括正在运行和已经退出的
• -q: 表示只返回容器ID
• -f: 表示基于给的条件过滤 等价于 --filter选项
docker ps -a
docker ps -f name=mynginx003
这个是指定名字过滤
docker ps -f status=running
指定状态过滤
docker ps -f status=exited 退出状态
docker ps -f ancestor=nginx:1.23.4
这个就是过滤出用nginx:1.23.4创建的容器
docker ps ancestor=镜像id
用镜像id过滤
-q就是只返回id
容器交互模式 attached模式
就是前台运行,控制台信息那些都打印在前台
主进程里面有一个主线程
还有子线程
子线程就是后台
主线程就是前台
docker run --name mynginx006 -p 8106:80 nginx:1.24.0
这样一跑前台模式的容器就创建好了
所有的日志都是打在这个控制台
按了ctrl+c就会退出了
然后docker ps也不能查看了
docker ps -a肯定是可以查到的
所以这个不能用于生产环境
只能用于调试环境
detached 模式
就是后台运行
就是-d
docker run -d --name mynginx007 -p 8107:80 nginx:1.24.0
这个就是后台运行了
不会因为ctrl+c就停止运行了
docker logs -f mynginx007
这个就是输出这个容器的日志
而且是持续输出的
ctrl+c就可以退出了
我们在这个后台运行的容器输入
docker attach mynginx007
—》后台运行就变成了前台运行了
interactive模式
这个就是交互式模式
就是进入容器里面
就是-it
docker run -it --name mynginx008 -p 8108:80 nginx:1.24.0 bash
这个是与bash进行交互的
但是8108端口是无法访问80的
为什么呢
因为上面两个模式的启动命令默认就是nginx
但是我们这个交互模式默认的启动命令就是bash了,因为加了一个bash
在bash里面加入一个nginx就可以启动nginx了
这样就可以了
如果交互式模式中按了ctrl+c
是不会退出的
因为是shell遇到了ctrl+c
输入exit就可以了退出了这个容器的shell了
shell退出就是容器退出了
不会用于生产的
容器与宿主机内容复制
docker images nginx
docker run -d --name mynginx011 -p 8111:80 nginx:1.24.0
这个是可以正常运行的
docker exec -it mynginx011 bash
我们用bash命令作为启动命令交互式进入mynginx011
我们找到nginx的首页
cd /usr/share/nginx/html
ll
vi index.html
但是我们这个容器没有vi命令
我们拷贝到宿主机上执行
exit
mkdir -p /data/maxhou/testcp
cd /data/maxhou/testcp
docker cp mynginx011:/usr/share/nginx/html/indedx.html .
vi index.html
docker cp ./index.html mynginx011:/usr/share/nginx/html/
然后进入里面去检查
docker exec -it mynginx011 bash
cd /ustrr/sahre/nginx/html
cat index.html
这样就可以看到修改了
、
因为我们先后台运行的
所有容器里面的nginx命令是启动了的
容器与容器之间可以拷贝文件吗
docker cp .mynginx011:/usr/share/nginx/html/index.html mynginx011:/usr/share/nginx/html/index.html
发现是错误的
容器自动删除
docker run --rm -it --name mynginx012 -p 8112:80 nginx:1.24.0 bash
输入exit
就会自动删除这个容器了
docker ps -a也找不到了
docker run -d --rm --name mynginx012 -p 8112:80 nginx:1.24.0
这个是后台运行
然后输入docker stop mynginx012
容器也是会自动删除的
所以生成环境不要用–rm
容器自动重启
docker run --restart=no这个是默认值,不重启
docker run --restart=on-failure:3 [容器名] : on-failure 若容器的退出状态非0,数字表示最大重试次数,重试好几次重启,还是不行的话,就放弃了
docker自动重启容器,还可以指定重启次数,若超过指定次数未能启动容器则放弃
docker run --restart=always [容器名] :always 容器退出时总是重启
docker run --restart=unless-stopped [容器名] unless-stopped 容器退出时总是重启,
但不考虑Docker守护进程启动时就已经停止的容器
如果容器启动时没有设置–restart参数,则通过下面命令进行更新:
docker update --restart=always [容器名]
我们先来演示停掉进程会不会重启
docker run -d --name mynginx025 -p 8125:80 --restart=always mynginx:1.24.0
docker container inspect mynginx025
这个里面有容器的重启策略
然后杀掉
docker exec -it mynginx025 bash
我们在这个里面把nginx停掉
nginx -s quit
这样shell就退出了
但是这个容器又会起来了
docker stop mynginx025
意思就是docker stop掉容器的话,是不会自动重启的
容器环境变量设置
设置一个-e就可以了
多个环境变量就设置多个-e
要么就是指定一个配置文件
docker run -it --rm -e MYTEST=1 -e MYTEST2=2 -e MYTEST3=3 nginx:1.24.0 bash
env | grep MYTEST
这样就成功了
exit
现在用配置文件的方式
vi myenv
输入MYTEST=1
MYTEST2=2
MYTEST3=3
MYTEST4=4
docker run -it --rm --env-file=./myenv nginx:1.24.0 bash
env | grep MYTEST
这样就可以了
容器详情查看
docker run -d–name mynginx029 -p 8029:80 -e MYTEST=1 -h mynginx029.com nginx:1.24.0
-h是指定主机名
docker container inspect mynginx029
这个就可以看到主机名,env这些东西了
docker ps只是查看的一点重要信息
容器执行单行命令
就是在容器里面安装一些命令
docker images busybox
这个容器是一次性任务,tag只有一个,而且是最新的
docker run --rm busybox ping www.baid.com
看链接的到不www.baid.com
这个我们使用·的ping是busybox里面的ping
docker run --rm busybox ifconfig
这个看的是容器的ip
宿主机的ip直接输入ifconfig就可以了
docker run --rm --net host busybox ifconfig
就是在容器里面打印宿主机的ip
容器镜像导入导出
docker run -d --name mynginx030 -p 8030:80 nginx:1.24.0
docker exec -it mynginx030 bash
cd /usr/share/nginx/html
echo “I am from bit docker” > index.html
exit
退出容器
mkdir -p /data/maxhou/testtar
cd /data/maxhou/testtar
保存为tar包
docker export -o mynginx030.tar mynginx030
我们把ubuntu的tar拷贝到centos中去
在centos中mkdir -p /data/maxhou/testtar
cd /data/maxhou/testtar
在ubuntu中
因为我们这个跨云了
所以scp速度有限制
所以我们用本机来执行拷贝
点这个按钮
连上去
然后再腾讯云上又点一下
连上去
这样就可以了
然后
右击复制
在腾讯云上粘贴就可以了
这样就拷贝成功了
腾讯云上
docker import mynginx030.tar mynginx:v0.30
docker images mynginx
这样就导入成功了
生成镜像了
docker run -d --name mynginx030 -p 80:80 mynginx:v0.30
这里报错了
是因为import导出镜像的时候,把源数据丢失了
docker image inspect mynginx:v0.30
cmd为null
所以run不起来
原来的cmd为
cmd丢了
我们可以在run的时候加回来
docker run -d --name mynginx030 -p 80:80 mynginx:v0.30 nginx -g “deamon off;”
这个意思就是run的时候顺便带的cmd命令
这样就成功了
而且首页也是一样的
说明导入和导出首页是不会变的
我们一般用docker save和docker load来迁移
这样源数据才不会丢失
容器日志查看 177
docker run -d --name mynginx031 -p 8031:80 nginx:1.24.0
docker logs mynginx031
这样就是查看所有的日志
但是不是实时的,看一下就结束了
docker logs -f mynginx031
这个也是查看所有的日志
而且是实时的
docker logs -f -n 5 mynginx031
这个是查看最新的五行,而且也是实时刷新地
如何把日志变成一个文件呢
logs mynginx031 > info.log 2> err.log
第一个>是标准的信息流,正常信息输入到info.log里面
第二个2> 是标准的错误流,错误信息输入到err.log
这样就把日志重定向到这两个文件里面了
还有一种方式就是
其实docker的日志就是存在文件里面的
cd /data/var/lib/docker
一般是/var/lib/docker
进入到docker的根目录
然后进入containers目录
cd containers
这个就是容器的id,文件名就是id名
cd 到我们其中的一个容器
输入ls
然后就是其实日志都存成了这个json文件
日志都是json
容器资源查看
docker run -d --name mynginx032 -p 8032:80 nginx:1.24.0
docker stats mynginx032
这个是看整个的资源占用
docker top mynginx032 aux
这个可以多看一些具体的某个进程
但是不是持续的