赞
踩
最近在学习联盟链框架fabric还有go语言的时候,不可避免的接触到了docker这一应用。其实在之前多有耳闻,但一直没有理由和时间去学习。
我在前几天学习docker的技术的时候,不知发出了多少“这真是“近五年来最牛的应用之一”的感触
有一场厨师比赛,邀请到了不同流派的大厨来进行美食的创新,而且他们有不同的工位。但是,他们是不同流派的,所以用到的工具也不一样,需要独立的厨房和厨具、材料。等厨师们做完菜后根据自己做的菜写一份做菜的流程,然后主办方去让自己的厨师根据流程所需的环境材料进行创作。最后得出不同厨师做的菜品。
是不是有点感觉了,如果不懂也没关系,让我们来根据上述内容一一对应一下计算机的处理逻辑。
现在,你对docker各个虚拟机、容器、镜像已经有一点点的理解了,我们再来抽象一下。
如果你还是不懂,那也没关系,我们看一看他具体的实现步骤。
仔细想一想,是不是上面的步骤和git的操作差不多,尤其是pull和push的操作,差距可能只在于对docker hub操作还是git hub操作而已。
其实,docker就是一个工具,方便我们敏捷的创建一个不依赖于任何事物的项目!
接下来让我们来试试如何操作docker吧
首先我已经认为你下载了docker了,你可以直接用命令行运行docker查看是否在你本机上可用。
我用node.js中的express框架举例,简单写一个web服务器。
我的项目文件
const express=require('express')
const app=express();
const PORT=3000
app.get('/',(req, res)=>{
res.send('<h1>你好</h1>')
})
app.listen(3000,()=>{
console.log('3000端口开启啦')
})
我的项目目录结构
test
├── Dockerfile
├── index.js
├── node_modules
├── package-lock.json
└── package.json
之后在终端执行 node index 即可运行这个文件并打开本机的3000端口
此刻,项目已经运行成功。
docker镜像的编写是在项目根目录下通过创建定制镜像文件(Dockerfile)进行的。
由于我的项目用的是node环境,即可直接在docker hub中寻找node的版本即可。
最后我的Dockerfile文件如下
FROM node:18-alpine3.15
WORKDIR /test
COPY package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node","index.js"]
简单解释一下
同时,我们不可能将本机的所有目录和文件都复制过去,就像python的虚拟机,nodejs的nodemodules都是不用的。
这时候就需要像gitignore一样创建一个dockerignore来忽略这些文件。
node_modules
Dockerfile
.dockerignore
到此,你的定制镜像文件(Dockerfile)已经写完成了!接下来就是生成了!
终端中输入 docker build ,即可根据你的Dockerfile进行镜像的构建。
构建完成后可输入docker images来查看文件。
同时可以用 docker tag 8b3(id的前三位) [你喜欢的名字] 进行打标签
比如说我就把他改成了test。
用docker run test来运行,但是可以加上修饰符 -d,表示在后台运行,不占用终端。
同时可以用 docker ps来看运行中的容器。
但是我们现在还是不能打开本地3000端口来访问的。因为本地端口和容器端口是不一样的
使用 docker run -d -p 3000:3000 test 来进行端口的通信
值得注意的是:3000:3000代表的是 主机端口:容器端口
这时候我们进行访问。即可访问成功!
docker stop 关闭容器
docker rmi 删除镜像
docker rm 删除容器
docker的操作就是这么一个流程,但是本人知识尚浅,不可能将所有的功能说全,大家可以根据docker的官方文档进行学习。
另外,令我感触的是,永远不要失去学习新东西的热情和动力,不然你不会知道这个东西有多有趣。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。