【云原生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)






目录
相关文章
|
1月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
275 77
|
22天前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
106 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
1月前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
1月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
154 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
22天前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
96 11
|
1月前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
160 19
|
1月前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
67 3
实战~如何组织一个多容器项目docker-compose
|
30天前
|
存储 人工智能 调度
容器服务:智算时代云原生操作系统及月之暗面Kimi、深势科技实践分享
容器技术已经发展成为云计算操作系统的关键组成部分,向下高效调度多样化异构算力,向上提供统一编程接口,支持多样化工作负载。阿里云容器服务在2024年巴黎奥运会中提供了稳定高效的云上支持,实现了子弹时间特效等创新应用。此外,容器技术还带来了弹性、普惠的计算能力升级,如每分钟创建1万Pod和秒级CPU资源热变配,以及针对大数据与AI应用的弹性临时盘和跨可用区云盘等高性能存储解决方案。智能运维方面,推出了即时弹性节点池、智能应用弹性策略和可信赖集群托管运维等功能,进一步简化了集群管理和优化了资源利用率。
|
28天前
|
监控 安全 Cloud Native
阿里云容器服务&云安全中心团队荣获信通院“云原生安全标杆案例”奖
2024年12月24日,阿里云容器服务团队与云安全中心团队获得中国信息通信研究院「云原生安全标杆案例」奖。
|
1月前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
本文基于2024云栖大会演讲,探讨了软件供应链攻击的快速增长趋势及对企业安全的挑战。文中介绍了如何利用阿里云容器服务ACK、ACR和ASM构建云原生软件供应链安全,涵盖容器镜像的可信生产、管理和分发,以及服务网格ASM实现应用无感的零信任安全,确保企业在软件开发和部署过程中的安全性。

相关产品

  • 容器服务Kubernetes版