Docker基本管理和应用

Docker基本管理和应用
1、概念
docker是一个开源的应用容器引擎,基于go语言开发的

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

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

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

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

2、容器化的特点
1.1 灵活,最复杂的程序也可以实现容器化

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

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

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

1.5 可扩展,依赖于k8s

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

3、docker和虚拟机的区别

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

docker如何做到资源隔离?

linux的命令空间(面试题)

4、docker使用内核技术的两个重要技术
1.1 namespace,实现资源隔离

1.2 cgroup,资源限制

资源隔离:linux有6项隔离

4.1 namespace 命令空间
1.1 UTS 主机名与域名 通过在UTS命令空间创建进程,这个进程可以看到自己的主机名和域名,与宿主机的其他进程进行分割

1.2 IPC 信号量,消息队列,共享内存,进程拥有独立的通信资源,不受其他的进程影响。

1.3 PID 进程编号,每个进程在系统中都有唯一标识,唯一标识就是pid,使用不同的pid,保证进程之间不发生冲突

1.4 network 网络设备,网络端口等等,在network空间中,每个进程都有自己独立的端口号,靠端口号可以实现网络访问的隔离

1.5 mount 挂载点(文件系统),每个进程使用不同的文件系统挂载点,不同的mount的文件系统互不干扰

1.6 user 用户和用户组,在user空间当中,每个进程都有独立的用户和用户组,每个用户之间可以互相不受影响

5、docker的核心概念
1.1 镜像

镜像是创建容器的基础,类似虚拟机的快照,通过这个快照可以快速的创建一个容器,在镜像当中,已经封装好了程序运行需要的代码,库,运行时间,环境变量以及配置文件。

1.2 容器

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

1.3 仓库

保存镜像的地方,公有仓库(docker、hub、阿里云)私有仓库(不对外提供访问,自己使用)

工作流程:

内存60g 4核 8g

6、Docker安装

systemctl stop firewalld
setenforce 0

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
docker version    # 查看版本
docker info    # 查看信息

mkdir -p /etc/docker

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

systemctl daemon-reload
systemctl restart docker


docker pull nginx

vim /etc/docker/daemon.json

{

	"registry-mirrors": ["https://hub.littlediary.cn/"]

}
wq!

systemctl daemon-reload
systemctl restart docker

docker pull nginx

docker pull centos:7

docker pull nginx:1.18

docker pull nginx:1.22

# docker pull 指定往下拉取镜像

docker images  # 查看镜像
docker inspect 镜像名/imageid号 # 查看镜像的详细信息

7、查看镜像的详细信息

docker images  # 查看镜像
docker inspect 镜像名/imageid号 # 查看镜像的详细信息

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

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

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

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

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

8、如何删除镜像?

docker rmi -f 镜像名+标签
docker rmi -f imageid号
# 如果不加 -f 镜像被容器使用且容器正在运行,删除不了。

9、如何给镜像重新打标签?

docker tag nginx:1.18 nginx:web
# imageid一样,删除imagerid全部删除,指定镜像名删除则删除镜像

10、镜像导出

docker save -o /opt/nginx:1.18.tar nginx:1.18
# 把nginx:1.18 这个镜像导出到opt目录,保存成文件名nginx:1.18.tar

11、镜像导入

方法一:docker load -i /opt/nginx:1.18.tar

方法二:docker load < nginx:1.18.tar

12、上传镜像(需加速器)

docker login    # 先登录
docker push pplok1230/nginx:test1    # 再push

13、容器操作(前提:镜像)

docker iamges
docker create -it 镜像名可加tag名   
# create -it 创建容器
# -i 容器和用户之间可以进行交互
# -t 开启一个伪终端,让用户操作
# -it 开启一个终端,让用户可以用交互式会话访问容器,进行操作

docker ps -a    # a表示所有

CONTAINER ID:容器的唯一标识
IMAGE:容器所依赖的镜像
COMMAND:容器默认运行的命令
CREATED:容器的创建时间
PORTS:容器暴露的端口
NAMES:容器的名称,系统随机分配,也可以指定容器的名称
status:创建成功,不是运行。Up表示运行,Exite表示停止运行,Created表示创建成功

docker start 名称/cotainer id
docker stop 名称/cotainer id

容器的生命周期:

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

13.1创建容器

docker create -it 镜像名可加tag名 

13.2 查看容器

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

docker ps  # 只查看运行的容器

13.3 docker run命令

docker run    # 本地没有的镜像,会自动拉取,然后再运行

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

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

docker run -itd --name test1 centos:7 /bin/bash
# -itd 交互且后台运行
# --name test1(名称) 指定名称就不会系统出现的名称
# centos:7 指定镜像
# /bin/bash 运行的命令,始终以/bin/bash运行

13.4 进入容器内部查看

方法一:docker exec -it 容器名称/容器的id /bin/bash

方法二:docker exec -it 容器名称/容器的id bash

exit  # 退出命令

修改nginx页面:echo hello > /usr/share/nginx/html/index.html  # 在容器内修改

13.5 查看容器的ip地址
第一步:看宿主机,ifconfig

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名/容器的id
进入容器的network命令空间,获取ip地址

13.6 查看容器的内部日志

docker logs -f 容器名

13.7 访问获取的ip地址

curl 获取ip地址
# 如果创建容器,默认命令以/bin/bash结尾,则无法访问获取的IP地址
解释:
创建的时候会有一个默认的输出或者指令
nginx    运行nginx
/bin/bash--------> 默认的执行的命令覆盖,虽然nginx在运行,但是运行的不再是nginx的进程,而是/bin/bash

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

docker run -itd --name 指定名字 -P nginx:1.22    
# 随机指定宿主机的端口和容器的端口进行映射,端口号从32768开始

docker run -itd --name 指定名字 -p 81:80 nginx:1.22  
# 前一个是宿主机,后一个是容器的的端口

浏览器访问:宿主机ip:32768/81   # 即可访问容器nginx的web页面

13.9 如何把宿主机的文件复制到容器?
(面试会问:怎么把容器复制文件?怎么把容器的文件复制出来?)

宿主机到容器:
(1):echo "this is nginx-docker " > /opt/index.html   # 非必要,路径可以任意指定
(2):docker cp /opt/index.html 已存在的指定名字/容器id:/usr/share/nginx/html/
# 把宿主机的index.html复制到容器

容器到宿主机:
docker cp 已存在的指定名字/容器id:/etc/nginx/nginx.conf /opt/  
# 把容器中的nginx.conf复制到宿主机的/opt目录下

13.10 导出、导入容器

导出容器:docker export -o /opt/自定义名.tar 容器名/容器id

导入容器:docker import 上面的自定义名.tar -- 程序名:tag

13.11 删除容器

docker rm -f 容器名1 容器名2

总结
1、6个命名空间隔离
2、docker pull nginx:1.22
3、查看镜像 docker images
4、上传镜像 docker pull
5、docker run -itd --name xxx -p 81:80 nginx:1.22 /bin/bash
6、查看日志 docker logs -f
7、获取容器的ip地址 docker inspect -f ‘{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ nginx1
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
inx1
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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值