Docker学习——容器

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

创建容器

1新建容器

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

2启动容器

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

3新建并启动容器

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

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

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

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

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

4守护态运行

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

5查看容器输出

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

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

 

 停止容器

1暂停容器

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

 可以用unpause 恢运行态

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

2终止容器

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

重启容器

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

3进入容器

在使用-d 参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行
操作 这个时候如果需要进入容器进行操作,推荐使用官方的 attach或 exec 命令
[root@openEuler-node1 ~]# docker run -itd ubuntu
b0613bfdcbe14f88138ed030f37907356069142bc755fa7a2ce33749385894dd
[root@openEuler-node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b0613bfdcbe1        ubuntu              "bash"              4 seconds ago       Up 3 seconds                            boring_wescoff
然而使用 attach 命令有时候并不方便 当多个窗口同时 attach 到同一个容器的时 候,所有窗口都会同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
[root@openEuler-node1 ~]# docker attach b0613bfdcbe1
root@b0613bfdcbe1:/# 
.exec 命令就比较方便,可以多窗口运行
[root@openEuler-node1 ~]# docker exec -it 685af6f5c5b9 bash
root@685af6f5c5b9:/# w11:25:37 up  8:16,  0 users,  load average: 0.00, 0.01, 0.00
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 :删除容器挂载的数据卷
[root@openEuler-node1 ~]# docker rm -f `docker ps -qa`
685af6f5c5b9
b0613bfdcbe1

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

5导入和导出容器

导出

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

其中,可以通过-o  选项来指定导出的 t ar 文件名,也可以直接通过重定向来实现 首先,查看所有的容器,如下所示:
[root@openEuler-node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
4d44b708c81b        ubuntu:latest       "bash"              6 seconds ago        Exited (0) 5 seconds ago                            admiring_lamarr
015c53d29ae3        ubuntu:18.04        "/bin/bash"         About a minute ago   Exited (0) About a minute ago                       romantic_burnell
[root@openEuler-node1 ~]# docker export -o test_for_run.tar 4d44b708c81b
[root@openEuler-node1 ~]# ls
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 文件导人到系统中:
[root@openEuler-node1 ~]# docker import test_for_run.tar  test/ubuntu:v1.0
sha256:aec871a8dd332ba4dc0828da48022c7f2e74111ca4cdd53da6700eec8703ca35

查看容器

1查看容器详情

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

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

2查看容器内进程

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

3查看统计信息

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


http://www.ppmy.cn/news/1379606.html

相关文章

R语言扩展包与MaxEnt模型的集成:实现高效的物种分布模拟

在生态学研究中,物种分布模拟是一项至关重要的任务。它有助于我们理解物种与环境之间的复杂关系,预测物种在气候变化或人类活动影响下的潜在分布变化。近年来,随着计算机技术的不断发展,基于机器学习的物种分布模拟方法逐渐成为研…

鸿蒙开发(四)-低代码开发

鸿蒙开发(四)-低代码开发 本文主要介绍下鸿蒙下的低代码开发。 鸿蒙低代码是指在鸿蒙操作系统进行应用开发时,采用简化开发流程和减少编码量的方式来提高开发效率。 1:开启低代码开发 首先我们打开DevEco Studio .然后创建工程。 如图所示&#xff…

FreeRTOS学习第9篇--队列介绍

目录 FreeRTOS学习第9篇--队列介绍1. 数据传输的方法1.1 任务之间如何传输数据1.2 队列的本质 2. 队列的工作原理和实现2.1 创建队列2.2 向队列发送数据2.3 从队列接收数据 3. 使用队列进行任务间的通信3.1 通信示例3.2 同步示例 结论 FreeRTOS学习第9篇–队列介绍 本文目标&a…

用C++打印环境变量environ

#include <stdio.h> #include <unistd.h>using namespace std; int main() {extern char** environ;for(int i 0; environ[i] ! NULL; i){printf("%s\n",environ[i]);}return 0; }输出很多&#xff0c;大致如下(敏感信息用xxx代替)&#xff1a; [singl…

日常开发Git命令

场景&#xff1a; 在远程库创建分支后&#xff0c;在本地开发后-合并代码-push到远程库 命令行 #查看现在分支 git branch #切换到master分支 git checkout master #拉取远程库修改 git pull git branch #切换到修改的分支 git checkout feature/s3-use-internel-name #merg…

2024会声会影永久免费版新功能软件特色及新功能

会声会影2024永久免费版是一款收到很多用户公认的极佳视频编辑软件&#xff0c;里面的每一个功能都特别的强悍你能够一键给图片视频添加特效非常的过瘾&#xff0c;赶快来一起下载试试吧。 会声会影2023-安装包&#xff1a; https://souurl.cn/gtyDFc 会声会影2023-安装包&…

shell文本处理工具-shell三剑客1

shell脚本常用基础命令2 shell脚本常用基础命令 shell脚本常用基础命令2一、grep用法二、sed用法2.1p参数 &#xff08;显示&#xff09;n参数&#xff08;只显示处理过的行&#xff09; 文本处理三剑客&#xff1a;grep sed awk 一、grep用法 grep -E egrep (扩展搜索正文表…

【SpringCloud微服务实战03】Nacos 注册中心

一、Nacos安装 官方文档安装Nacos教程:Nacos 快速开始 这里安装的是1.4.7版本,安装之后访问http://127.0.0.1:8848/nacos 管理界面如下:(用户名:nacos,密码:nacos) 二、Nacos服务注册和发现 1、在父工程中配置文件pom.xml 中添加spring-cloud-alilbaba的管理依赖:…