文章目录
- 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 load -i:导入镜像
docker run -d(此参数表示打入后台)-p 80:80(第一个80为主机(宿主)端口,第二个80为容器端口)运行docker
接着执行如下命令:
docker run -d --name demo -p 80:80 game2048
打开浏览器输入本机ip:80 可以发现游戏服务器搭建成功!
哭了,在网上找了半天没有找到能用的2048代码😭
找到解决办法:使用docker pull得到马里奥代码(下文会介绍)
成功!
镜像的详细分析
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包,第一个是官方发行版,后面都是个人上传的。
可以发现nginx有很多层,latest表示最新版(如不指定则为默认)。
在一台主机上可以使用不同的操作系统,而内核是一样的。
commit命令表示从当前容器中提交一个新版本(从读写层提交到镜像层中,便于保存),-m表示描述。
与之前相比多出了一层
对比发现,V2在V1的基础上再加一层。