docker的基本管理和相关概念

docker的基本管理和概念

docker:开源的应用容器引擎。基于go语言开发的。运行在linux系统当中的开源的,轻量级的"虚拟机"

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

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

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

build:封装好的程序,只要部署即可使用。一次封装

ship and run app:一次封装完成之后的程序,可以在任何环境运行

anywhere:任意宿主机

一次封装,到处运行

封装,发布,部署,运行,维护,运行,销毁。

可以一整套的方式管理应用程序的生命周期

docker为什么受欢迎:

  1. 灵活,在复杂的应用也可以实现容器化。
  2. 轻量级:小型的,不完整的,最小化封装的程序,与宿主机共享内核。
  3. 可互换:可以随时的升级,更新。
  4. 便携式:本地可以搭建,在云平台上也可以实现部署。在任何地方运行。
  5. 可扩展:自动分发容器副本。
  6. 可堆叠:在一个宿主机上可以创建不同版本的同一容器,也可以是多个相同版本的同一容器。

linux的命名空间namespace。是一种内核的特性。允许将一组系统资源隔离,在一个命名空间中的进程在系统当中可以拥有独立的资源。

namespace的六项隔离措施:

  1. UTS(命名空间),系统调用参数:CLONE_ NEWUTS,隔离内容:主机与域名,在UTS这个命名空间当中创建进程,进程可以看到自己的主机名和域名,与其他进程分隔开。
  2. IPC系统调用的参数: CLONE_NEWIPC,隔离内容:信号量,消息队列,共享内存。在IPC这个命名空间之中,进行可以拥有独立的进程通信资源
  3. PID系统调用参数: CLONE_NEWPID,隔离内容:每个进程都有自己独立的进程号空间。
  4. Network系统调用参数:CLONE_NEWNET 隔离内容:网络设备,网络栈,以及端口。

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

5.mount 系统调用的参数:CLONE_NEWNS,隔离内容:挂载点,在mount这个命名空间之中,每个进程或者设备都有自己的文件系统挂载点,相互之间互不干扰。

6.user 系统调用的参数:CLONE_NEWUSER,隔离不同的用户和用户组=。

基于这六个隔离项,实现了容器和容器之间,以及容器和宿主机之间的资源隔离。

docker的核心组件:

镜像:是docker的基础,最小单位。类似与虚拟机的ISO文件,一个镜像就是一个可执行的包,包里面吗包含了运行这个程序的所有内容(代码,配置文件,环境变量。)

docker镜像也是一个压缩包,不是一个解压的文件,是一个环境部署的脚本,甚至包含了完整的操作系统。

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

仓库:保存镜像,所有的镜像信息都是从仓库当中挖取的。可以有公有仓库

还可以是私有仓库。镜像都是从仓库中拉去,镜像也保存在仓库之中。

下载到了本地:镜像容器日志/var/lib/docker宿主机。|

Docker与虚拟机之间的区别:

特性 docker 虚拟机

启动速度 秒级 分钟级

计算能力损耗 几乎无 损耗50%

性能 接近于原生系统 弱于原生系统

系统支持量 上千个 硬件系统来看(几十个)

隔离性 资源隔离 完全隔离

安全性 安全性差 安全性高

Docker部署

关闭防火墙

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

#yum-utils:yum-config-manger工具,可以远程自定义获取yum源

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

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

#设置阿里云镜像源

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

#安装 Docker-CE并设置为开机自动启动

systemctl start docker.service

systemctl enable docker.service

docker的命令行命令:

查看docker服务的信息:

docker version

#查看docker的版本信息

docker info

#查看本机docker的所有信息

docker只能支持64位系统

镜像加速下载

浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置

mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"]

}

EOF

systemctl daemon-reload

systemctl restart docker

获取镜像

格式:docker pull 镜像名称[:标签]

#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。

docker pull nginx

docker pull centos:7

docker images

#查看下载到本地的所有镜像

REPOSITORY:镜像属于的仓库
TAG:镜像的标签信息,标记同一个仓库中的不同镜像
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像
CREATED:镜像创建时间
VIRTUAL SIZE:镜像大小

#根据镜像的唯一标识 ID 号,获取镜像详细信息

docker inspect 605c77e624dd

格式:docker inspect 镜像ID号

docker安装完毕之后客户端和服务端都在一起 overlay2:docker使用的文件系统驱动

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

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

UppeDir:可写层。可以再容器运行时,在容器内进行写操作,实现容器的可写性

MergeDir:合并目录。lowerdir和upperdir合并起来,就是容器文件系统,用户看到的也就是这个合并视图

workDir:工作目录。处理文件系统变更。当在容器内进行写操作时,overlayfs使用workdir来追踪文件系统的更改

#为本地的镜像添加新的标签

格式:docker tag 名称:[标签] 新名称:[新标签]

docker tag nginx:latest nginx:dym

docker images | grep nginx

删除镜像:

docker rmi centos:latest

格式:docker rmi 仓库名称:标签

#删除镜像。如果标签是唯一的删除的是镜像。如果标签不是唯一的则是删除标签

docker rmi id号

格式:docker rmi 镜像ID号

#也可以根据id进行删除镜像

docker rmi -f ID号

#强制删除

docker rmi nginx:dym

#存储镜像:将镜像保存成为本地文件

docker save -o nginx nginx:latest

格式:docker save -o 存储文件名 存储的镜像

#存储镜像命名为nginx存在当前目录下

docker save -o /opt/nginx.tar nginx:latest

#指定路径保存docker的镜像。

#载入镜像:将镜像文件导入到镜像库中

格式:

docker load < 存储的文件

或者

docker load -i 存储的文件

docker load < nginx

上传镜像:

默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com

可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。

在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。

docker tag nginx:latest ddyymm/nginx:zyg

#添加新的标签时必须在前面加上自己的dockerhub的username

docker login

#登录公共仓库

Username:ddyymm

password:dym396396

docker push ddyymm/nginx:zyg

#上传镜像

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

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

格式:docker create [选项] 镜像

常用选项:

-i:让容器开启标准输入接受用户输入命令

-t:让 Docker 分配一个伪终端 tty

-it :合起来实现和容器交互的作用,运行一个交互式会话 shell

docker create -it nginx:latest /bin/bash

#查看容器的运行状态

docker ps -a

#-a 选项可以显示所有的容器

CONTAINER ID 5e2722993b57 #容器的ID号

IMAGE nginx:latest #加载的镜像

COMMAND "/docker-entrypoint...." #运行的程序

CREATED About a minute ago #创建时间

STATUS Created #当前的状态

PORTS #端口映射

NAMES focused_booth # 名称

#启动容器

格式:docker start 容器的ID/名称

docker start 5e2722993b57

docker run -itd --name test1 nginx:latest /bin/bash

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

#-it:形成交互式会话

#d:后台运行 /bin/bash

#--name:给容器命名

#nginx:1.22.0:镜像名称和标签,如果本地没有,可以自动下载

docker run -itd --name test2 nginx:latest

#如果不加/bin/bash。创建完成后会立刻关闭

#加了 /bin/bash 和-d后台运行后表示这个镜像则会不立刻关闭

#终止容器运行

格式:docker stop 容器的ID/名称

docker stop 71e217e50373

#容器的进入

需要进入容器进行命令操作时,可以使用 docker exec 命令进入运行着的容器。

格式:

docker exec -it 容器ID/名称 /bin/bash

-i 选项表示让容器的输入保持打开;

-t 选项表示让 Docker 分配一个伪终端。

#进入容器前,确保容器正在运行

#退出容器后,容器仍在运行

docker exec -it 71e217e50373 /bin/bash

docker run -it nginx bash

#不加 -d 选项会创建容器后直接进入容器进行交互,但是退出容器,容器也会停止

文件的导入和导出

touch zyg.txt

echo 123 > zyg.txt

docker cp zyg.txt 0d668d4d80c9:/opt/

#复制到容器中

docker cp 0d668d4d80c9:/opt/test.txt ~/abc123.txt

#从容器复制文件到主机

容器的导出和导入

容器的导出与导入

用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export 命令将已经创建好的容器导出为容器快照文件,无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。

docker export 3f883fcf4803 > nginx1.22.o.tar

#导出格式:docker export 容器ID/名称 > 文件名

docker export -o nginx.tar 2592d3fad0fb

cat centos7.tar | docker import - nginx:test

导入格式:cat 文件名 | docker import -- 镜像名称:标签

#导入后会生成镜像,但不会创建容器

docker import nginx.tar -- nginx:test

删除与批量删除容器

docker stop 2592d3fad0fb

格式:docker rm [-f] 容器ID/名称

#删除容器

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 stop

#批量删除容器

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

#删除所有容器

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

docker rm $(docker ps -a -q)

#批量清理后台停止的容器

docker images | awk 'NR>=2{print "docker rmi "$3}' | bash

#批量删除镜像

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

#删除none镜像

导出的容器还是一个镜像,必须要run create才能成为容器。

已经配置好的导出的容器镜像,可以直接使用(我们都是用的开发已经设置,配置好的容器镜像。)

docker的特性:即使在创建过程中报错,容器还是会被创建,但是这个容器不可用导入镜像,或者导入容器镜像,如果和已有标签重复,导入的镜像或者容器镜像, tag这一项就会变成none

相关推荐
群联云防护小杜15 分钟前
如何给负载均衡平台做好安全防御
运维·服务器·网络·网络协议·安全·负载均衡
PyAIGCMaster37 分钟前
ubuntu装P104驱动
linux·运维·ubuntu
奈何不吃鱼38 分钟前
【Linux】ubuntu依赖安装的各种问题汇总
linux·运维·服务器
aherhuo43 分钟前
kubevirt网络
linux·云原生·容器·kubernetes
zzzhpzhpzzz1 小时前
Ubuntu如何查看硬件型号
linux·运维·ubuntu
蜜獾云1 小时前
linux firewalld 命令详解
linux·运维·服务器·网络·windows·网络安全·firewalld
陌北v11 小时前
Docker Compose 配置指南
运维·docker·容器·docker-compose
只会copy的搬运工1 小时前
Jenkins 持续集成部署——Jenkins实战与运维(1)
运维·ci/cd·jenkins
catoop1 小时前
K8s 无头服务(Headless Service)
云原生·容器·kubernetes
娶不到胡一菲的汪大东2 小时前
Ubuntu概述
linux·运维·ubuntu