• ubuntu容器说明 — 容器的启动和运行


    ubuntu容器说明 — 容器的启动和运行


    有镜像才能创建容器,这是根本前提(下载一个Ubuntu或者centos镜像演示)

    docker并非是一个通用的容器,它依赖已存在并运行的Linux内核环境

    docker实质是在运行的Linux下制造了一个隔离的文件环境,必须要部署在Linux内核上

    我们使用笔记本,搭建win11系统,系统上用VMware软件搭建Ubuntu环境,Ubuntu上下载docker,在docker上面再模拟一个Ubuntu

    启动交互式容器(前台命令行)

    • --name:为容器指定一个新的name

    • -i:以交互式模式运行容器,通常与-t同时使用(interactive)

    • -t:为容器重新分配一个伪输入终端,通常与-i同时使用(tyy)

      也即启动交互式容器(前端有伪终端,等待交互)

    • -P:随机端口映射,大写

    • -p:指定端口映射,小写

    我们普通启动

    root@ubuntu:/hyerledgerFabric# docker run ubuntu 
    root@ubuntu:/hyerledgerFabric# 
    
    • 1
    • 2

    没效果。此时需要用到交互式容器

    启动

    1. 新建+启动容器,ubuntu要有bash/shell作为交互式接口。
    docker run -it ubuntu /bin/bash
    
    • 1

    如果要退出终端,直接输入exit,此时容器停止

    可以run进去容器,ctrl+p+q退出,容器不停止,此时可以启动已经停止的容器

    docker start 容器ID或者容器名
    
    • 1

    重启容器

    docker restart ID或者name
    
    • 1

    停止容器

    docker stop ID或者name
    
    • 1

    强行停止容器

    docker kill 容器ID或者容器名
    
    • 1

    删除已经停止的容器

    docker rm ID或者name
    
    • 1

    重要部分

    1. 有镜像才能创建容器,这是根本前提(下载一个redis6.0.8镜像演示)

    2. 启动守护式容器(后台服务器)

    • 在大部分场景下,我们希望docker的服务是在后台运行的,我们可以通过-d指定容器的后台运行模式

    • docker run -d docker_name
      
      • 1
    • redis前后台启动演示case

    很重要一点:docker容器后台运行,必须有一个前台进程,否则会立即是自杀,所以对于ubuntu来说必须要用-it

    容器的命令如果不是那种一直挂起的命令(top.tail),就是会自动退出,这个是docker的机制问题

    image-20220509205710035

    一般对于数据库都是使用-d后台默默启动

    • 前台交互式-it
    • 后台守护式-d

    想起我们以前学redis的时候,到处都是坑,安装环境啥的配置config啥的,麻烦死了。现在有了docker一条命令解决问题

    3. 查看容器日志

    docker logs 容器ID
    
    • 1

    当redis出错

    root@ubuntu:/home/smile# docker logs a22dd4f7caf4 
    1:C 09 May 2022 12:56:24.442 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    1:C 09 May 2022 12:56:24.442 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=1, just started
    1:C 09 May 2022 12:56:24.442 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
    1:M 09 May 2022 12:56:24.443 * monotonic clock: POSIX clock_gettime
    1:M 09 May 2022 12:56:24.445 * Running mode=standalone, port=6379.
    1:M 09 May 2022 12:56:24.446 # Server initialized
    1:M 09 May 2022 12:56:24.446 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
    1:M 09 May 2022 12:56:24.447 * Ready to accept connections
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    后面还有图形化监控哈哈哈哈

    4. 查看容器内运行的进程

    docker top 容器ID
    
    • 1

    image-20220509210625854

    5. 查看容器内部细节

    可以把容器看作一个简易版的Linux环境和运行在其中的应用程序

    以json形式保存

    docker inspect 容器ID
    
    • 1

    image-20220509210901032

    6. 进入正在运行的容器并且以命令行交互

    docker exec -it 容器ID bashShell
    #或者
    docker attach 容器ID
    
    • 1
    • 2
    • 3

    root@ubuntu:/home/smile# docker exec -it 7672921e03e4 /bin/bash
    root@7672921e03e4:/# uname 
    Linux
    root@ubuntu:/home/smile# docker attach 7672921e03e4
    root@7672921e03e4:/# 
    • 1
    • 2
    • 3
    • 4

    注意区别:

    • attach直接进入容器启动命令的终端,用exit退出不会产生新的进程
    • exec是在容器中打开新的终端,并且可以启动新的进程,用exit退出不会导致容器的停止

    推荐使用exec

    用redis案例实操

    root@ubuntu:/home/smile# docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
    a22dd4f7caf4   redis     "docker-entrypoint.s…"   25 minutes ago   Up 25 minutes   6379/tcp   strange_elgamal
    root@ubuntu:/home/smile# docker exec -it a22dd4f7caf4 /bin/bash    
    root@a22dd4f7caf4:/data# redis-cli -p 6379
    127.0.0.1:6379> ping
    PONG
    127.0.0.1:6379> set k1 v1
    OK
    127.0.0.1:6379> get k1
    "v1"
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    7. 从容器中拷贝文件到主机上

    如果我们在一家公司,我们在容器中的Ubuntu中新创建了一个文件,怎么把容器中的内容文件拷贝到主机上,用来备份

    docker cp 容器ID:容器内路径 目的主机路径
    
    • 1

    image-20220509213628075

    8. 导入和导出容器

    上一个只能把容器中的资料拷贝出来,这个可以把整个镜像或者容器进行备份,默认导出到当前路径下面

    导出

    docker export 容器ID > abcd.tar
    
    • 1

    导入

    cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
    
    • 1

    image-20220509214436456

    出容器**

    上一个只能把容器中的资料拷贝出来,这个可以把整个镜像或者容器进行备份,默认导出到当前路径下面

    导出

    docker export 容器ID > abcd.tar
    
    • 1

    导入

    cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
    
    • 1
  • 相关阅读:
    Spring中的事务管理
    Python图像处理初探:Pillow库的基础使用
    【JavaScript进阶之旅 ES6篇 第十章】操作原型的方法、super、4种遍历方式、Symbol
    SpringMVC学习案例2:
    解决Vue多次传递重复参数会报错
    java基础面试题第二天
    堆相关例子-最大线段重合问题
    2022下半年软考「高项」易混淆知识点汇总
    机试打卡 -05 接雨水(动态规划&栈)
    LabVIEW和MES系统的智能化车间数据对接
  • 原文地址:https://blog.csdn.net/weixin_54707168/article/details/126706034