Docker容器基础

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、Docker概述
    • 1、docker是什么
    • 2、Docker的设计宗旨
    • 3、容器在内核中支持2种重要技术:
  • 三、Docker的核心概念
  • 四、Docker相关命令
    • 1.安装依赖包
    • 2.设置阿里云镜像源
    • 3.安装Docker-CE
  • 五、Docker镜像的操作
    • 1.搜索镜像
    • 2.获取镜像
    • 3.镜像加速下载
    • 4.查看镜像信息
    • 5.添加新标签(打标签)
    • 6.删除镜像
    • 7.将镜像存储到本机上,命名为nginx_latest
    • 8.载入镜像
    • 9.上传镜像
  • 六、容器操作
    • ​1.容器创建​
    • 2.查看容器运行状态​
    • 3.启动、停止、重启容器
    • 4.运行容器
    • ​​5.进入、退出容器
    • ​​6.容器导出、导入
    • 7.删除容器
  • 总结


一、Docker概述

在这里插入图片描述

1、docker是什么

​​Docker 是在Linux容器例运行应用的开源工具,是一种轻量级的虚拟机。

Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机"。

Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。

Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。

2、Docker的设计宗旨

​​Build,ship and Run Any App , Anywhere​​

​​即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的"​​​一次封装,到处运行​​​"的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。​​

​​容器化越来越受欢迎,因为容器是:​​

​​灵活:即使是最复杂的应用也可以集装箱化。​​
轻量级:容器利用并共享主机内核。​​
可互换:可以即时部署更新和升级。​​
便携式:可以在本地构建,部署到云,并在任何地方运行。​​
可扩展:可以增加并自动分发容器副本。​​
可维叠:可以垂直和即时堆叠服务。

3、容器在内核中支持2种重要技术:

docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)。

mount文件系统,挂载点——>一个文件系统内,不能重复挂载一个指定目录,列如:/mnt
user操作进程的用户和用户组
pid进程编号
uts主机名和主机域
ipc信号量、消息队列、共享存储(理解,不同的应用调用内存资源的时候应该使用不同的内存空间)
net网络设备、网络协议栈、端口等

三、Docker的核心概念

在这里插入图片描述
Docker客户端向Docker服务器发出请求,使用远程API来管理和创建Docker容器:

镜像(Image):镜像是Docker中的一个模板。通过 Docker镜像 来创建 Docker容器,一个镜像可以创建出多个容器。 镜像是由一系列指令一步一步构建出来。

容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

四、Docker相关命令

1.安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2#yum-utils提供了yum-config-manager
#device mapper存储驱动程序需要device-mapper-persistent-data和lvm2
#Device Mapper 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。

在这里插入图片描述

2.设置阿里云镜像源

代码如下(示例):

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

在这里插入图片描述

3.安装Docker-CE

#安装 Docker-CE并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.iosystemctl start docker.service
systemctl enable docker.service  
--------------------------------------------------------------------------------------------
安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。 Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。
--------------------------------------------------------------------------------------------

在这里插入图片描述
在这里插入图片描述

docker version  查看docker版本信息

在这里插入图片描述
在这里插入图片描述

五、Docker镜像的操作

1.搜索镜像

docker search 服务名
例如:
docker search nginx

在这里插入图片描述

2.获取镜像

格式:docker pull 仓库名称[:标签]
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
docker pull nginx

在这里插入图片描述

3.镜像加速下载

浏览器访问https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://1azni81n.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.查看镜像信息

docker images
docker inspect 镜像的ID
例如
docker images
docker inspect af62dd757b58镜像下教后存放在/var/ lib/ docker 。
Docker相关的本地资源存放在/var/lib/docker/目录下,其中 containers日录存放容器信息,image目录存放镜像信息,overlay2目录下存放具体的镜像底层文件。
#查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json

在这里插入图片描述在这里插入图片描述

5.添加新标签(打标签)

docker tag 仓库名:原镜像名 仓库名:新镜像名
例如:
docker tag nginx:latest nginx:test
docker images
docker images | grep test

在这里插入图片描述

6.删除镜像

​​指定镜像ID删除的时候,要求该镜像不能有标签

#=====删除镜像
格式:
docker rmi 仓库名称:标签		#当一个镜像有多个标签时,只是删除其中指定的标签
或者
docker rmi 镜像ID号			#会彻底删除该镜像注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。docker rmi nginx:web

在这里插入图片描述
在这里插入图片描述

7.将镜像存储到本机上,命名为nginx_latest

docker save -o 存放镜像的位置 仓库名:镜像名
例如:
docker save -o /opt/nginx_latest nginx:latest#存出镜像====:将镜像保存成为本地文件
格式:docker save -o 存储文件名 存储的镜像
docker save -o nginx nginx:latest			#存出镜像命名为nginx存在当前目录下
ls -lh

在这里插入图片描述
在这里插入图片描述

8.载入镜像

#载入镜像====:将镜像文件导入到镜像库中
格式:
docker load < 存出的文件
或者
docker load -i 存出的文件docker load < nginx

在这里插入图片描述
在这里插入图片描述

9.上传镜像

将本地的镜像上传到公有的镜像仓库,要先登陆到镜像仓库

​​上传镜像前要修改标签,标签前面要加上Docker官网的账号名​​

​​标签格式: Docker官网的账号名/仓库名:镜像名​​

不过一般不会上传到公有仓库中,公司内部都使用私有仓库

docker push [OPTIONS] NAME[:TAG]例如:按照下面的流程就可以上传到公有云,有兴趣的可以上传
注册网址 :https://hub.docker.com/
#改标签
docker tag 仓库名:镜像名 用户名/仓库名:镜像名
#登录
docker login
Username:   #用户名
Password:   #密码#上传
docker push 用户名/仓库名:镜像名默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com
可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。docker tag nginx:latest soscscs/nginx:web		#添加新的标签时必须在前面加上自己的dockerhub的username
docker login								#登录公共仓库
Username:soscscs
password:abc123456
docker push soscscs/nginx:web					#上传镜像

六、容器操作

​1.容器创建​

容器创建:就是将镜像加载到容器的过程。​​

​​新创建的容器​​​默认处于停止状态​​​,不运行任何程序,需要在其中发起一个进程来启动容器

格式:docker create [选项] 镜像
常用选项:
-i:让容器开启标准输入
-t:让 Docker 分配一个伪终端 tty
-it :合起来实现和容器交互的作用,运行一个交互式会话 shell docker create -it nginx:latest /bin/bash

在这里插入图片描述

2.查看容器运行状态​

容器的STATUS状态​
​​​up是正在运行的​​
Exited (0)是正常停止的容器​​
Exited (0)异常停止的容器docker ps -a			#-a 选项可以显示所有的容器
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS    PORTS     NAMES
8b0a7be0ff58   nginx:latest   "/docker-entrypoint.…"   57 seconds ago   Created             inspiring_swanson容器的ID号	   加载的镜像     运行的程序               创建时间       当前的状态  端口映射  名称

在这里插入图片描述

3.启动、停止、重启容器

docker start 容器ID:启动一个或多个已经被停止的容器
docker stop 容器ID:停止一个运行中的容器
docker restart 容器ID:重启容器
例:
docker start 875e301d22b5
docker ps -a
docker stop 875e301d22b5
docker ps -a
docker restart 875e301d22b5

在这里插入图片描述

4.运行容器

run和start的作用有些类似,准确来说run相当于create+start​​
​​一般第一次可以使用run,后面维护还是使用start/stop/restart

docker run [选项] 镜像 [命令] [变量]
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-c 命令表示后面的参数将会作为字符串读入作为执行的命令
-v: 绑定一个卷
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
--name="名称": 为容器指定一个名称
--link name:alias 添加链接到另一个容器,格式“--link容器名:别名”
可以直接执行 docker run 命令, 等同于先执行 docker create 命令,再执行 docker start 命令。
注意:容器是一个与其中运行的 shell 命令共存亡的终端,命令运行容器运行, 命令结束容器退出。docker 容器默认会把容器内部第一个进程,也就是 pid=1 的程序作为docker容器是否正在运行的依据,如果docker容器中 pid = 1 的进程挂了,那么docker容器便会直接退出,也就是说Docker容器中必须有一个前台进程,否则认为容器已经挂掉。

当利用 docker run 来创建容器时, Docker 在后台的标准运行过程是:
(1)检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载;
(2)利用镜像创建并启动一个容器;
(3)分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;
(4)从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;
(5)分配一个地址池中的 IP 地址给容器;
(6)执行用户指定的应用程序,执行完毕后容器被终止运行。

#在后台持续运行 docker run 创建的容器
需要在 docker run 命令之后添加 -d 选项让 Docker 容器以守护形式在后台运行。并且容器所运行的程序不能结束。docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"docker ps -a					#可以看出容器始终处于 UP,运行状态
CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS         PORTS     NAMES
2592d3fad0fb   centos:7   "/usr/bin/bash -c 'w…"   2 seconds ago    Up 2 seconds             peaceful_chateletdocker run -itd --name test1 centos:7 /bin/bash   #创建容器并持续运行容器#=======终止容器运行
格式:docker stop 容器的ID/名称
docker stop 2592d3fad0fbdocker ps -a

​​5.进入、退出容器

​​进入的容器状态一定要是运行状态

需要进入容器进行命令操作时,可以使用 docker exec 命令进入运行着的容器。格式:docker exec -it 容器ID/名称 /bin/bash
-i 选项表示让容器的输入保持打开;
-t 选项表示让 Docker 分配一个伪终端。docker start 2592d3fad0fb					#进入容器前,确保容器正在运行
docker exec -it 2592d3fad0fb /bin/bash
ls
exit				#退出容器后,容器仍在运行
docker ps -adocker run -it centos:7 bash      #不加 -d 选项会创建容器后直接进入容器,但是退出容器,容器也会停止

​​6.容器导出、导入

用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export 命令将已经创建好的容器导出为文件,无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。#导出格式:docker export 容器ID/名称 > 文件名
docker export 2592d3fad0fb > centos7.tar#导入格式:cat 文件名 | docker import – 镜像名称:标签
cat centos7.tar | docker import - centos7:test			#导入后会生成镜像,但不会创建容器#容器导出
docker export 容器ID > 备份文件名#容器导入(会生成镜像,而不会创建容器)
cat 备份文件名 | docker import - 仓库名:镜像名例如:
docker export a4b09cb9c4d8 > nginx_up
docker export 3a198d9be5e2 > nginx_exitedcat nginx_up | docker import - nginx:web

7.删除容器

格式:docker rm [-f] 容器ID/名称
docker stop 2592d3fad0fb
docker rm 2592d3fad0fb				#删除已经终止状态的容器docker rm -f 2592d3fad0fb			#强制删除正在运行的容器docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash			#批量停止容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker stopdocker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash				#批量删除所有容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker rmdocker images | awk 'NR>=2{print "docker rmi "$3}' | bash			#批量删除镜像
docker images | grep none | awk '{print $3}' | xargs docker rmi		#删除none镜像docker rm $(docker ps -a -q)		#批量清理后台停止的容器docker rm 容器ID
例如:
docker rm a4b09cb9c4d8
//批量删除容器
docker ps -a | awk '{print "docker rm "$1}' | bash
//强删
docker rm 3a198d9be5e2 -f

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/70503.html

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

相关文章

【学习笔记之opcua】使用Python获取opcua数据

Python与OPC UA的应用 示例代码 将代码放入spyder中运行后&#xff0c;出现下面这个错误 没有‘opcua’&#xff0c;那我们就下载pip install opcua 之后出现下面这个错误 问问题大不&#xff0c;安装语句写错了 正经安装语句是 !pip install opcua 读取opcua协议数据测试 …

jenkins gitlab 安装

目录 一 准备安装环境 二 安装gitlab软件 三 配置gitlab 四 重新加载配置启动gitlab 五 修改密码 五 创建用户组 一 准备安装环境 sudo yum update sudo yum install -y curl policycoreutils-python openssh-server安装 Postfix 邮件服务器&#xff0c;以便 Git…

华为云classroom赋能--Devstar使应用开发无需从零开始

华为云DevStar为开发者提供业界主流框架代码初始化能力&#xff0c;通过GUI、API、CLI等多种方式&#xff0c;将按模板生成框架代码的能力推送至用户桌面。同时基于华为云服务资源、成熟的DevOps开发工具链和面向多场景的众多开发模板&#xff0c;提供一站式创建代码仓、自动生…

leetcode做题笔记83删除排序链表中的重复元素

给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2] 思路一&#xff1a;模拟题意 struct ListNode* deleteDuplicates(struct ListNode* head){i…

《Go 语言第一课》课程学习笔记(一)

配好环境&#xff1a;选择一种最适合你的 Go 安装方法 选择 Go 版本 一般情况下&#xff0c;建议采用最新版本。因为 Go 团队发布的 Go 语言稳定版本的平均质量一直是很高的&#xff0c;少有影响使用的重大 bug。可以根据不同实际项目需要或开源社区的情况使用不同的版本。 有…

CentOS系统环境搭建(七)——Centos7安装MySQL

centos系统环境搭建专栏&#x1f517;点击跳转 坦诚地说&#xff0c;本文中百分之九十的内容都来自于该文章&#x1f517;Linux&#xff1a;CentOS7安装MySQL8&#xff08;详&#xff09;&#xff0c;十分佩服大佬文章结构合理&#xff0c;文笔清晰&#xff0c;我曾经在这篇文章…

二、编写第一个 Spring MVC 程序(总结项目报 404 问题以及 Spring MVC 的执行流程)

文章目录 一、编写第一个 Spring MVC 程序二、项目运行时报 404错误原因总结三、Spring MVC 的执行流程 一、编写第一个 Spring MVC 程序 创建 maven 项目&#xff0c;以此项目为父项目&#xff0c;在父项目的 pom.xml 中导入相关依赖 <dependencies><dependency…

draw.io导出矢量图到word报错text is not svg - cannot display

先参考https://blog.csdn.net/a625750076/article/details/126384831 如果不行&#xff0c;可能是转存的问题 解决方法&#xff1a;直接在draw.io上操作 第一步 第二步 然后再word中粘贴&#xff0c;依旧是矢量图哦&#xff01;

用node.js搭建一个视频推流服务

由于业务中有不少视频使用的场景&#xff0c;今天来说说如何使用node完成一个视频推流服务。 先看看效果&#xff1a; 这里的播放的视频是一个多个Partial Content组合起来的&#xff0c;每个Partial Content大小是1M。 一&#xff0c;项目搭建 &#xff08;1&#xff09;初…

香港服务器三网直连内地线路什么意思?好用吗?

​  三网直连内地是指香港服务器可以直接连接中国内地的电信、联通和移动三大运营商网络&#xff0c;避免了中间网络干线的支持。这样可以实现直接、快速、稳定的网络访问&#xff0c;提高用户对网络访问的效率&#xff0c;减少网络访问问题和拥堵的现象。 香港服务器直连内地…

自动驾驶——驶向未来的革命性技术

自动驾驶——驶向未来的革命性技术 自动驾驶的组件自动驾驶的优势自动驾驶的应用自动驾驶的未来中国的自动驾驶 自动驾驶是一种技术&#xff0c;它允许车辆在没有人类驾驶员的情况下自主地进行行驶。它利用各种传感器、计算机视觉、人工智能和机器学习算法来感知和理解周围环境…

阿里云故障洞察提效 50%,全栈可观测建设有哪些技术要点?

本文根据作者在「TakinTalks 稳定性社区 」公开分享整理而成 #一分钟精华速览# 全栈可观测是一种更全面、更综合和更深入的观测能力&#xff0c;能协助全面了解和监测系统的各个层面和组件&#xff0c;它不仅仅是一个技术上的概念&#xff0c;更多地是技术与业务的结合。在“…