【云原生Docker系列第二篇】Docker容器管理(我在人间贩卖黄昏,只为带着星光照耀你)(一)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 【云原生Docker系列第二篇】Docker容器管理(我在人间贩卖黄昏,只为带着星光照耀你)(一)

前言


docker容器相当于一个进程,性能接近于原生,几乎没有损耗;


docker容器在单台主机上支持的数量成百上千;


容器与容器之间相互隔离;


镜像是创建容器的基础,可以理解镜像为一个压缩包


Docker 容器管理


1.1 容器创建docker create

容器创建就是将镜像加载到容器的过程。


新创建的容器处于停止状态,不会运行任何程序,需要在其中发起一个进程来启动容器.


格式:


docker   create  [选项]  镜像


常用选项:


选项

含义

-i

让容器的输入保持打开

-t

让Docker 分配一个伪终端(如果想要导入一些命令,需要这个参数)

-it

合起来实现和容器交互的作用,运行一个交互式会话shell

–name=容器名称

指定容器名称,不指定会随机生成

#创建容器
[root@localhost ~]# docker create -i stevelugyq/nginx:latest
39ec9b5d21b18655e48d4c7af7b3287f4b6e609cb92fe2f9c9d7da028e41b96f
#创建容器并分配一个伪终端
[root@localhost ~]# docker create -it stevelugyq/nginx:latest bash
9aa623f4e591167b4a146d0cded961ec7367c052133128fa92d6f10a26d29309
#显示所有的容器
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                     COMMAND                  CREATED          STATUS    PORTS     NAMES
9aa623f4e591   stevelugyq/nginx:latest   "/docker-entrypoint.…"   30 seconds ago   Created             interesting_cray
39ec9b5d21b1   stevelugyq/nginx:latest   "/docker-entrypoint.…"   40 seconds ago   Created             agitated_wu


1.2 查看容器运行状态docker ps

格式:


docker   ps   [选项]


直接使用 docker ps ,只查看当前正在运行的容器


常用选项:


选项

含义

-a

显示所有的容器,包括未运行的

-f

根据条件过滤显示的内容

–format

指定返回值的模板文件

-l

显示最近创建的容器

-n

列出最近创建的n个容器

–no-trunc

不间断输出

-q

静默模式,只显示容器编号

-s

显示总的文件大小
#查看当前运行的容器
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                     COMMAND                  CREATED        STATUS        PORTS     NAMES
9aa623f4e591   stevelugyq/nginx:latest   "/docker-entrypoint.…"   17 hours ago   Up 17 hours   80/tcp    interesting_cray
39ec9b5d21b1   stevelugyq/nginx:latest   "/docker-entrypoint.…"   17 hours ago   Up 17 hours   80/tcp    agitated_wu
#查看当前所有容器
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                     COMMAND                  CREATED        STATUS        PORTS     NAMES
9aa623f4e591   stevelugyq/nginx:latest   "/docker-entrypoint.…"   17 hours ago   Up 17 hours   80/tcp    interesting_cray
39ec9b5d21b1   stevelugyq/nginx:latest   "/docker-entrypoint.…"   17 hours ago   Up 17 hours   80/tcp    agitated_wu
#查看当前所有容器的ID号
[root@localhost ~]# docker ps -aq
9aa623f4e591
39ec9b5d21b1
#查看当前所有容器的大小
[root@localhost ~]#  docker ps -as
CONTAINER ID   IMAGE                     COMMAND                  CREATED        STATUS        PORTS     NAMES              SIZE
9aa623f4e591   stevelugyq/nginx:latest   "/docker-entrypoint.…"   17 hours ago   Up 17 hours   80/tcp    interesting_cray   0B (virtual 142MB)
39ec9b5d21b1   stevelugyq/nginx:latest   "/docker-entrypoint.…"   17 hours ago   Up 17 hours   80/tcp    agitated_wu        1.09kB (virtual 142MB)
#查看最后创建的2 个镜像
[root@localhost ~]# docker ps -n 2
CONTAINER ID   IMAGE                     COMMAND                  CREATED        STATUS        PORTS     NAMES
9aa623f4e591   stevelugyq/nginx:latest   "/docker-entrypoint.…"   17 hours ago   Up 17 hours   80/tcp    interesting_cray
39ec9b5d21b1   stevelugyq/nginx:latest   "/docker-entrypoint.…"   17 hours ago   Up 17 hours   80/tcp    agitated_wu
字段 含义
CONTAINER ID 容器ID号
IMAGE 使用什么镜像去运行
COMMAND 容器运行时使用的命令
CREATED 创建容器的时间
STATUS 当前容器状态
PORTS 映射的端口(空代表没有端口)
NAMES 容器运行的名称,如果不自定义会随机生成


1.3 启动容器docker start

格式:


docker   start   容器ID/名称

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                     COMMAND                  CREATED          STATUS    PORTS     NAMES
9aa623f4e591   stevelugyq/nginx:latest   "/docker-entrypoint.…"   30 seconds ago   Created             interesting_cray
39ec9b5d21b1   stevelugyq/nginx:latest   "/docker-entrypoint.…"   40 seconds ago   Created             agitated_wu
[root@localhost ~]# 
#使用容器id 启动容器。
[root@localhost ~]# docker start 9aa623f4e591
9aa623f4e591
#再次查看状态,status 状态项为 up 
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                     COMMAND                  CREATED          STATUS          PORTS     NAMES
9aa623f4e591   stevelugyq/nginx:latest   "/docker-entrypoint.…"   12 minutes ago   Up 14 seconds   80/tcp    interesting_cray
39ec9b5d21b1   stevelugyq/nginx:latest   "/docker-entrypoint.…"   12 minutes ago   Created                   agitated_wu
#使用容器名称启动
[root@localhost ~]# docker start agitated_wu
agitated_wu
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                     COMMAND                  CREATED          STATUS         PORTS     NAMES
9aa623f4e591   stevelugyq/nginx:latest   "/docker-entrypoint.…"   14 minutes ago   Up 2 minutes   80/tcp    interesting_cray
39ec9b5d21b1   stevelugyq/nginx:latest   "/docker-entrypoint.…"   14 minutes ago   Up 2 seconds   80/tcp    agitated_wu



注:端口号是容器的端口,不是宿主机的端口


1.4 创建并启动容器docker run

可以直接执行 docker run 命令, 等同于先执行docker pull、 docker create 命令,再执行 docker start 命令。


注意:容器是一个与其中运行的 shell 命令共存亡的终端,命令运行容器运行, 命令结束容器退出。


docker容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的依据,如果docker容器中pid=1的进程挂了,那么docker容器便会直接退出,也就是说Docker容器中必须有一个前台进程,否则认为容器已经挂掉。


当利用 docker run 来创建容器时, Docker 在后台的标准运行过程是:


1.检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载;

2.利用镜像创建并启动一个容器;

3.分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;

4.从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;

5.分配一个地址池中的 IP 地址给容器;

6.执行用户指定的应用程序,执行完毕后容器被终止运行。


Docker的机制是让容器后台运行,必须至少有一个前台进程,容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),会自动退出


格式:


docker run [选项] IMAGE [命令]


选项说明:


参数 说明

参数

说明
-a 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项
-d 后台运行容器,并返回容器ID
-i 以交互模式运行容器,通常与 -t 同时使用
-P 随机端口映射,容器内部端口 随机 映射到主机的端口
-p 指定端口映射,格式为:主机(宿主)端口:容器端口
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用
–name= 为容器指定一个名称
–dns 8.8.8.8 指定容器使用的DNS服务器,默认和宿主一致
–dns-search example.com 指定容器DNS搜索域名,默认和宿主一致

-h

指定容器的hostname
-e username= 设置环境变量
-e username= 从指定文件读入环境变量
-e username= 设置容器使用内存最大值
–net= 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型
–link=[ ] 添加链接到另一个容器
–expose=[ ] 开放一个端口或一组端口

-volume , -v

绑定一个卷
#使用centos:7 镜像创建容器,如果没有该镜像则自动从公有仓库拉取
#容器创建后执行 ls  / 命令
[root@localhost ~]# docker run centos:7 bash  -c  "ls /"
Unable to find image 'centos:7' locally
7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:c73f515d06b0fa07bb18d8202035e739a494ce760aa73129f60f4bf2bd22b407
Status: Downloaded newer image for centos:7
anaconda-post.log
bin
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND            CREATED         STATUS                     PORTS     NAMES
bec1acb446b6   centos:7   "bash -c 'ls /'"   8 minutes ago   Exited (0) 8 minutes ago             heuristic_snyder


在后台持续运行docker run 创建的容器


需要在 docker run 命令之后添加 -d 选项让 Docker 容器以守护形式在后台运行。并且容器所运行的程序不能结束.


使用 itd 选项,可以创建并持续运行容器。即使进入容器后使用exit命令退出,也不会停止容器


#后台运行容器并执行死循环命令
[root@localhost ~]# docker run -i centos:7 /usr/bin/bash -c "while true;do echo $(date); sleep 1; done"
#关闭这个容器,再开一个终端,stop
#创建容器并持续后台运行容器.使用--name 指定名称
[root@localhost ~]# docker run -itd --name mycentos centos:7 /bin/bash
92829fa3c5849e499ee96aa6aa9c4b2e5d96a705dcb16fa48f4483e1edceaf16



1.5 终止容器运行docker stop/kill

格式:


docker   stop/kill   容器ID/名称


stop: 停止容器,可以给容器一个等待时间,以防止数据的丢失。


kill: 立即强行停止一个容器(相当于linux命令 kill -9) ,不会给容器反应时间,可能会造成数据丢失

[root@localhost ~]# docker stop 9aa623f4e591
9aa623f4e591
[root@localhost ~]# docker kill 39ec9b5d21b1
39ec9b5d21b1
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                     COMMAND                  CREATED        STATUS                        PORTS     NAMES
9aa623f4e591   stevelugyq/nginx:latest   "/docker-entrypoint.…"   17 hours ago   Exited (137) 29 seconds ago             interesting_cray
39ec9b5d21b1   stevelugyq/nginx:latest   "/docker-entrypoint.…"   17 hours ago   Exited (137) 3 seconds ago              agitated_wu


1.6 删除容器docker rm [-f]

格式:


docker rm [-f] 容器ID/名称


1.#不能删除运行状态的容器,只能-f强制删除,或者先停止再删除
[root@localhost ~]# docker rm 9aa623f4e591
Error response from daemon: You cannot remove a running container 9aa623f4e591167b4a146d0cded961ec7367c052133128fa92d6f10a26d29309. Stop the container before attempting removal or force remove
2.#已经退出的容器,可以直接删除
[root@localhost ~]# docker rm 39ec9b5d21b1
39ec9b5d21b1
3.#基于名称匹配的方式删除
[root@localhost ~]# docker rm -f stoic_snyder
stoic_snyder
4.#删除所有运行状态的容器
[root@localhost ~]# docker start compassionate_easley
compassionate_easley
[root@localhost ~]# docker ps -q
2539db89feb1
[root@localhost ~]# docker rm -f `docker ps -q`
2539db89feb1
5.#删除所有容器
#法一
[root@localhost ~]# docker rm -f `docker ps -aq`
ba876d7eb965
bc63914bf6d0
7484efd3c848
#法二
[root@localhost ~]# docker ps -a |awk 'NR>=2 {print $1}' |xargs docker rm -f
#法三
[root@localhost ~]# docker rm -f $(docker ps -aq)






目录
相关文章
|
3天前
|
Kubernetes 负载均衡 Cloud Native
云原生架构之容器技术
容器作为标准化软件单元,它将应用及其所有依赖项打包,使应用不再受环境限制,在不同计算环境间快速、可靠地运行。
21 9
|
4天前
|
前端开发 应用服务中间件 nginx
Docker consul的容器服务更新与发现
Docker consul的容器服务更新与发现
|
4天前
|
Docker 容器
docker: 如何不新建容器 修改运行容器的端口
docker: 如何不新建容器 修改运行容器的端口
|
4天前
|
数据管理 Linux Docker
docker 数据管理 与容器互联
docker 数据管理 与容器互联
|
4天前
|
敏捷开发 Kubernetes Cloud Native
构建高效云原生应用:容器化与微服务架构的融合
【5月更文挑战第31天】 随着云计算技术的不断演进,云原生应用已成为企业数字化转型的核心。本文深入探讨了如何通过容器化技术和微服务架构的有效结合,构建高效、弹性和可扩展的云原生应用。我们将分析容器化的基本概念、优势以及它如何促进微服务架构的实施,同时提供策略和最佳实践,帮助企业实现敏捷开发和持续部署,优化资源利用,并提高系统的可靠性。
|
5天前
|
Linux Docker 容器
蓝易云 - 【Linux】如何在linux系统重启或启动时执行命令或脚本(也支持docker容器内部)
以上就是在Linux系统和Docker容器中设置启动时运行命令或脚本的方法。希望对你有所帮助。
75 0
|
6天前
|
大数据 Linux Docker
mac docker 宿主机和容器间网络打通
mac docker 宿主机和容器间网络打通
6 0
|
6天前
|
存储 弹性计算 监控
【阿里云云原生专栏】成本优化策略:在阿里云云原生平台上实现资源高效利用
【5月更文挑战第29天】本文探讨了在阿里云云原生平台上实现资源高效利用和成本优化的策略。通过资源监控与评估,利用CloudMonitor和Prometheus等工具分析CPU、内存等使用情况,识别浪费。实施弹性伸缩策略,利用自动伸缩规则根据业务负载动态调整资源。借助容器化管理和Kubernetes编排提高资源利用率,优化存储选择如OSS、NAS,以及网络配置如VPC和CDN。示例展示了如何使用Kubernetes的HorizontalPodAutoscaler进行弹性伸缩,降低成本。
36 4
|
6天前
|
边缘计算 Cloud Native 数据管理
【阿里云云原生专栏】云原生背景下的AIoT布局:阿里云Link平台解析
【5月更文挑战第29天】阿里云Link平台,作为阿里云在AIoT领域的核心战略,借助云原生技术,为开发者打造一站式物联网服务平台。平台支持多协议设备接入与标准化管理,提供高效数据存储、分析及可视化,集成边缘计算实现低延时智能分析。通过实例代码展示,平台简化设备接入,助力智能家居等领域的创新应用,赋能开发者构建智能生态系统。
40 3
|
6天前
|
存储 Kubernetes Cloud Native
【阿里云云原生专栏】云原生容器存储:阿里云CSI与EBS的高效配合策略
【5月更文挑战第29天】阿里云提供云原生容器存储接口(CSI)和弹性块存储(EBS)解决方案,以应对云原生环境中的数据存储挑战。CSI作为Kubernetes的标准接口简化存储管理,而EBS则提供高性能、高可靠性的块存储服务。二者协同实现动态供应、弹性伸缩及数据备份恢复。示例代码展示了在Kubernetes中使用CSI和EBS创建存储卷的过程。
51 3

相关产品

  • 容器服务Kubernetes版