小白docker入门简介

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那里报错 ,查问题就很麻烦很费时间 。所以,如果将代码做成一个镜像,里面包含了所有必须的特异功能,需要运行,就用镜像做出一个容器,直接运行容器

因为是从一个模子(镜像)刻出来的容器,所以完全一样,就不会出现换个地方(环境、电脑)报错的问题了

相关推荐
梅见十柒17 分钟前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生
O&REO2 小时前
单机部署kubernetes环境下Overleaf-基于MicroK8s的Overleaf应用部署指南
云原生·容器·kubernetes
运维小文3 小时前
K8S资源限制之LimitRange
云原生·容器·kubernetes·k8s资源限制
登云时刻3 小时前
Kubernetes集群外连接redis集群和使用redis-shake工具迁移数据(二)
redis·容器·kubernetes
wuxingge12 小时前
k8s1.30.0高可用集群部署
云原生·容器·kubernetes
志凌海纳SmartX13 小时前
趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
云原生·容器·kubernetes
锅总13 小时前
nacos与k8s service健康检查详解
云原生·容器·kubernetes
BUG弄潮儿14 小时前
k8s 集群安装
云原生·容器·kubernetes
意疏14 小时前
【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
linux·docker
墨鸦_Cormorant14 小时前
使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
redis·nginx·docker