最近暂停了对SpringCloud的继续学习,是因为有人说SpringCloud脱离了docker,devops就像一道大餐没有加盐一样。有时候马不停蹄的去学习是为了想缩小与别人的差距,但是,个人觉得要学精一样东西,还是必须要学会一些辅助性或者基本的技能才行。好了,话不多说,这里就简单总结下自己学到的docker方面的内容
1.什么是docker
官方说docker是一个开源工程,可以将任何应用以轻量级容器的形式进行打包和发布。(有点抽象)
其实docker可以粗糙的理解为轻量级的虚拟机,但是它又不是虚拟机。
虚拟机是在宿主HostOS上有一个Hepervisor层上虚拟出硬件,在这个虚拟硬件上我们会安装独立的GuestOS,然后在里面运行各种各样的程序。
docker和虚拟机不一样的是,它有一层Docker Engine,它很好的利用了Host OS里面的namespace,然后将应用程序分离,因为没有虚拟层这一层,所以它的运行速度比虚拟机快,启动成本也比虚拟机快很多,这就是docker为什么深受青睐的原因
2.docker的架构
docker架构DOCKER_HOST是我们进行docker操作的虚拟机,在这里运行了一个叫做Docker daemon的核心程序,通过它可以下载镜像,运行容器。那么我们如何与这个Docker daemon进行交互呢?通过Client的命令与之交互(很废话~)。最右边的Registry是提供镜像的地方,所有的用户都可以在这上面拉取镜像,或者是放镜像上去。
docker架构2
3.docker的hello world
3.1启动docker daemon进程
service docker start
3.2拉取一个ubuntu镜像
sudo docker pull ubuntu
3.3运行ubuntu镜像,并输出一个hello docker
docker run ubuntu echo hello docker
大家可以想象下,如果没有docker,我们启动一个虚拟机,然后打印一个hello docker要耗费多长时间现在有了docker可以说是非常的方便。
3.4docker images展示目前所有下载的镜像
3.5docker ps展示docker目前运行的进程
4.利用docker玩转Nginx
4.1docker run -p 8080:80 -d nginx运行nginx,将80端口映射为8080端口,-d是后台运行的意思
4.2docker cp index.html 1e3533e84086://usr/share/nginx/html将一个静态页面放入到容器中
4.3docker stop 1e3533e84086
当我们stop掉,再次启动nginx的时候,我们会发现之前放进去的页面失效了。
4.4docker commit -m 'fun' ce54f745d1c3 可以通过这个命令提交我们的改动,也可以写成docker commit -m '随便写' ce54f745d1c3 nginx-fun,指定一个名字,可以通过docker images看到nginx-fun,否则看到的是none
4.5docker rmi 120f1ee8f07b删除掉不需要的镜像
4.6docker ps -a可以展示历史进程
4.7docker rm ce54f745d1c3 1e3533e84086删掉历史进程(可以删除多个)
docker命令小结2
5.dockerfile介绍
之前我们通过commit创建了一个新的镜像,这里我们用dockerfile来生成新的镜像
5.1新建一个dockerfile
FROM ubuntu
MAINTAINER zzm
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nginx
COPY index.html /var/www/html
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
EXPOSE 80
5.2创建新镜像
docker build -t zzm/hello-nginx .
5.3运行新镜像
docker run -d -p 80:80 zzm/hello-nginx
dockerfile语法小结
dockerfile语法小结
详细的dockerfile语法可以见Docker Dockerfile 定制镜像
6.volume介绍
6.1定义:提供独立于容器之外的持久化存储
6.2作用:我们知道docker容器里面是不会保存任何东西的,但是如果我们的容器里面用的数据库想要保存数据信息该怎么办呢?这个时候volume的作用就非常大了,通过它可以挂载容器之外的一些目录或磁盘,这样在容器之外修改了相应的内容,容器内部还是能感知到的。
7.镜像仓库
image.png与Registry之间的交互
image.png
8.容器app
关于docker-compose的优缺点,大家可以看看这篇文章:
docker compose
image.png
网友评论