docker的基本管理和应用

docker是什么?

docker是一个开源的应用容器引擎,基于GO语言开发的。

docker试运行在linux的容器化工具,可以理解为轻量级的虚拟机。

可以在任何主机上轻松创建的一个轻量级,可移植的,自给自足的容器。

 

鲸鱼-------------------宿主机

集装箱----------------独立运行的容器,相互隔离的容器(一个容器就是一个独立运行的应用程序)


容器化的特点:

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

2、轻量级 容器利用和共享主机内核

3、可互换,可以即时部署升级,即时更新

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

5、可扩展(依赖于k8s)

容器实在linux上运行,与其他容器共享主机内核以及主机的资源,独立运行,相互隔离的进程(应用程序)

轻量级的,容器运行时占用一定的资源,但是不占用其他任务的资源。

docker和虚拟机之间的区别

docker虚拟机
启动速度秒级分钟级
计算能力损耗几乎没有损耗50%
性能接近原生性能只有80%
系统支持数据上千个(理论上)几十个
隔离性资源隔离完全隔离
安全性安全性差安全性高

 linux命令空间 (面试题)

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

一、namespace实现资源隔离

二、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的文件系统:

overlayFS 联合文件系统,用于docker等容器技术之中

把多个文件系统层叠在一起,形成一个统一的文件系统

LowerDir:底层目录

包含的底层文件系统,容器运行的基础环境的文件系统,根文件系统

UpperDir:可写层

容器可以在底层文件系统的基础之上进行修改,即容器内部发生的写作,这些修改不影响底层的文件系统

达到容器内容的可写性

MergedDir:合并目录

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

WorkDir:工作目录

处理文件系统的变更,当容器内部进行写处理时,由workdir进行处理

 


docker的基本命令

容器操作,前提必须要有镜像

docker images      查看拉取的镜像

docker tag       给镜像打标签

docker create -it nginx:1.22     创建容器

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

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

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

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

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

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE        COMMAND                   CREATED          STATUS    PORTS     NAMES
d72df17d92a0   nginx:1.22   "/docker-entrypoint.…"   11 seconds ago   Created             affectionate_boyd

CONTAINER ID      容器所依赖的唯一标识

IMAGE                    容器所依赖的镜像

command                容器默认运行的命令

CREATED               容器的创建时间

ports                        容器暴露的端口

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

status                      创建成功, 不是运行,Up:表示运行状态,Exited:停止运行

                                Create:创建成功

 docker start affectionate_boyd    启动容器后面跟上容器的名称

 docker rmi -f +images id         删除镜像

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

docker save -o /opt/nginx1.18.tar nginx:1.18         把nginx:1.18这个以.tar格式保存在opt里面

docker load -i               导入镜像

 

容器的生命周期:

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

docker run(最常用的命令)

特点:本地没有的镜像会自动拉取然后再运行

容器内部如果没有命令执行,容器会自动终止运行,如果有命令执行完指定命令之后,容器也会终止运行

容器要长期运行,稳定运行,必须要有一个执行的可执行命令

docker run -itd --name test1 centos:7 /bin/bash

                          指定容器名称  镜像   

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

 

进入容器内部查看:

docker exec -it 容器名称/容器的id /bin/bash bash

 进入容器的network命令空间,获取他的ip地址

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}} +容器名/id

创建一个nginx1的容器

docker run -itd --name nginx1 nginx:1.22

 查看一下容器表

进入容器

容器相当于在系统中又装了一个精简的系统

docker logs -f +容器名        获取容器的日志

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

nginx 运行nginx

/bin/bash--------------->默认的执行的命令被覆盖,虽然nginx在运行,但是运行的不再是nginx的进程,而是/bin/bash

端口映射:

本地端口和容器端口进行映射

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

docker run -itd --name nginx2 (容器名)-P nginx:1.22 (镜像)

-p 指定宿主机的端口和容器的端口进行映射 宿主机端口号只要没有被占用都可以使用

docker run -itd --name nginx3 (容器名)-p 81:80 nginx:1.22(镜像)

                                                                 指定端口

 前一个是宿主机的端口后面一个是容器的端口

 

 

 

 

如何把宿主机的内容复制到容器里面(面试题)

docker cp /opt/index.html +容器名 :/usr/share/nginx/html

相反如果要把容器的内容复制到主机只需把位置对调一下就行了

docker save -o /opt/nginx.tar nginx:1.22        把镜像保存为.tar格式的文件

docker load -i /opt/nginx.tar                           从指定的文件加载镜像

docker export -o nginx.tar +id号        导出容器

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

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 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总结

1、6个命令空间隔离
2、docker pull nginx:1.22    拉取镜像
3、docker images     查看镜像
4、docker push      上传   
5、docker run -itd --name xxx -p 81:80 nginx:1.22 /bin/bash   端口映射
6、docker logs -f 查看日志
7、docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nginx1 获取容器的ip地址
8、docker cp /opt test1:/opt          宿主机到容器
     docker cp test1:/opt /opt              容器到宿主机
9、docker save -o /opt/nginx.tar nginx:1.22        把镜像保存为.tar格式的文件
      docker load -i /opt/nginx.tar       从指定的文件加载镜像
10、docker export -o nginx7.tar 容器名/容器id      导出
docker import nginx7.tar -- nginx:7            导入
11、删除镜像 docker rmi -f
       删除容器 docker rm -f

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值