当前位置: 首页 > article >正文

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
这个可以多看一些具体的某个进程
在这里插入图片描述

但是不是持续的

总结


http://www.kler.cn/a/590729.html

相关文章:

  • SpringBoot-已添加并下载的依赖,reload和mvn clean 后还是提示找不到jar包问题
  • 东芝2323AMW纸盒和输稿器安装注意事项(也适用于2523A等白壳机)
  • Spring Boot集成MQTT完整示例和常见问题的解决方案
  • Netty基础—8.Netty实现私有协议栈二
  • 激光slam学习笔记10---ubuntu2004部署运行fastlivo2踩坑记录
  • 【Ratis】ReferenceCountedObject接口的作用及参考意义
  • springboot多种生产打包方式教程
  • 【从零开始学习计算机】计算机网络(一)计算机网络分层结构
  • javaEE————文件IO(1)
  • MySQL使用pxc实现高可用
  • Day34 | 300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组、1143. 最长公共子序列
  • 卓越的用户体验需要智能内容
  • MiddleVR for Unity插件
  • Linux FILE文件操作1-文件指针、文件缓冲区(行缓冲、全缓冲、无缓冲)的验证
  • Java学习------抽象类和接口
  • 图解AUTOSAR_CP_WatchdogDriver
  • 什么是梯度方差和缩放因子
  • Effective C++ 剖析(条款1~9)
  • 前端面试:axios 是否可以取消请求?
  • jmeter分布式原理及实例