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

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

相关推荐
时迁2471 小时前
【k8s】k8s是怎么实现自动扩缩的
云原生·容器·kubernetes·k8s
诡异森林。4 小时前
Docker--Docker网络原理
网络·docker·容器
ALex_zry4 小时前
Docker Macvlan网络配置实战:解决“network already exists“错误
网络·docker·php
IT小辉同学4 小时前
Docker如何更换镜像源提高拉取速度
spring cloud·docker·eureka
matrixlzp5 小时前
K8S Service 原理、案例
云原生·容器·kubernetes
GnixAij6 小时前
Docker SSH端口转发
docker·ssh
angushine6 小时前
让Docker端口映射受Firewall管理而非iptables
运维·docker·容器
玄明Hanko8 小时前
生产环境到底能用Docker部署MySQL吗?
后端·mysql·docker
玄明Hanko8 小时前
Quarkus+Docker最全面完整教程:手把手搞定Java云原生
后端·docker·云原生
SimonLiu0098 小时前
清理HiNas(海纳斯) Docker日志并限制日志大小
java·docker·容器