docker基本管理和应用:

docker基本管理和应用:

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

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

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

鲸鱼————宿主机

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

容器化的特点:

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

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

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

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

5、可扩展,依赖于k8s

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

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

docker和虚拟机之间的区别:

docker虚拟机
启动速度秒级分钟级
计算能力几乎没有损耗50%
性能接近原生性能只有80%
系统支持数量上千个(理论上)部署也就几十个
隔离性资源隔离完全隔离
安全性安全性差安全性高
面试题
linux的命令空间

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

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 阿里云)。

私有仓库。不对外提供访问,自己使用。

[root@docker1 ~]# docker version        #查看docker的版本
[root@docker1 ~]# docker info 
[root@docker1 ~]# docker pull nginx:1.22    #下载镜像并指定版本
[root@docker1 ~]# docker images         #查看安装的镜像
[root@docker1 ~]# docker rmi -f a72860cb95fd
#如果不加-f,镜像被容器使用,且容器正在运行,-f才能删除
​
#将nginx:1.18重新打一个标签,标签名为nginx:web
[root@docker1 ~]# docker tag nginx:1.18 nginx:web
​
#把ngixn:1.18这个镜像导出opt目录,保存成文件名,nginx1.18.tar
[root@docker1 ~]# docker save -o /opt/nginx1.18.tar nginx:1.18
​
#存入镜像的两种方法
[root@docker1 opt]# docker load -i nginx1.18.tar
[root@docker1 opt]# docker load < nginx1.18.tar
​
#将存入的镜像上传仓库
[root@docker1 ~]# docker login          #先登录仓库,在上传仓库
[root@docker1 ~]# docker push pplok1230/nginx:test1 
​
#根据容器的名称或id进行启动
[root@docker1 opt]# docker start 容器名/容器id
​
#根据容器的名称或id进行停止
[root@docker1 opt]# docker stop 容器名/容器id
​

docker的文件系统:

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

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

LowerDir:底层目录

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

UpperDir:可写层

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

达到容器内容的可写性

MergedDir:合并目录

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

WorDir:工作目录

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

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

[root@docker1 ~]# docker create -it nginx:1.18 
edbb0dca4212af4ecce5eedb434016b442033f93b27c4a67015310fe6024ddeb

创建容器

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

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

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

[root@docker1 ~]# docker ps -a
CONTAINER ID   IMAGE        COMMAND                   CREATED         STATUS    PORTS     NAMES
edbb0dca4212   nginx:1.18   "/docker-entrypoint.…"   9 seconds ago   Created             eloquent_gagarin
​
#根据容器的名称或id进行启动
[root@docker1 opt]# docker start 容器名/容器id
​
#根据容器的名称或id进行停止
[root@docker1 opt]# docker stop 容器名/容器id

CONTAINER ID: 容器的唯一标识

IMAGE: 容器所依赖的镜像

COMMAND: 容器默认运行的命令

CREATED: 容器的创建时间

STATUS: 创建成功,不是运行。up,表示运行状态,Exited:停止运行 Created:创建成功

PORTS: 容器暴露的端口

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

容器的生命周期:

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

[root@docker1 ~]# docker ps -a      #查看所有的容器,包括未运行的容器
[root@docker1 ~]# docker ps         #只查看运行起来的容器
[root@docker1 ~]# docker run        #本地没有的镜像他会自动拉取,然后再运行。

容器内部如果没有命令执行,容器会自动终止运行

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

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

-itd

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

进入容器内部查看:
docker   exec   -it    容器名/容器的id  /bin/bash bash        #这个容器必须是开启的状态

第一步:
[root@docker1 ~]# docker run -itd --name nginx1 nginx:1.22
​
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'  nginx1
#进入容器的network命令空间,获取他的ip地址。

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

nginx 运行nginx

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

第二步:

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

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

[root@docker1 opt]# docker run -itd --name nginx3 -P nginx:1.22

-p 指定宿主机的端口和容器的端口进行映射,端口号指定的宿主机的没有被占用的端口

[root@docker1 opt]# docker run -itd --name nginx4 -p 81:80 nginx:1.22

面试题:

怎么向容器中复制文件?

#往容器里复制内容
[root@docker1 opt]# docker cp /opt/index.html nginx3:/usr/share/nginx/html

怎么把容器的文件复制出来

[root@docker1 opt]# docker cp 69fa1a30591d:/etc/nginx/nginx.conf /opt/ 

将容器完整的导出

[root@docker1 opt]# docker export -o /opt/nginx7.tar 8e07049e103b

删除容器

[root@docker1 opt]# docker rm -f 容器名/容器id

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)        #批量清理后台停止的容器

总结:

1、6个命名空间隔离

2、docker pull nginx:1.22 #下载镜像,不加标签,默认下载最新版

3、docker images #查看镜像

4、docker push #上传镜像

5、docker run -itd --name xxx -p 81:80 nginx1.22 /bin/bash #创建一个指定端口映射的容器

6、docker logs -f #查看容器的日志

7、docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名/容器id #获取容器的IP地址

8、docker cp /opt test1:/opt #宿主机到容器

docker cp test1:/opt /opt #容器到宿主机

9、docker save -o /opt/nginx.tar nginx:1.22 #导出镜像

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值