• Docker学习——容器


            容器是 Docker 的另一个核心概念,简单来说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态。

    创建容器

    1新建容器

    可以使用 docker create 令新建一个容器,例如:
    1. [root@openEuler-node1 ~]# docker create busybox
    2. c3e7310fa21a4a2d94b0bf6f881aed4fc8482d3d23a341f9563ce65c8027fd19

    2启动容器

    使用 docker [container] start 来启动一个已经创建的容器例如,启动创建的busybox容器
    1. [root@openEuler-node1 ~]# docker start c3e7310fa21a
    2. c3e7310fa21a

    3新建并启动容器

    1. [root@openEuler-node1 ~]# docker run ubuntu /bin/echo 'Hello world'
    2. Unable to find image 'ubuntu:latest' locally
    3. latest: Pulling from library/ubuntu
    4. 7b1a6ab2e44d: Pull complete
    5. Digest: sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322
    6. Status: Downloaded newer image for ubuntu:latest
    7. Hello world

    注意:如果新建容器没有这个镜像会先拉取镜像再启动容器最后执行指令。 

    其中,-t选项让 Docker 分配一个伪终端( pseudo-tty)并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。更多的命令选项可以通过 man docker-run 命令来查看
    1. [root@openEuler-node1 ~]# docker run -it ubuntu:lB .04 /bin/bash
    2. root@afBbae53bdd3 /#

    用户可以输入exit或者Ctrl+D退出

    对于所创建的 bash 容器,当用户使用 exit 命令退出 bash 进程之后,容器也会自动退出这是因为对于容器来说,当其中的应用退出后,容器的使命完成,也就没有继续运行的 必要了。

    4守护态运行

    更多的时候,需要让 Docker 容器在后台以守护态( Daemonized )形式运行 此时,可以 通过添加-d 参数来实现。
    1. [root@openEuler-node1 ~]# docker run -d mysql:5.7 --name db
    2. e7d8bcac87cddc1299f7a71879bece14c5d38d7d5257be03dd312d6d19c9ddb2

    5查看容器输出

    要获取容器的输出信息,可以通过 docker [container] logs命令。
    1. [root@openEuler-node1 ~]# docker logs sql
    2. 2024-03-11 11:09:22+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.44-1.el7 started.
    3. 2024-03-11 11:09:22+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
    4. 2024-03-11 11:09:22+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.44-1.el7 started.
    5. 2024-03-11 11:09:23+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
    6. You need to specify one of the following as an environment variable:
    7. - MYSQL_ROOT_PASSWORD
    8. - MYSQL_ALLOW_EMPTY_PASSWORD
    9. - MYSQL_RANDOM_ROOT_PASSWORD

    这里启动mysql报错也是非常常见的错误,因为需要初始root密码

     

     停止容器

    1暂停容器

    可以使用 docker [container] pause CONTAINER [CONTAINER ... ]命令来暂 停一个运行中的容器。
    1. [root@openEuler-node1 ~]# docker pause test
    2. test
    3. [root@openEuler-node1 ~]# docker ps
    4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    5. 87151b0e6fe7 ubuntu "bash" 35 seconds ago Up 34 seconds (Paused) test

     可以用unpause 恢运行态

    1. [root@openEuler-node1 ~]# docker unpause test
    2. test
    3. [root@openEuler-node1 ~]# docker ps
    4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    5. 87151b0e6fe7 ubuntu "bash" 2 minutes ago Up 2 minutes test

    2终止容器

    可以使用 docker [container] stop 来终止一个运行中的容器 该命令的格式为
    docker [container] stop [-t I - -time [=10]] [CONTA NER ...]
    1. [root@openEuler-node1 ~]# docker stop test
    2. test

    重启容器

    [root@openEuler-node1 ~]# docker restart test
    

    3进入容器

    在使用-d 参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行
    操作 这个时候如果需要进入容器进行操作,推荐使用官方的 attach或 exec 命令
    1. [root@openEuler-node1 ~]# docker run -itd ubuntu
    2. b0613bfdcbe14f88138ed030f37907356069142bc755fa7a2ce33749385894dd
    3. [root@openEuler-node1 ~]# docker ps
    4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    5. b0613bfdcbe1 ubuntu "bash" 4 seconds ago Up 3 seconds boring_wescoff
    然而使用 attach 命令有时候并不方便 当多个窗口同时 attach 到同一个容器的时 候,所有窗口都会同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
    1. [root@openEuler-node1 ~]# docker attach b0613bfdcbe1
    2. root@b0613bfdcbe1:/#
    .exec 命令就比较方便,可以多窗口运行
    1. [root@openEuler-node1 ~]# docker exec -it 685af6f5c5b9 bash
    2. root@685af6f5c5b9:/# w
    3. 11:25:37 up 8:16, 0 users, load average: 0.00, 0.01, 0.00
    4. USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
    通过指定 it 参数来保持标准输入打开,并且分配 一个伪终端通过 exec 命令对
    容器执行操作是最为推荐的方式

     4删除容器

    可以使用 docker [container) rm 命令来删除处于终止或退出状态的容器,命令格式为
    docker [container] rm
    • - f, --force=false 是否强行终止并删除一个运行中的容器
    • - i, --link=false :删除容器的连接 ,但保留容器;
    • - v, --volumes=false :删除容器挂载的数据卷
    1. [root@openEuler-node1 ~]# docker rm -f `docker ps -qa`
    2. 685af6f5c5b9
    3. b0613bfdcbe1

    利用反引号实现docker中容器的批量删除 

    5导入和导出容器

    导出

    docker [container] export [-o l - -output [=””] ] CONTAINER

    其中,可以通过-o  选项来指定导出的 t ar 文件名,也可以直接通过重定向来实现 首先,查看所有的容器,如下所示:
    1. [root@openEuler-node1 ~]# docker ps -a
    2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    3. 4d44b708c81b ubuntu:latest "bash" 6 seconds ago Exited (0) 5 seconds ago admiring_lamarr
    4. 015c53d29ae3 ubuntu:18.04 "/bin/bash" About a minute ago Exited (0) About a minute ago romantic_burnell
    5. [root@openEuler-node1 ~]# docker export -o test_for_run.tar 4d44b708c81b
    6. [root@openEuler-node1 ~]# ls
    7. anaconda-ks.cfg dockerfile test_for_run.tar ubuntu_18.04.tar

    导入 

    导出的文件又可以使用 docker [ container ] import 命令导人变成镜像,该命令格式为
    docker import [-c  |  --change  [ = [ ]]]   [-m |  -- message[=MESSAGE]] filelURLI- [REPOSITORY [:TAG]]
    下面将导出的 test_ for_ run. tar 文件导人到系统中:
    1. [root@openEuler-node1 ~]# docker import test_for_run.tar test/ubuntu:v1.0
    2. sha256:aec871a8dd332ba4dc0828da48022c7f2e74111ca4cdd53da6700eec8703ca35

    查看容器

    1查看容器详情

    [root@openEuler-node1 ~]# docker  inspect  4d44b708c81b
    

    就一条命令,可以根据容器的ID或名字看

    2查看容器内进程

    1. [root@openEuler-node1 ~]# docker top test
    2. UID PID PPID C STIME TTY TIME CMD
    3. root 11103 11087 0 19:43 pts/0 00:00:00 sh

    3查看统计信息

    1. [root@openEuler-node1 ~]# docker stats test
    2. CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
    3. 823457ad116b test 0.00% 144KiB / 3.297GiB 0.00% 946B / 0B 0B / 0B

  • 相关阅读:
    316.龙猫动漫主题网页 大学生期末大作业 Web前端网页制作 html5+css+js
    E. Li Hua and Array
    K8s中集成Heketi使用Glusterfs
    [JavaEE系列] Thread类的基本用法
    API接口对电商平台有怎样的帮助?如何获取API接口?
    小程序AI智能名片S2B2C商城系统:四大主流商业模式深度解析与实战案例分享
    ITextRenderer将PDF转换为HTML详细教程
    【LeetCode:1465. 切割后面积最大的蛋糕 | 贪心 + 排序】
    下一代架构设计:云原生、容器和微前端的综合应用
    《微信小程序-进阶篇》Lin-ui组件库源码分析-列表组件List(三)
  • 原文地址:https://blog.csdn.net/2201_75878485/article/details/136631968