Docker入门

Docker是什么?

它是一个工具,容器和docker是两个东西,docker是控制容器的工具,docker是在容器领域创建出比较新颖的概念,叫镜像仓库及镜像。

容器是利用逻辑(想象力)形成一个分区。比如:在一个小方盒里,比内存的一部分,cpu的一部分给你,磁盘,网络的使用权限,再给提供你一些初始化文件,形成了一个类似于虚拟机的东西,我们把他称为进程。

在容器中所解决掉的一些问题就是统一研发环境(开发环境,测试环境及生产环境)

1.它可以统一我们的环境,因为使用的是镜像,一次构建处处运行

2.容器在产生的时候强烈依靠我们的Cgroups 和 namespaces这两个内核上的功能,给我们创建出来的容器上的密闭空间。是使用的Cgroups 和 namespaces内核上的功能给我们产生的进程的隔离空间。

明确容器是怎么样被docker创建出来的?

就是docker在其底层遍好的一些程序去控制Cgroups 和 namespaces,去做出来的一个隔离的进程空间,在该空间中,将我们镜像中的一些最小的运行环境文件拷贝到该进程空间中,形成了一个东西叫容器,里面可以运行出一个nginx,而我们的操作系统中所开辟的容器进程其内部的nginx进程叫做其子进程是它的儿子。该容器不怎么工作,但容器里的子进程是工作的,它只负责资源的调度和调配。这就是容器底层的一些东西。

Cgroups专门限制容器能够调用宿主机中cpu多长时间,调用内存中多大的空间,以及使用网络的流量还有磁盘占多大的空间。Cgroups是做底层的资源限制使用。

Namespaces:叫做名称空间,在操作系统中,经常会看到pid,由于在容器中产生的nginx进程,容器里面没有root产生的nginx进程,在容器内部nginx进程就是一号进程,而在操作系统中一号进程是root产生的systemd,0号进程是内核。Namespaces就是让进程的pid号不能暴露到容器里面去,宿主机里面看到容器就是一个pid为多少的进程,空间是拿Namespaces直接框起来的。

Docker部署及配置

部署比较简单,直接从yum源里下载docker的安装仓库,安上就好了。

官方推荐的部署方式是yum,没有源码安装。docker是一个守护型的进程,安装完毕要把docker的进程开启来。能够很好的去控制容器的在线运行,毕竟是运行进程出来,该容器的进程必须受管于docker的守护进程,会去控制它整个运行的生命周期。

环境准备

准备一台新机器,配置2G就可以。

方法一

docker.com    docker的官网

 桌面版的,图形化太low了,还不适合自动化

方法二

http://mirrors.ustc.edu.cn/

 点docker-ce 找docker的仓库

 

 

 [root@docker ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo     下载

修改-点击docker-ce   help

 [root@docker ~]# sed -i 's#download.docker.com#mirrors.ustc.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast   去加载docker安装的源

yum -y install docker-ce   把社区版的docker装到操作系统中

systemctl enable --now docker  将docker设置为开机自启动,并且把它启动起来

 加ce是因为docker分为企业版和社区版,可以去使用社区版完成生产环境中docker工具的部署,

企业版的好处:能得到官方的支持和bug的修复  (付钱不会去用)

对于docker的安装,要注意,docker的版本,现在装的是20.10的版本,18年是16.3是稳定版(16.6  16.9)19.03是见过最高的,  在20版本以前是每个季度发出来的版本是最稳定的,次版本是按季度3 6 9的是稳定版可以装到生产环境,其余的会出bug,

想要装固定的版本,在阿里云提供了一条指令(developer.aliyun.com)。19.03(修订版最高的是最稳妥的)
-ce是守护进程   -ce-cli-

 [root@docker ~]# yum -y install docker-ce-19.03.15-3.el7 docker-ce-cli-19.03.15-3.el7 

 安装完毕的操作

docker version   查看版本

ss -anptu  查看端口号

启动第一个容器,运行一个nginx

docker container run -itd --name=web1 -p 8080:80 nginx:1.22   (下载比较慢)

  run去运行一个容器  i(是标准输入input)   t是终端(给容器一个标准输入的终端) d(daemon)  name是容器的名字  -p是端口映射(将本地的一个8080端口映射到容器的80端口)  1.22是nginx的镜像(在dockerhub 存储  hub.docker.com)  --  dockerhub称公共镜像仓库

 配置镜像加速器

将默认的替换成cn
vim /etc/docker/daemon.json  (花括号作为它的语法块,在其中添加上镜像加速器的地址)
{
    "registry-mirrors": ["https://registry.docker-cn.com"]
}

systemctl daemon-reload

systemctl restart docker

docker container run -itd --name=web1 -p 8080:80 nginx:1.22 

docker基本的指令

docker version  查看当前版本

docker管理的四大资源

docker container ls    查看当前系统中有哪些容器

docker image ls   查看镜像

docker network ls  查看当前系统中有哪些创建了docker的网络 (里面的桥接只是将容器的网络桥接到虚拟机,可以透过虚拟机里的网络访问到外部的网站,其目的就是完成一次nat模式) 

docker volume ls   查看数据卷

使用容器,镜像比较多

登录远程仓库, 获取拉镜像的权限

后续会增加私有镜像仓库的东西,需要登录到私有镜像仓库

docker login https://hi.hi(加上私有镜像仓库的名称,输入用户名,密码就可以去登录)

docker logout  登出

我们希望从哪个镜像仓库中拉取镜像,就需要去登录到对应的私有仓库。如果不登录就不具备拉取镜像的权限,正常来说,默认不登录,它会从网站拉取源镜像。登录或不登录它都可以拉取镜像但是拉取的源地址不一样。

Dockerfile

Dockerfile指令集
对于Dockerfiel而言,是在学习docker工具里面,最重点的内容,它可以帮助我们生成自己想要的基础镜像。部署一个容器最重要的就是镜像,指令都已经内置好了。

FROM                这个镜像的妈妈是谁?(指定基础镜像)

MAINTAINER    告诉别人,谁负责养它?(指定维护者信息,可以没有)

RUN                  你想让它干啥(在命令前面加上RUN即可)

ADD/COPY        给它点创业资金(COPY文件,会自动解压)

WORKDIR          我是cd,今天刚化了妆(设置当前工作目录)

VOLUME             给它一个存放行李的地方(设置卷,挂载主机目录)
ENV                     告诉这个镜像你有哪些工具(设置环境变量 )不会占用镜像层数       echo $PATH
EXPOSE 它要打开的门是啥(指定对外的端口)希望暴露的端口号

CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)写的是shell的指令

Dockerfile中的copy和add差别
add:如果所拷贝的文件是一个压缩包,在增加一个目标位置,它会先将压缩包解压,然后把压缩包解压后的内容放到压缩位置。add把压缩包解压过去,(一般情况下压缩包这种东西除非回滚会使用,打镜像的时候一定是单一任务完成的指令是最稳妥的因为最容易控制)

copy:拷贝一个压缩包,只会把压缩包放到对应的目录就完事了。没有任何的多余动作。(copy常用)

cd /opt/test
touch Dockerfile

vim Dockerfile

 看run能不能正常实现创建文件。

docker build -t test:v0.1 .

镜像的打包构建,目标镜像名test:v0.1 根据当前目录进行构建

Dockerfile单阶段构建镜像
单阶段构建镜像采用前端的vue项目作为基点,打包vue项目到机器中进行部署。

在公司,前端进行工作是需要电脑里面装有node js的环境的,需要把安装包放在机器里,才能进行前端代码的编写,需要先下载一个node,js的包。

 18.12.1 LTS 长期支持版本   19.0.1 Current 开发版本

需要先下载一个包,安装到你的机器,再去开发前端的程序,才能开发,必须有一个开发的环境。就像python,必须下载python的解释器,才能写python。

解决环境的途径是:有一个镜像,在镜像里包含了环境。

  环境有了,把代码拷贝进去就成了。以node:18.12.1为基底镜像,将我的代码拷贝进去,然后给代码运行起来,就能形成一个前端的项目,而服务器里不用装node js的环境,只需要把新打包的环境放上去运行就ok。现在需要node js的环境。

单阶段构建:一个阶段使用编程语言的环境,将代码拷到编程语言的环境,再把代码运行起来,就完成了单阶段的构建。

缺点:打出来的镜像比较大。

 去安装它的一些依赖,js代码,包括html的代码就把它运行起来了。

 Dockerfile多阶段构建镜像
单阶段构建所产生的镜像太大了,如果既想完成代码的测试,又想缩小镜像的大小。如何去做到?

采用第一个node js的镜像,去对我们的前端代码进行打包编译,把编译后的产物给它拷贝到另外一台基底镜像中,以此就可以把源代码正常的解析出来,就可以完成对源代码镜像的封装。实际上在前端的vue基础之上可以进行依赖的安装。

run build  这个指令会生成一个dist目录,dist目录就是把前端的代码,包括依赖的一些包全都打包到dist目录中,这个目录中就是由vue这个项目写出来的一堆代码,由于脱离了node js环境无法运行的代码,让它能够达到纯净度极高的一个html css js 的代码程度,让它摆脱node js 照样可以运行。

在这个过程中只需要向浏览器去提供这些文件就可以,需要一个中间件nginx,只要把dist目录放到nginx里就完成能摆脱node js的环境,从而实现最终打出来的镜像大小。

在一个dockerfile遍写两个集体镜像。

第一个集体镜像专门用作将前端的项目代码,打包出js目录来

第二个集体镜像只需要拷贝从第一个阶段到第二个阶段。

【注意】少熬夜,多看书。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你是我的导航

谢谢您的打赏,您的鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值