Dockerfile入门使用分享
一、docker是啥
最开始我和你一样,围着镜像 、容器 、docker 的名词团团转,其实没那么复杂。简单说我们就是做个微型的小电脑模型 ,把需要的软件都装进去。后面就可以根据这个模型做一个真的电脑出来。
还没懂?
就是你有个高达的钥匙链,因为是个钥匙链,所以它只能看着。但是你有个咒语,叫刀客乱 ,拿着高达钥匙链的人,只要一念刀客乱 ,高达钥匙链就会闪闪发光,在你面前创造出一个真正的机甲高达 出来,能跑能跳能打枪!
是不是很厉害,一个钥匙链的玩偶,不是只能创建1个真正的高达,能创造很多个高达出来 ,这就是厉害之处!
钥匙链玩偶就是镜像 ,被创造出来的真的高达就是容器 。
二、镜像仓库
有些人为了方便,自己做了很多镜像,然后放到一个商店里面去买,很多都是不收钱的,这个商店就是镜像商店 。就是里面有很多的玩偶钥匙链。
你买了就能造一个真的机甲战士出来!多么酷!
三、自定义镜像
后来有一天,你梦到一个拥有计算数学功能 的机甲战士,你跑去商店问老板,结果商店里面没有这种特意功能的玩偶!你特别沮丧,在回家的路上,你听别人说,可以自己做玩偶 !
做法就是把机甲战士需要的特异功能(计算)写在一张纸上 ,然后念一个咒语刀客币路豆 ,就能造出一个机甲玩偶战士出来!
这神奇的纸就是Dockerfile。
四、动手做机甲玩偶
在Dockerfile的纸上写下特异功能
dockerfile
# 使用 Nginx 作为基础镜像
# 就是找一个显示器nginx
FROM nginx:alpine
# 将本地的 index.html 复制到容器中的 Nginx 默认网站目录
# 你想让机甲战士会算简单计算数学js,把加减乘除的运算规则写这里index.html
COPY index.html /usr/share/nginx/html/
# 暴露 80 端口
# 让机甲战士用哪个对讲机和你说话,这里是80号对讲机
EXPOSE 80
然后念咒语刀客币路豆(docker build -t js .),就做出一个叫js名字的玩偶(镜像)。
五、帮我做数学题
前面说了,玩偶是不能动的,需要动的话,还要向玩偶念咒语刀客乱 (docker run -d -p 8080:80 --name jsq js),一个叫jsq(计算器)的机甲战士就出现在你的眼前了,你用自己的8080对讲机 朝着jsq机甲战士的80对讲机 讲话,告诉jiq机甲战士,你要算什么数学题!
六、计算功能的写法
Dockerfile就是文件名,没有后缀 。此外,Dockerfile文件和index.html文件需要在同一个目录下 。
Dockerfile⬇️
dockerfile
# 使用官方的 Nginx 基础镜像
FROM nginx:latest
# 将自定义 HTML 文件复制到容器中的 Nginx 默认根目录
COPY index.html /usr/share/nginx/html/index.html
# 暴露 Nginx 默认的 80 端口
EXPOSE 80
index.html⬇️
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Simple Calculator</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
}
.calculator {
margin: 0 auto;
max-width: 300px;
padding: 10px;
border: 1px solid #ddd;
border-radius: 5px;
}
.calculator input, .calculator button {
width: 100%;
padding: 10px;
margin: 5px 0;
font-size: 16px;
}
.calculator button {
background-color: #4CAF50;
color: white;
border: none;
cursor: pointer;
}
.calculator button:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<div class="calculator">
<h2>Simple Calculator</h2>
<input type="number" id="num1" placeholder="Enter first number" required>
<input type="number" id="num2" placeholder="Enter second number" required>
<button onclick="calculate()">Calculate</button>
<h3 id="result"></h3>
</div>
<script>
function calculate() {
// 获取输入的值
var num1 = parseFloat(document.getElementById('num1').value);
var num2 = parseFloat(document.getElementById('num2').value);
// 判断输入是否合法
if (isNaN(num1) || isNaN(num2)) {
document.getElementById('result').innerText = "Please enter valid numbers.";
} else {
var sum = num1 + num2;
document.getElementById('result').innerText = "Result: " + sum;
}
}
</script>
</body>
</html>
咒语⬇️
bash
# 这里是执行Dockerfile中的命令,生成叫js的镜像
docker build -t js .
# 这里是查看所有的镜像,如果你只有一个,那就是js
docker images
#这个就是查看的结果⬇️
[ec2-user@ip-666-666-666-666 dockerfile]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
js latest 503e3aff6e48 9 seconds ago 192MB
#这个就是查看的结果⬆️
# 这里是让镜像创造一个容器,容器的名字叫做jsq,用js镜像创作
docker run -d -p 8080:80 --name jsq js
# 这里是查看容器
docker ps -a
#这个就是查看的结果⬇️
[ec2-user@ip-666-666-666-666 dockerfile]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b28ba2d5575c js "/docker-entrypoint...." 5 seconds ago Up 4 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp jsq
#这个就是查看的结果⬆️
七、咒语翻译器
我忘记和你讲了,咒语需要被专人(docker)翻译才能有效 ,所以你需要的翻译器(docker)。
bash
# 施法前摇
sudo yum update -y
# 安装翻译器
sudo yum install -y docker
# 翻译器开机
sudo systemctl start docker
# 翻译器自动开机
sudo systemctl enable docker
# 检查翻译器版本
docker --version
# 测试翻译器
sudo docker run hello-world
八、放屁
上面很多都是胡说,根本没有专业的概念讲解,因为只是希望小白能初步理解。大佬就当我放屁就好了。
九、解决问题
东西一般都不是凭空出现的,一般都是为了解决一个问题。docker就是为了解决不统一 的问题,比如说,老师让大家做个能算数的高达机甲战士出来,狗蛋和小王都有自己的想法,做的不一样,其他人做的也不一样。所以老师就给了个镜像,大家直接念咒语,根据镜像作出的高达机甲都是一个模子里面刻出来的,所以长得都一样,功能也都一样,所以就完成了统一!
到了我们现实生活中,程序员A写的代码,在自己电脑里面运行正常 ,到测试人员B那里报错 ,查问题就很麻烦 ,很费时间 。所以,如果将代码做成一个镜像,里面包含了所有必须的特异功能,需要运行,就用镜像做出一个容器,直接运行容器,
因为是从一个模子(镜像)刻出来的容器,所以完全一样,就不会出现换个地方(环境、电脑)报错的问题了。