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

相关推荐
Harbor Lau6 分钟前
Linux常用中间件命令大全
linux·运维·中间件
漫谈网络24 分钟前
基于 Netmiko 的网络设备自动化操作
运维·自动化·netdevops·netmiko
꧁坚持很酷꧂1 小时前
Linux Ubuntu18.04下安装Qt Craeator 5.12.9(图文详解)
linux·运维·qt
时迁2471 小时前
【k8s】k8s是怎么实现自动扩缩的
云原生·容器·kubernetes·k8s
小诸葛的博客2 小时前
详解Linux中的定时任务管理工具crond
linux·运维·chrome
一默19912 小时前
CentOS 7.9升级OpenSSH到9.9p2
linux·运维·centos
BranH3 小时前
Linux系统中命令设定临时IP
linux·运维·服务器
极小狐4 小时前
极狐GitLab 项目功能和权限解读
运维·git·安全·gitlab·极狐gitlab
宁酱醇4 小时前
GitLab_密钥生成(SSH-key)
运维·ssh·gitlab
秋风起,再归来~4 小时前
【Linux庖丁解牛】—进程优先级!
linux·运维·服务器