六、docker学习-Docker容器(container)

Docker容器(container)

容器是镜像的运行时实例。正如从虚拟机模板上启动 VM 一样,用户也同样可以从单个镜像上启动一个或多个容器。虚拟机和容器最大的区别是容器更快并且更轻量级——与虚拟机运行在完整的操作系统之上相比,容器会共享其所在主机的操作系统/内核。下图为使用单个 Docker镜像启动多个容器的示意图。
在这里插入图片描述

  • Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。
  • 容器是镜像的一个运行实例。
  • 可以将其启动、开始、停止、删除,而这些容器都是彼此相互隔离的、互不可见的。
  • 可以把容器看做是一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。
  • 容器是基于镜像启动起来的,容 器中可以运行一个或多个进程。
  • 镜像是Docker生命周期中的构建或打包阶段,而容器则是启动或执行阶段。
  • 镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。

Docker容器常用命令

新建并启动容器
# 语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 运行容器
docker run -itd --rm -name tomcat9 --restart:always -p 8080:8080 tomcat:9.0.20-jre8-alpine
# 常用参数
  -d, --detach=false: 后台运行容器,并返回容器ID
  -i, --interactive=false: 以交互模式运行容器,通常与 -t 同时使用
  -P, --publish-all=false: 随机端口映射,容器内部端口随机映射到主机的端口。不推荐使用该参数
  -p, --publish=[]: 指定端口映射,格式为:主机(宿主)端口:容器端口,推荐各位小伙伴们使用
  -t, --tty=false: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
  --name="nginx-lb": 为容器指定一个名称
  -h , --hostname="laosiji": 指定容器的hostname
  -e , --env=[]: 设置环境变量,容器中可以使用该环境变量
  --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型
  --link=[]: 添加链接到另一个容器;不推荐各位小伙伴使用该参数
  -v, --volume : 绑定一个卷
  --privileged=false: 指定容器是否为特权容器,特权容器拥有所有的capabilities
  --restart=no:指定容器停止后的重启策略
    no:容器退出时不重启
    on-failure:容器故障退出(返回值非零)时重启
    always:容器退出时总是重启,推荐使用
  --rm=false: 指定容器停止后自动删除容器,不能以docker run -d启动的容器
容器日志

docker logs : 获取容器的日志

# 语法
docker logs [OPTIONS] CONTAINER
# 执行命令
docker run -itd --name tomcat9 -p 8080:8080 tomcat:9.0.20-jre8-alpine 
docker logs -f tomcat9
# 常用参数
    -f : 跟踪日志输出
    --tail :仅列出最新N条容器日志

在这里插入图片描述
删除容器

docker rm **:**删除一个或多个容器。docker rm命令只能删除处于终止或退出状态的容器,并不能删除还处于运行状态的容器

# 语法
docker rm [OPTIONS] CONTAINER [CONTAINER...]
# 执行命令
docker run -itd --name tomcat9 -p 8088:8080 tomcat:9.0.20-jre8-alpine 
# 需要先停止运行中的容器再删除,否则无法删除容器 docker stop tomcat9 按照容器名称删除 
docker rm tomcat9 
# 按照容器ID删除 
docker rm 8dd95a95e687
# 常用参数
  -f :通过 SIGKILL 信号强制删除一个运行中的容器。
  -l :移除容器间的网络连接,而非容器本身。
  -v :删除与容器关联的卷。
列出容器
# 语法
docker ps [OPTIONS]
# 执行命令
docker run -itd --name tomcat9 -p 8080:8080 tomcat:9.0.20-jre8-alpine 
# 查看运行中的容器 
docker ps 
# 查看所有容器 
docker ps -a
# 常用参数
    -a :显示所有的容器,包括未运行的。
    -q :只显示容器编号。

在这里插入图片描述
输出详情介绍:

  • CONTAINER ID: 容器 ID。

  • IMAGE: 使用的镜像。

  • COMMAND: 启动容器时运行的命令。

  • CREATED: 容器的创建时间。

  • STATUS: 容器状态。

    状态有7种:

    • created(已创建)
    • restarting(重启中)
    • running(运行中)
    • removing(迁移中)
    • paused(暂停)
    • exited(停止)
    • dead(死亡)

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。

实用技巧
# 停止所有运行容器 
docker stop $(docker ps -qa)
# 删除所有的容器 
docker rm $(docker ps -aq) 
# 删除所有容器,先停止运行后进行删除
docker rm $(docker stop $(docker ps -q)) 
# 删除所有的镜像 
docker rmi $(docker images -q)
# 删除所有运行失败的容器
docker rm $(docker ps -a | grep Exited | awk '{print $1}')

在这里插入图片描述

创建容器

docker create :创建一个新的容器但不启动它。用法同 docker run命令。

Ps:创建容器时不允许用-d参数,如果使用了-d参数则会报:unknown shorthand flag: ‘d’ in -d

# 语法
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
# 执行命令
docker create -it --name tomcat9 -p 8080:8080 9.0.20-jre8-alpine
# 常用参数与run基本相同
  -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  -i: 以交互模式运行容器,通常与 -t 同时使用;
  -P: 随机端口映射,容器内部端口随机映射到主机的端口
  -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  --name="nginx-lb": 为容器指定一个名称;
  --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  -h "mars": 指定容器的hostname;
  -e username="ritchie": 设置环境变量;
  --env-file=[]: 从指定文件读入环境变量;
  --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
  -m :设置容器使用内存最大值;
  --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
  --link=[]: 添加链接到另一个容器;
  --expose=[]: 开放一个端口或一组端口;
  --volume , -v: 绑定一个卷
启动、重启、终止容器

docker start :启动一个或多个已经被停止的容器

docker stop :停止一个运行中的容器

docker restart :重启容器

# 语法
docker start [OPTIONS] CONTAINER [CONTAINER...] 
docker stop [OPTIONS] CONTAINER [CONTAINER...] 
docker restart [OPTIONS] CONTAINER [CONTAINER...]
# 执行命令
docker start tomcat9 
docker stop tomcat9 
docker restart tomcat9
进入容器

docker exec **:**在运行的容器中执行命令。早期有attach命令,对于阻塞命令会等待,所以不方便。在Docker 1.3.0后提供了exec 可以在容器内直接执行任意命令。

# 语法
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
# 执行命令 exec到底使用sh还是/bin/bash 需要看实际的镜像,通常centos系统的可以使用/bin/bash,apline系统的使用sh。官网上的镜像包都有说明。
# 没有bash命令的linux系统:例如alpine系统
docker exec -it tomcat9 sh
# 有bash命令的linux系统:例如centos
docker exec -it tomcat9 /bin/bash
# 常用参数
  -i :即使没有附加也保持STDIN 打开
  -t :分配一个伪终端

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KHypkUHJ-1684755689234)(file:///Users/yangcun/Documents/学习/Markdown/images/docker.assets/image-20210629151909771.png?msec=1684234051536)]

查看容器

docker inspect : 获取容器/镜像的元数据。

# 语发
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
# 执行命令
docker run -it --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine 
docker inspect tomcat9
# 常用参数
  -f :指定返回值的模板文件。
  -s :显示总的文件大小。
  --type :为指定类型返回JSON。

在这里插入图片描述

更新容器

docker update :可以动态地更新容器配置。可以更新一个或多个容器配置。多个容器名称或ID之间使用空格分隔。但update命令不是很成熟,有很多配置项不能动态更新。推荐还是rm容器后,再重新run一个新的镜像。

# 语法
docker update [OPTIONS] CONTAINER [CONTAINER...]
# 执行命令
docker run -itd --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine 
# 更新容器restart策略 
docker update --restart always tomcat9
杀掉容器

docker kill :杀掉一个运行中的容器。

# 语法
docker kill [OPTIONS] CONTAINER [CONTAINER...]
# 执行命令
docker run -itd --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine 
docker kill tomcat9 
docker ps
docker ps -a 
docker start tomcat9
# 常用参数
    -s :向容器发送一个信号

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值