docker

(一)docker的基本管理和概念

1、docker:是开源的应用容器引擎,基于go语言开发的,运行在Linux系统当中的开源的、轻量级的“虚拟机”

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

3、docker的宿主机是Linux系统,集装箱可以理解为互相隔离的容器(组件、应用程序APP),每个容器都是一个独立的应用程序

4、docker的设计宗旨:build、ship and run any app, anywhere

(1)build:封装好的程序,只要部署即可使用,一次封装
(2)ship and run any app:一次封装完成之后的程序,可以在任何环境运行
(3)anywhere:任意宿主机
(4)build、ship and run any app, anywhere:一次封装、到处运行
(5)流程:封装、发布、部署、运行、维护、运行、销毁(可以以一整套的方式管理运用程序的生命周期)

(二)docker为什么的受欢迎

1、灵活,再复杂的应用也可以实现容器化

2、轻量级,小型的、不完整的,最小化封装的程序,与宿主机共享内核

3、可互换,可以随时的升级、更新

4、便携式,本地可以构建,在云平台也可以实现部署,在任何地方运行

5、可扩展,自动分发容器副本

6、可堆叠,在一个宿主机上可以创建不同版本的同一容器,也可以是多个相同版本的同一容器

(1)基于Linux的命名空间:namespace,是一种内核特性,允许将一组系统的资源隔离,在一个命名空间中的进程在系统中可以拥有独立的资源
(2)重点:namespace的六项隔离措施
基于这个六个隔离项,实现了容器和容器之间,以及容器和宿主机之间的资源隔离

命名空间

系统调用参数

隔离内容

UTS

CLONE_NEWUTS

隔离主机和域名

在UTS这个命名空间创建进程,进程可以看到自己的主机名和域名,与其他进程分隔开

IPC

CLONE_NEWIPC

隔离信号量、消息队列、共享内存

在IPC这个命名空间之中,进程可以拥有独立的进程间通信资源

PID

CLONE_NEWPID

每个进程都有自己独立的进程号空间

network

CLONE_NEWNET

隔离网络设备、网络栈、端口

每个进程都有一个自己独立的网络资源(端口号)

mount

CLONE_NEWNS

隔离挂载点

在mount这个命名空间之中,每个进程或者设备都有自己的文件系统挂载点,相互之间互不干扰

user

CLONE_NEWUSER

隔离同的用户和用户组

(三)docker的核心组件

1、镜像:是docker的基础,最小单位,类似于虚拟机的ISO文件。

(1)一个镜像就是一个可执行的包,包里面包含了运行这个程序的所有内容(代码、配置文件、环境变量)
(2)docker镜像也是一个压缩包,不是一个解压的文件,是一个环境部署的脚本,基本包含了完整的操作系统

2、容器:docker的容器就是基于镜像运行起来的实例,可以启动,停止,删除,每个容器的都是相互隔离的,互不可见

3、仓库:保存镜像,所有的镜像都是从仓库当中拉去的,镜像也保存在仓库之中

(1)可以有共有仓库、私有仓库
(2)下载到了本地:镜像、容器、日志都默认存储在/var/lib/docker(宿主机)

(四)docker与虚拟机之间的区别(重点)

特性

docker

虚拟机

启动速度

秒级

分钟级

计算能力损耗(占CPU)

几乎无

损耗50%

性能

接近于原生系统

弱于原生系统

系统支持量

上千个

硬件系统来看(几十个)

隔离性

资源隔离

完全隔离

安全性

安全性差

安全性高

mysql、redis等不会用docker和k8s(核心数据不会上云、还是部署在本地

(五)部署docker(2核4G,硬盘300G)

1、安装相关依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-utils:提供一个yum-config-manager工具,可以远程自定义获取yum源

device-mapper-persistent-data lvm2

device-mapper:进行逻辑卷管理的通用设备的映射机制、lvm

2、设置阿里云镜像源

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

3、安装组件

yum install -y docker-ce docker-ce-cli containerd.io

docker-ce

docker的社区办,免费,面向开发者,小型团队和个人使用

docker-ce-cli

提供docker的命令行工具

contarnerd.io

负责管理容器的生命周期(创建、运行、停止、运行、销毁)

systemctl start docker.service
systemctl enable docker.service

3、docker的相关命令

(1)docker version:查看docker的版本(docker24版本
docker只能支持64位系统

(2)docker info:查看docker的所有信息
docker安装完毕之后,客户端和服务端都在一起,都运行在一台机器上

overlay2:docker使用的文件系统驱动

overlayFS

overlay file system:联合文件系统,用于适配宿主机的文件系统,可以自动适配

lowerDir

底层目录,docker的底层文件系统,是一个或者多个镜像文件的根文件系统

UpperDir

可写目录,可以在容器运行时,在容器内进行写操作,实现容器的可写性

MergeDir

合并目录,合并lowerDir和UpperDir,就是容器的文件系统,用户看到的也就是这个合并的视图

WorkDir

工作目录,处理文件系统变更,当在容器内进行写操作时,overlayFS使用WorkDir来跟踪文件系统的变更

(六)对docker的镜像和容器的增删改查

docker的增删改查

查看docker的版本

docker version

查看docker的所有信息

docker info

搜索镜像

docker search 镜像名称

获取镜像(镜像拉取)

docker pull 镜像名称

docker pull centos

docker pull centos:7

查看下载的镜像

docker images

查看镜像的详细信息

docker inspect 镜像名称/镜像ID

docker inspect centos:7(镜像名)

docker inspect 5d0da3dc9764(镜像ID)

给镜像上不同的标签

docker tag centos:latest centos:new

(标签—硬链接、复制了源镜像)

删除镜像

docker rmi 镜像名称/镜像ID

docker rmi centos:new

docker rmi -f 5d0da3dc9764(强制删除)

把镜像保存为本地文件

(镜像导出)

docker save -o /opt/xx.tar 镜像名称/镜像ID

docker save -o /opt/centos.tar centos:7

docker save -o /opt/centos1.tar 5d0da3dc9764

将镜像文件导入到镜像库中(镜像导入)

docker load -i centos.tar

上传镜像(先添加标签、再上传镜像)

docker tag centos:latest hydedidi/centos:hyde

docker login登录公用仓库

docker push hydedidi/centos:hyde上传镜像

基于镜像创建容器

docker create -it centos:7 /bin/bash

查看容器

查看正在运行的容器

docker ps

查看所有的容器

docker ps -a

启动容器

docker start 容器名称/ID

docker start friendly_bardeen

docker start 0d9aef184f4a

进入正在运行的容器

docker exec -it 容器名称/ID bash

docker exec -it 0d9aef184f4a bash

docker exec -it friendly_bardeen bash

同时创建和运行容器(且未创建镜像)

docker run -itd --name hyde1 nginx /bin/bash

把文件从容器中复制到主机

docker cp hyde1:/etc/nginx/nginx.conf /opt/

把主机的文件复制回容器

docker cp /opt/nginx.conf hyde1:/etc/nginx/

容器导出为快照文件(xx.tar格式的文件名)

docker export -o nginx.tar hyde1

docker export hyde1 > nginx1.tar

(不指定目录,默认是当前目录)

docker export -o /opt/data/nginx.tar hyde1

docker export hyde1 >  /opt/data/nginx.tar

容器导入(导入为镜像

docker import nginx.tar -- nginx:hyde2镜像名称:标签名

标签名不能重复,否则会出现none

删除容器

删除未在运行的容器

docker rm test1容器名/ID

删除正在运行的容器

docker rm -f test1

先停止:docker stop test1

再删除:docker rm test1

批量操作

批量停止容器:

docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash

批量删除后台停止的容器:

docker rm $(docker ps -a -q)

批量删除所有容器(先停再删、慎用):

docker ps -a | awk 'NR>=2{print $1}'| xargs docker rm

批量删除none镜像(推荐)

docker images | grep "none" | awk '{print $3}' | xargs docker rmi -f

1、搜索镜像:docker search 镜像名称

name

表示镜像名称

DESCRIPTION

描述信息

stars

好评数量

OFFICIAL

表示官方镜像

AUTOMATED

是否是自动化构建

3、获取镜像(镜像拉取):docker pull 镜像名称

什么都不加,默认是centos的最近版本
(1)指定版本下载:docker pull centos:7

4、查看下载的镜像:docker images

REPOSITORY

镜像所属的仓库

TAG

标签,可以理解为版本,标记一个仓库的不同镜像

IMAGE ID

镜像的唯一标识,不会重复

CREATED

镜像的创建时间

SIZE

镜像的大小

5、查看镜像的详细信息:docker inspect 镜像名称/镜像ID

6、给镜像打上不同的标签:docker tag centos:latest centos:new

标签的作用:相当于硬链接(复制了源镜像)

7、删除镜像:docker rmi 镜像名称/镜像ID

docker rmi -f 5d0da3dc9764(强制删除)
(1)一个镜像如果有多个标签,删除的只是标签。如果只剩最后一个,删除的就是镜像本身
(2)如果镜像已经被容器使用,要先停容器,再删除容器,最后再删除镜像
(3)删除了在运行的容器的镜像,对容器会有影响吗

8、把镜像保存为本地文件:docker save -o /opt/xx.tar 镜像名称/镜像ID(镜像导出)

9、将镜像文件导入到镜像库中(镜像导入):docker load -i centos.tar

10、上传镜像(先添加标签、再上传镜像)

11、基于镜像创建容器:docker create -it centos:7 /bin/bash

-i

表示让容器开启标准输入,用于接受用户的输入命名

-t

给这个容器分配一个终端,这是一个虚拟的伪终端

-it

形成一个宿主机和容器之间的一个可以交互的shell命令行

12、查看容器

(1)docker ps:查看正在运行的容器
(2)docker ps -a :查看所有的容器(运行的和未运行的)

CONTAINER ID

容器的ID号

IMAGE  

加载的镜像

COMMAND  

运行的程序

CREATED

创建时间

STATUS

当前的状态

PORTS

端口映射

NAMES

名称

13、启动容器:docker start 容器名称/ID

14、进入正在运行的容器:docker exec -it 容器名称/ID bash

15、同时创建和运行容器:docker run -itd --name hyde1 nginx /bin/bash
基于nginx安装的最小化的带有nginx功能的程序
只要run,无论对错,都会创建

-d

可以让创建的容器以守护进程在后台运行,容器所运行的程序不会结束

  1. 没有镜像也能自动拉取镜像、run

(2)运行的程序是 /bin/bash,和-d结合,给容器一个持续运行的命令,若后台没有指令,容器没有可运行的程序,将会直接退出

-it

形成交互式会话

-d

后台运行 /bin/bash

--name

给容器命名

nginx:1.22.0

镜像名称和标签,如果本地没有,可以自动下载(不指定,默认最新版本)

16、把文件从容器中复制到主机:docker cp hyde1:/etc/nginx/nginx.conf /opt/

17、把主机的文件复制回容器:docker cp /opt/nginx.conf hyde1:/etc/nginx/

18、容器导出和导入(docker export/import)

1用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export 命令将已经创建好的容器导出为容器快照文件,无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。
①导出的容器还是一个镜像,必须run 或create才能成为容器
②已经配置好的导出的容器镜像,可以直接创建、运行使用(在工作,我们使用的都是开发已经设置、配置好的容器镜像)
③docker的特性:即使在创建过程中报错,容器还是会被创建,但是这个容器不可用
④导入镜像或者导入容器镜像,如果标签和已有标签重复,导入的镜像或者容器镜像,tag这一项就会变成none
(2)容器导出为快照文件:docker export -o nginx.tar(xx.tar格式的文件名) hyde1

(3)容器导入(导入为镜像):docker import nginx.tar -- nginx:hyde2镜像名称:标签名标签名不能重复

19、删除容器:

20、批量操作

(1)批量停止容器(不要使用):docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash

(2)批量删除后台停止的容器:docker rm $(docker ps -a -q)

(3)批量删除所有容器(先停再删、慎用):docker ps -a | awk 'NR>=2{print $1}'| xargs docker rm

(4)批量删除none镜像(推荐):docker images | grep "none" | awk '{print $3}' | xargs docker rmi -f

相关推荐

  1. <span style='color:red;'>docker</span>

    docker

    2023-12-07 13:26:05      32 阅读
  2. <span style='color:red;'>Docker</span>

    Docker

    2023-12-07 13:26:05      26 阅读
  3. <span style='color:red;'>docker</span>

    docker

    2023-12-07 13:26:05      35 阅读
  4. <span style='color:red;'>Docker</span>

    Docker

    2023-12-07 13:26:05      45 阅读
  5. <span style='color:red;'>Docker</span>

    Docker

    2023-12-07 13:26:05      39 阅读
  6. Docker

    2023-12-07 13:26:05       25 阅读
  7. Docker

    2023-12-07 13:26:05       31 阅读
  8. <span style='color:red;'>Docker</span>

    Docker

    2023-12-07 13:26:05      34 阅读
  9. docker

    2023-12-07 13:26:05       34 阅读
  10. <span style='color:red;'>Docker</span>

    Docker

    2023-12-07 13:26:05      35 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-07 13:26:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-07 13:26:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-07 13:26:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-07 13:26:05       20 阅读

热门阅读

  1. uniapp图片预览

    2023-12-07 13:26:05       39 阅读
  2. Python数据可视化:绘制折线图

    2023-12-07 13:26:05       35 阅读
  3. Django大回顾 - 7 Cookie、Session

    2023-12-07 13:26:05       35 阅读
  4. 介绍 TensorFlow 的基本概念和使用场景

    2023-12-07 13:26:05       42 阅读
  5. Windows11 和 MacOS 内存优化比较

    2023-12-07 13:26:05       41 阅读
  6. 2次MD5加密——用于分布式对话

    2023-12-07 13:26:05       34 阅读