docker基本管理和应用

目录

概念

资源隔离

docker的安装

*docker的基本命令

*容器操作

端口映射


概念

docker是一个开源的应用容器引擎,它是基于go语言开发的。docker是运行在linux的容器化工具,可以理解为轻量级的虚拟机。docker是可以在任何主机上,轻松创建的一个轻量级、可移植的自给自足的容器。

图标设计理念:

鲸鱼——宿主机

集装箱—— 一个一个独立运行的容器,而且是相互隔离的容器,可以理解为一个容器就是一个独立运行的应用程序

容器化的特点:

1.灵活:最复杂的程序也可以实现容器化

2.轻量级 :容器它是利用和共享主机内核

3.可互换 :可以及时部署升级,及时更新

4.便携性:可以在本地构建,也可以部署到云,可以在任何地方运行

5.可扩展(依赖于k8s)

容器是在linux上运行的,与其他容器共享主机内核以及主机的资源,独立运行、相互隔离的进程(应用程序),而且是轻量级的。容器运行时占用一定的资源,但是不占用其他任务的资源。

docker和虚拟机之间的区别?

                                  docker                          虚拟机

启动速度                     秒级                            分钟级

计算能力损耗           几乎没有                        损耗50%

性能                          接近原生性能                只有80%

系统支持的数量     上千个(理论上)           部署也就几十个

隔离性                       资源隔离                       完全隔离

安全性                      安全性差                        安全性高

由于docker安全性能差,所以docker一般用于公司内部

面试题:docker怎么实现资源隔离?

答:通过Linux的命令空间

docker使用Linux内核技术的两个重要的技术:

1.namespace 实现资源隔离

2.cgroup  资源限制

资源隔离

Linux有6项隔离,又叫namespace 命令空间:

1.UTS   隔离的是主机名和域名 :通过在UTS命令空间创建进程,这个进程可以看到自己的主机名和域名,与宿主机的其他进程进行分割。

2.IPC  隔离的是信号量、消息队列、共享内存:进程可以拥有独立的通信资源,不受其他的进程影响。

3.PID  隔离的是进程编号:每个进程在系统重都有一个唯一标识,唯一标识就是pid,靠的是使用不同的pid来保证进程之间不发生冲突。

4.network  隔离的是网络设备、网络端口等:在network命令中间当中,每个进程都有自己独立的端口号,靠端口号可以实现网络访问的隔离。

5.mount  隔离的就是挂载点(文件系统):每个进程使用不同的文件系统挂载点,使得不同mount的文件系统互不干扰。

6.user  隔离的是用户和用户组:在user中间当中,每个进程都有独立的用户和用户组,每个用户之间可以互相不受影响。

docker的核心概念:

1.镜像:创建容器的基础,类似虚拟机的快照,通过这个快照可以快速的创建一个容器。

在镜像当中,已经封装好了程序运行需要的代码、库、运行时间、环境变量以及配置文件。

2.容器:基于镜像运行起来的进程就是容器,容器之间互相独立,互相隔离。

3.仓库:用来保存镜像的地方。仓库分为两种:公有仓库(docker hub 、阿里云)私有仓库(不对外提供访问,公司内部使用)

工作流程:

docker的安装

步骤

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

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

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

systemctl restart docker

systemctl enable docker

镜像加速器

mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://idhvn1su.mirror.aliyuncs.com"] } EOF

systemctl daemon-reload

systemctl restart docker

如果不能拉取镜像

vim /etc/docker/daemon.json

修改里面的地址

*docker的基本命令

docker version  查看docker版本

docker info   查看docker信息

docker pull nginx 拉取nginx的镜像

docker images  查看当前系统拉下的镜像

docker inspect  image id号 根据镜像id查看镜像的详细信息

docker rmi -f nginx:1.22/ image id号 删除镜像

如果镜像被容器使用,且容器正在运行,只有加-f 才能删除

docker tag nginx:1.18 nginx:web 给镜像重新打标签

docker save -o /opt/nginx1.18.tar nginx:1.18 把nginx1.18这个镜像导出到opt目录下,保存成nginx1.18.tar

docker load -i nginx1.18.tar  /  docker load < nginx1.18.tar 导入nginx1.18.tar到docker

docker login 登录仓库

*容器操作

(前提必须要有镜像)

docker create -it nginx:1.18   创建容器

-i :容器和用户之间可以进行交互

-t:开启一个伪终端,供用户操作

-it:开启一个终端,让用户可以用交互式会话访问容器,进行操作。

docker ps -a 查看所有容器,包括未运行的容器

docker ps  只查看运行起来的容器

docker start id号/名称 开启容器

docker run -it centos:7  本地没有的镜像它会自动拉取然后再运行

注:容器内部如果没有命令执行,容器会自动终止运行;如果有命令,执行完指定命令之后,容器也会终止运行。也就是容器要长期运行,稳定运行,必须要有一个执行的可执行命令。

docker run -itd --name test1 centos:7 /bin/bash   指定容器后台运行

d:后台运行,指定后台运行的命令,这样我们创建完整之后,即便是有-it,也不会进入容器而是停留在宿主机的界面。

docker exec -it 容器名称/容器id  /bin/bash  进入容器内部

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'  nginx1 查看容器的ip地址

'{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'  进入容器的network命令空间,获取它的ip地址

docker logs -f 查看docker日志

docker run -itd --name nginx3 -p 81:80 nginx:1.22 /bin/bash

面试题:怎么向容器中复制文件/ 怎么把容器的文件复制出来?

docker cp /opt/index.html nginx7:/usr/share/nginx/html/    宿主机往容器复制

docker cp nginx6:/etc/nginx/nginx.conf   /opt     从容器往宿主机复制

docker export -o /opt/nginx7.tar 容器名/容器id  把容器导出 

docker import nginx7.tar  -- nginx:7 把容器导入

docker rm -f nginx1 nginx2 nginx3 删除容器 (需要先删容器再删镜像)

docker run -itd --name nginx1 -p 81:80 nginx:1.22 nginx -g  'daemon off;'

nginx -g  'daemon off;'  =  /bin/bash

补充:

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 -f

docker 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 run -itd --name nginx5 -P nginx:1.22

-P 随机指定宿主机的端口和容器的端口进行映射  端口号从32768开始

docker run -itd --name nginx6 -p 81:80 nginx:1.22

注:81端口是宿主机的端口;80是容器的端口

docker的文件系统:

overlayFS 联合文件系统:用于docker等容器技术之中。它是把多个文件系统层叠在一起,形成一个统一的文件系统。

LowerDir  底层目录:包含的底层文件系统,也是容器运行的基础环境的文件系统,是根文件系统

UpperDir  可写层:容器可以在底层文件系统的基础之上进行修改,即容器内部发生的写操作。这些修改不影响底层的文件系统。目的是达到容器内容的可写性。

MergedDir  合并目录 :把底层目录和可写层目录以及其他目录组成联合视图,也就是容器使用的文件系统。

WorkDir  工作目录:处理文件系统的变更,当容器内部进行写处理时,由workdir进行处理。

CONTAINER ID:容器的唯一标识

IMAGE:容器所依赖的镜像

COMMAND:容器默认运行的命令

CREATED:容器的创建时间

PORTS:容器暴露的端口

NAMES:容器的名称,系统随机分配的,也可以指定容器的名称

STATUS:创建成功,不是运行。up表示运行状态;exited表示停止运行;created表示创建成功

容器的生命周期:

拉取镜像——创建容器——修改镜像——重启容器——停止容器——删除容器——删除镜像

注意点:

创建的时候会有一个默认的输出或者指令

以nginx为例  要运行nginx

在创建的时候加上/bin/bash——默认的执行命令覆盖,虽然nginx在运行,但是运行的不再是nginx的进程,而是/bin/bash

容器要保持一直运行,必须要指定有一个运行的程序。nginx镜像当中声明好了运行程序

nginx -g "daemon off;" 保持nginx一直在后台运行

-itd 不加d 就是前台运行展示运行结果

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值