Docker学习之3——容器
容器(Container)
容器介绍: docker是通过容器来运行业务的,就像运行一个kvm虚拟机是一样的。容器其实就是从镜像创建的一个实例。 我们可以对容器进行增删改查,容器之间也是相互隔离的。和虚拟机最大的区别就是一个是虚拟的一个是隔离的。
缺点:不会像虚拟机那样隔离的那么彻底,我们可以将容器理解为简化版的linux,有进程运行在里面。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | #创建容器 Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG...] #新建并启动容器 [root@controller ~]# docker run -t -i ubuntu: 14.04 /bin/bash root@ 55456 b 431849: /# -t 分配一个伪终端 -i 标准输入保持打开 -d 守护进程运行 root@ 55456 b 431849: /# ls bin dev home lib 64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr root@ 55456 b 431849: /# pwd / root@ 55456 b 431849: /# cat /etc/issue Ubuntu 14.04 . 5 LTS \n \l root@ 55456 b 431849: /# exit exit #终止容器 Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...] #查看处于终止状态的容器 [root@controller ~]# docker ps -a -q f 69 ef 742 b 752 be 465 c 0 dc 442 55456 b 431849 #启动终止状态的容器 [root@controller ~]# docker start f 69 ef 742 b 752 #进入容器 Usage: docker attach [OPTIONS] CONTAINER [root@controller ~]# docker run -idt ubuntu [root@controller ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cc 9870 d 0853 f ubuntu "/bin/bash" 22 seconds ago Up 21 seconds small_albattani [root@controller ~]# docker attach small_albattani root@cc 9870 d 0853 f:/# Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...] #一般情况下使用nsenter工具进入容器,安装工具 [root@controller ~]# yum install -y util-linux [root@controller ~]# docker run --name dockercentos -tid centos 9 f 228 b 6525 d 5 a 753 fbda 39 b 4 a 339 ae 3 f 8 de 5 f 26 d 6 d 85 a 56 c 006488 f 771 b 4 f 45 b [root@controller ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9 f 228 b 6525 d 5 centos "/bin/bash" 10 seconds ago Up 7 seconds dockercentos [root@controller ~]# docker inspect -f "{{ .State.Pid }}" dockercentos 85616 [root@controller ~]# nsenter -t 85616 -m -u -i -n -p [root@ 9 f 228 b 6525 d 5 /]# docker inspect -f {{.State.Pid}}容器名或者容器id #每一个容器都有.State.Pid,所以这个命令除了容器的id需要我们根据docker ps -a去查找,其他的全部为固定的格式 nsenter --target上面查到的进程id --mount --uts --ipc --net --pid #输入该命令便进入到容器中 解释nsenter指令中进程id之后的参数的含义: * –mount参数是进去到mount namespace中 * –uts参数是进入到uts namespace中 * –ipc参数是进入到System V IPC namaspace中 * –net参数是进入到network namespace中 * –pid参数是进入到pid namespace中 * –user参数是进入到user namespace中 我们可以写个脚本: [root@controller ~]# cat IN_Docker.sh #!/bin/sh if [ $# -ne 1 ] then echo $ "usage:bash $0{dockername}" exit 1 fi docker_in(){ NAME_ID=$ 1 PID=$(docker inspect -f "{{ .State.Pid }}" $NAME_ID) nsenter -t $PID -m -u -i -n -p } docker_in $ 1 #运用 [root@controller ~]# sh IN_Docker.sh dockercentos [root@ 9 f 228 b 6525 d 5 /]# #删除容器 docker rm -f 【NAMES】 [root@controller ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9 f 228 b 6525 d 5 centos "/bin/bash" 18 minutes ago Up 18 minutes dockercentos c 5439518 dcbe ubuntu: 14.04 "/bin/bash" 20 hours ago Exited ( 0 ) 20 hours ago elegant_noyce 2 bb 8 a 93 f 5 d 34 ubuntu "echo 'hello I am ubu" 23 hours ago Exited ( 0 ) 19 hours ago gigantic_heyrovsky [root@controller ~]# docker rm -f elegant_noyce elegant_noyce [root@controller ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9 f 228 b 6525 d 5 centos "/bin/bash" 19 minutes ago Up 19 minutes dockercentos 2 bb 8 a 93 f 5 d 34 ubuntu "echo 'hello I am ubu" 23 hours ago Exited ( 0 ) 19 hours ago gigantic_heyrovsky #导出容器 [root@controller ~]# docker export dockercentos >test_dockercentos.tar [root@controller ~]# ls 192.168 . 128.172 cd 1 .iso httpd.conf pike.install.sh test_dockercentos.tar web.yml #导入容器 [root@controller ~]# cat test_dockercentos.tar |docker import - docker/cents 7.4 |
小结:
容器是直接提供应用服务的组件,实现快速启动停止和高效服务性能的基础,生产环境中可以在容器前端引入HaProxy代理容器访问,实现高可用。
如对您有帮助,支持下呗!
微信

支付宝

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类