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

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

相关推荐
问简1 天前
docker 镜像相关
运维·docker·容器
Benszen1 天前
Docker容器化技术实战指南
运维·docker·容器
Hommy881 天前
【开源剪映小助手】Docker 部署
docker·容器·开源·github·aigc
斯普信云原生组1 天前
Prometheus 环境监控虚机 Redis 方案(生产实操版)
运维·docker·容器
喵了几个咪1 天前
如何在 Superset Docker 容器中安装 MySQL 驱动
mysql·docker·容器·superset
工具罗某人1 天前
docker compose部署kafka集群搭建
docker·容器·kafka
开心码农1号1 天前
k8s中service和ingress的区别和使用
云原生·容器·kubernetes
L1624761 天前
Kubernetes 完整学习手册(1 主多从 + 纯 YAML 部署 + 访问原理)
学习·容器·kubernetes
sbjdhjd1 天前
Docker | 核心概念科普 + 保姆级部署
linux·运维·服务器·docker·云原生·面试·eureka
摇滚侠1 天前
Vmvare 虚拟机安装 Linux CentOS 7 操作系统 一键安装 Docker 1Panel 一键安装 MySQL Redis OpenClaw
linux·docker·centos