文章目录

  • docker简介
  • docker镜像
  • docker镜像的特点
  • 镜像的构建
  • 镜像的部署
  • 镜像的详细分析


docker简介

  • Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
  • docker和vm的区别
    物理机提供硬件资源,普通虚拟机分隔的空间,每个空间都包含独立的子操作系统,但是使用Docker分隔空间,操作系统是共享的,不需要虚拟化N个操作系统。
  • docker容器的优势
  • docker是如何工作的

docker镜像

docker镜像的特点

  • 共享宿主机的kernel
  • base镜像提供的是最小的Linux发行版
  • 同一docker主机支持运行多种Linux发行版
  • 采用分层结构的最大好处是:共享资源
  • Copy-on-Write 可写容器层
  • 容器层以下所有镜像层都是只读的
  • docker从上往下依次查找文件
  • 容器层保存镜像变化的部分,并不会对镜像本身进行任何修改
  • 一个镜像最多127层

镜像的构建

  • docker commit 构建新镜像三部曲
    (1)运行容器
    (2)修改容器
    (3)将容器保存为新的镜像
  • 缺点
    (1)效率低、可重复性弱、容易出错
    (2)使用者无法对镜像进行审计,存在安全隐患

镜像的部署

1.编写docker-ce.repo文件
vim docker-ce.repo
[docker]
name=docker-ce
baseurl=https://download.docker.com/linux/centos/7/x86_64/stable/
gpgcheck=0

2.安装docker-ce
yum install -y docker-ce(注意下面安装的20.10.8版本在后续做实验中报错,因此我们还是使用20.10.2版本)
yum -y install docker-ce-20.10.2-3.el7
注意:下面做实验出现的问题完全可以通过安装centos源搞定
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
:%s/$releasever/7/g

3.启用docker
systemctl enable docker --now

4.安装自动补齐工具
yum install bash-*

5.查看docker
docker
docker info
注意:如果出现warning的话执行以下步骤
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
cd /etc/sysctl.d
vim docker.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
sysctl  --system

6.导入镜像或拉取网上镜像
docker search mario
docker pull kaminskypavel/mario

7.查看镜像并运行镜像
docker images
docker run -d --name demo -p 80:8080 kaminskypavel/mario

8.测试
在浏览器输入ip查看

docker 纯系统 docker里面有没有系统_docker 纯系统


docker 纯系统 docker里面有没有系统_nginx_02


docker 纯系统 docker里面有没有系统_docker 纯系统_03


docker 纯系统 docker里面有没有系统_docker 纯系统_04


docker 纯系统 docker里面有没有系统_nginx_05


docker 纯系统 docker里面有没有系统_运维_06


docker 纯系统 docker里面有没有系统_linux_07


docker 纯系统 docker里面有没有系统_运维_08


docker 纯系统 docker里面有没有系统_docker 纯系统_09


docker 纯系统 docker里面有没有系统_运维_10


docker 纯系统 docker里面有没有系统_linux_11


安装自动补齐工具

docker 纯系统 docker里面有没有系统_docker_12


docker 纯系统 docker里面有没有系统_linux_13


docker 纯系统 docker里面有没有系统_nginx_14


docker load -i:导入镜像

docker run -d(此参数表示打入后台)-p 80:80(第一个80为主机(宿主)端口,第二个80为容器端口)运行docker

docker 纯系统 docker里面有没有系统_docker 纯系统_15


接着执行如下命令:

docker run -d --name demo -p 80:80 game2048

打开浏览器输入本机ip:80 可以发现游戏服务器搭建成功!

哭了,在网上找了半天没有找到能用的2048代码😭

找到解决办法:使用docker pull得到马里奥代码(下文会介绍)

docker 纯系统 docker里面有没有系统_docker_16


docker 纯系统 docker里面有没有系统_nginx_17


docker 纯系统 docker里面有没有系统_linux_18


成功!

docker 纯系统 docker里面有没有系统_docker 纯系统_19

镜像的详细分析

1.docker search nginx

2.docker pull nginx

3.docker images

4.docker history nginx:latest

5.内核测试
docker pull busybox
uname -r
docker run -it --name test busybox
uname -r

6.增加images层数
docker history busybox
docker run -it --name test busybox
touch file1
touch file2
.....
touch file5
exit
docker commit -m "V1" test demo:V1
docker images
docker history demo:V1

7.不管容器内文件个数是否与原来一致,只要有改动,层数就会加一。
docker run -it --name test demo:V1
ls
rm -fr file1
rm -fr file2
touch file6
touch file7
ls
exit
docker commit -m "V2" test demo:V2
docker rm test
docker run -it --name test demo:V2
ls
exit
docker history demo:V2
docker history demo:V1

下图可以看到有很多nginx包,第一个是官方发行版,后面都是个人上传的。

docker 纯系统 docker里面有没有系统_docker_20


可以发现nginx有很多层,latest表示最新版(如不指定则为默认)。

docker 纯系统 docker里面有没有系统_nginx_21


docker 纯系统 docker里面有没有系统_运维_22


在一台主机上可以使用不同的操作系统,而内核是一样的。

docker 纯系统 docker里面有没有系统_nginx_23


commit命令表示从当前容器中提交一个新版本(从读写层提交到镜像层中,便于保存),-m表示描述。

docker 纯系统 docker里面有没有系统_docker 纯系统_24


与之前相比多出了一层

docker 纯系统 docker里面有没有系统_运维_25


docker 纯系统 docker里面有没有系统_docker_26


对比发现,V2在V1的基础上再加一层。

docker 纯系统 docker里面有没有系统_linux_27