Docker学习——容器

        容器是 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.mzph.cn/news/737744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最新libimobiledevice库崩溃问题解决方案

最新libimobiledevice库崩溃运行几个小时候,会导致整个调用的应用崩溃。 解决方案: //每隔一小时,重新注册Idevice_event_subscribe回调函数,如下面代码startTimerIdevice_event_subscribe()。 因最新开源的libimobiledevice库运…

蓝桥杯[OJ 2928]分糖果-CPP(贪心、字典序)

目录 一、题目描述: 二、整体思路 (一)字典序比较规则 (二)正确理解题意 (三)分类讨论 三、代码 一、题目描述: 二、整体思路 (一)字典序比较规则 首先要知道字典序是怎么比较大小的,简单来说按以下次序进行比较&am…

再也不想去字节跳动面试了,6年测开面试遭到这样打击.....

前几天我朋友跟我吐苦水,这波面试又把他打击到了,做了快6年软件测试员。。。为了进大厂,也花了很多时间和精力在面试准备上,也刷了很多题。但题刷多了之后有点怀疑人生,不知道刷的这些题在之后的工作中能不能用到&…

权限管理系统-0.4.0

五、权限管理 5.1 引入JWT JWT是JSON Web Token的缩写,即JSON Web令牌,是一种自包含令牌。 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。 JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以…

智合同如何助力建筑行业合同智能化管理

#建筑行业 #人工智能 #AI #合同智能应用 #深度学习 #自然语言处理技术 #知识图谱智合同-采用深度学习、自然语言处理技术、知识图谱等人工智能技术,为企业提供专业的合同相关的智能服务。其主要服务包含:合同智能审查、合同要素智能提取、合同版本…

C语言基础练习——Day05

目录 选择题 编程题 数字在升序数组中出现的次数 整数转换 选择题 1、如下程序的功能是 #include <stdio.h> int main() {char ch[80] "123abcdEFG*&";int j;puts(ch);for(j 0; ch[j] ! \0; j){if(ch[j] > A && ch[j] < Z)ch[j] ch[j] e…

jsp中${xxx}代表什么

jsp中${}----是EL表达式的常规表示方式 目的是为了获取{}中指定的对象&#xff08;参数、对象等&#xff09;的值 如&#xff1a; ${user.name}<>User user (User)request(搜寻范围).getAttribute(user); String name user.getName(); out.println(name); 从当前页面起…

智能测径仪在胶管行业的应用

关键字&#xff1a;胶管外径尺寸测量&#xff0c;胶管检测仪器&#xff0c;胶管外径检测&#xff0c;高温胶管外径检测&#xff0c;软硬胶管检测&#xff0c; 智能测径仪在家胶管行业中的应用主要体现在对胶管外径的精确测量和控制上。在胶管生产过程中&#xff0c;外径的大小直…

dubbo调用的自定义过滤器中设置MDC无法生效的问题

AI的解释 Dubbo自定义过滤器不生效可能有多种原因&#xff0c;以下是一些常见的原因及解决方法&#xff1a; 过滤器未正确配置&#xff1a; 检查过滤器是否已经在Dubbo的配置文件中正确声明&#xff0c;并且已经添加到过滤器链中。在XML配置中&#xff0c;应使用<dubbo:se…

Python3虚拟环境之pipenv

pipenv是python官方推荐的包管理工具&#xff0c;集成了virtualenv, pip和pyenv三者的功能。集合了所有的包管理工具的长处&#xff0c;自动为项目创建和管理虚拟环境。 安装 pip install pipenv在Pycharm中使用 修改Pipfile的安装源参数url&#xff0c;改为https://pypi.tun…

leetcode周赛388(1-3)

周赛第一次解出来了三个&#xff0c;虽然第三个比赛时候没解出来但是很近了&#xff0c;就下来试了一下&#xff0c;真的解出来了&#xff0c;记录一下。 1.&#xff08;100233. 重新分装苹果&#xff09;题目描述&#xff1a; 给你一个长度为 n 的数组 apple 和另一个长度为 …

Valid8Proxy:一款功能强大的工作代理获取、验证和存储工具

关于Valid8Proxy Valid8Proxy是一款功能强大且用户友好的代理管理工具&#xff0c;该工具功能丰富&#xff0c;旨在帮助广大研究人员获取、验证和存储工作代理的相关信息。 无论你是需要用于网络资源爬取、网络数字匿名化还是测试网络安全的代理&#xff0c;Valid8Proxy都可以…

应用方案 |安防摄像头(IPC)的步进马达及IR-CUT驱动芯片D6212

应用领域 安防摄像头&#xff08;IPC&#xff09;的步进马达及IR-CUT驱动。 02 功能介绍 D6212内置8路带有续流二极管的达林顿驱动管阵列和一个H桥驱动&#xff0c;单芯片即可实现2个步进电机和一个IR-CUT的直接驱动&#xff0c;使得电路应用非常简单。单个达林顿管在输入…

面试被问的性能优化(给我死记硬背!)

文章目录 首屏加载性能方案SEO优化图表性能优化大文件上传失败解决方案长列表性能方案动画性能优化方案Webpack 打包优化Vite 打包优化 首屏加载性能方案 优化 Vue 项目的首屏加载性能对于提高用户体验至关重要。以下是一些关于 Vue 项目首屏优化的建议&#xff1a; 路由懒加载…

Python中如何操作数据库?

Python中如何操作数据库&#xff1f; ​​​​​ 在Python中操作数据库通常涉及到使用数据库驱动程序或ORM&#xff08;对象关系映射&#xff09;库。下面是一些常见的步骤和工具&#xff0c;用于在Python中操作数据库&#xff1a; 1. 选择数据库和驱动程序 首先&#xff0c…

java异常概述及自定义处理

前言 学到异常了&#xff0c;本来以为处理异常只是避免bug&#xff0c;结果发现还可以为了编程需要自定义异常。打好基础&#xff0c;daydayup! 异常 什么是异常 异常就是代表程序出现的问题 异常的体系 异常体系指的是java开发人员为了方便程序员使用所开发的异常类&#xff…

测试WebView的文件上传

对于WebView的文件上传&#xff0c;WebView本身是没有进行处理的&#xff0c;需要覆盖如下方法进行处理&#xff1a; fun onShowFileChooser(webView: WebView, filePathCallback: ValueCallback<Array<Uri>>, fileChooserParams: FileChooserParams )其中第三个参…

python基础练习 查找整数

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 给出一个包含n个整数的数列&#xff0c;问整数a在数列中的第一次出现是第几个。 输入格式 第一行包含一个整数n。 第二…

基于openpose的引体向上的识别计数统计项目(4)CPoseExtract类设计与实现

CPoseExtract设计为一个纯虚类,规定了基本的调用接口函数,便于后续扩展使用。 #pragma once#include "opencv2/core.hpp"class CPoseExtract {public:CPoseExtract() {};virtual ~CPoseExtract(

Spring容器的启动流程

1、扫描并注册BeanDefinition&#xff1a; Spring 会开始扫描指定的包&#xff0c;查找带有 Component、Service、Repository 和 Controller 等注解的类。发现的类会被处理&#xff0c;创建相应的 BeanDefinition 对象&#xff0c;封装类名、作用域、依赖关系等元数据。这些 B…