Docker镜像与制作

news2024/11/18 9:27:48

Docker镜像与制作

Docker镜像是没有内核的,镜像在启动为容器后将直接使用宿主机的内核。
Docker镜像的制作分为了手动制作和自动制作(基于DockerFile)

1、制作nginx镜像

先准备一个目录,

mkdir docker-images && cd docker-images

编写Dockerfile文件

vi Dockerfile

# 使用ubuntu16.04作为基础镜像
FROM ubuntu:16.04
# apt-get更新 并 安装 nginx
RUN apt-get update && \
    apt-get install -y nginx
# 将nginx.conf 移动到/etc/nginx/nginx.conf下
COPY nginx.conf /etc/nginx/nginx.conf
# open 80 port
EXPOSE 80

CMD ["nginx","-g","daemon off;"]

在该目录下编写nginx.conf文件

worker_processes 1;

events {
    worker_connections 1024;
}

http {

    sendfile on;

    server {
        listen 80;
        server_name localhost;
        root /var/www/html;

        location / {
            index index.html;
        }
    }
}

构建docker镜像:

docker build -f ./Dockerfile -t my-nginx-image:v1 .

-f 后跟Dockerfile所在的路径
-t 后跟构建的镜像名
:v1 表示版本

出现以下表明镜像构建成功

Removing intermediate container 91b3eb96a75e
 ---> 54846b071710
Step 3/5 : COPY nginx.conf /etc/nginx/nginx.conf
 ---> 7cced5bd27de
Step 4/5 : EXPOSE 80
 ---> Running in a216d7411efd
Removing intermediate container a216d7411efd
 ---> 084d1d3e2ec7
Step 5/5 : CMD ["nginx","-g","daemon off;"]
 ---> Running in cb05b809ba3d
Removing intermediate container cb05b809ba3d
 ---> c35831dffa0c
Successfully built c35831dffa0c
Successfully tagged my-nginx-image:latest

查看构建好的镜像:

root@ubuntu:~/docker-images# docker images | grep my-nginx-image
my-nginx-image      v1              c35831dffa0c        23 minutes ago      222MB

后台运行该镜像:

root@ubuntu:~/docker-images# docker run -it -d -p 80:80 my-nginx-image:v1
7080e80685a0e30161ac4efffa50ffb7d7e787d9ed6ba93bcd2566b993903683

-d:后台运行
-p:指定端口

接下来我们打开浏览器,输入http://ip:80就可以看到nginx的欢迎界面
在这里插入图片描述

2、制作jdk、tomcat镜像

2.1、制作ubuntu镜像

以ubuntu为基础镜像
首先我们先建立目录

mkdir dockerfile/{web/{nginx,tomcat,apache},system/{ubuntu}} -pv

建立完成后的目录树如下图所示:
在这里插入图片描述

root@ubuntu:~/dockerfile# ls
system  web

root@ubuntu:~/dockerfile# cd system/
root@ubuntu:~/dockerfile/system# ls
ubuntu
root@ubuntu:~/dockerfile/system# cd ubuntu/

在ubuntu这个目录下,创建一个Dockerfile文件,用于制作基础镜像,我这是以ubuntu16.04为基础镜像的,大家做的时候可以用新一点的。

FROM ubuntu:16.04

MAINTAINER XiaoMing ho1256@163.com

RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y curl wget git vim

再编写一个脚本文件build-command.sh

#!/bin/bash

docker build -t ubuntu-base:v1 .

执行脚本文件

bash build-command.sh

我们的Ubuntu基础镜像就做好了,查看镜像

root@ubuntu:~/dockerfile/system/ubuntu# docker images ubuntu-base:v1
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu-base         v1                  a821358eaa58        9 minutes ago       309MB

2.2、制作jdk镜像

首先我们先下载jdk的Linux安装包,
jdk下载网址
下载完成后传输到之前建立好的jdk目录下。

进入到jdk目录下

root@ubuntu:~/dockerfile# cd web/jdk/

编写Dockerfile文件

FROM ubuntu-base:v1

# 拷贝jdk安装包和环境变量脚本
COPY jdk-20_linux-x64_bin.tar.gz /opt
COPY env.sh /etc/profile.d/
RUN chmod a+x /etc/profile.d/env.sh

# 解压安装包并设置环境变量
RUN tar -zxvf /opt/jdk-20_linux-x64_bin.tar.gz -C /usr/local
ENV JAVA_HOME=/usr/local/jdk-20.0.1
ENV PATH=$PATH:$JAVA_HOME/bin
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# 清除无用数据
RUN rm -rf /opt/jdk-20_linux-x64_bin.tar.gz
# 设置容器命令和参数
CMD ["/bin/bash"]

编写环境设置脚本env.sh

#!/bin/bash

export JAVA_HOME=/usr/local/jdk2.0
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

编写构建jdk镜像脚本

#!/bin/bash

docker build -t jdk-base:v1 .

执行构建脚本

bash build-command.sh
...
Removing intermediate container 963e3b68177f
 ---> f2bac051098d
Step 9/10 : RUN rm -rf /opt/jdk-20_linux-x64_bin.tar.gz
 ---> Running in 02ab3265deab
Removing intermediate container 02ab3265deab
 ---> a495eb009b51
Step 10/10 : CMD ["/bin/bash"]
 ---> Running in a6b41488f99b
Removing intermediate container a6b41488f99b
 ---> 275d7da27ed8
Successfully built 275d7da27ed8
Successfully tagged jdk-base:v1

出现上图表示构建成功!

查看构建好的镜像:

root@ubuntu:~/dockerfile/web/jdk# docker images jdk-base:v1
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
jdk-base            v1                  275d7da27ed8        26 seconds ago      836MB

从镜像创建出一个测试容器,验证容器的中的 JDK 环境是否可用

root@ubuntu:~/dockerfile/web/jdk# docker run -it --rm jdk-base:v1 bash
root@05defad8b75f:/# java --version
java 20.0.1 2023-04-18
Java(TM) SE Runtime Environment (build 20.0.1+9-29)
Java HotSpot(TM) 64-Bit Server VM (build 20.0.1+9-29, mixed mode, sharing)

出现上述情况,证明java环境可用
命令参数解释:
docker run: 命令用于启动一个新的容器。如果该镜像还没有本地副本,Docker 将会自动从 Docker Hub 下载该镜像。
-it: 参数表示使用交互式终端运行容器,在容器内部执行命令,并且通过 STDIN、STDOUT 和 STDERR 连接到容器的 TTY 设备上。
–rm: 参数会在容器停止后自动清理掉容器文件系统和资源,这可以避免因为容器不断创建而导致一些冗余的容器产生。
jdk-base:v1: 是指要使用的 Docker 镜像的名称(比如从 Docker Hub 拉取的或者已经本地存在的),其中 jdk-base 表示对应的镜像名称,:v1 是关于镜像版本的标签信息。这里表明了启动该容器需要用到的镜像是名字为 jdk-base,按照标签为 v1 所对应的镜像版本。
bash: 是 Docker 启动容器时默认执行的命令。这里使用 bash 来启动一个交互式的 Bash 终端。你可以在容器中运行其他命令,例如 java 命令或者其他 shell 命令。

在该容器里写一个简单的HelloWorld.java去测试java环境:

root@ubuntu:~/dockerfile/web/jdk# docker run -it --rm jdk-base:v1 bash
root@05defad8b75f:/# vi hello.java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

保存退出
编译

javac HelloWorld.java

会生成一个HelloWorld.class文件
运行

root@05defad8b75f:/# java HelloWorld.java 
Hello, World!

最后,退出测试容器

root@05defad8b75f:/# exit
exit

2.3、制作tomcat镜像

首先制作一个tomcat基础镜像
在tomcat目录下。创建一个tomcat-base目录并进入:

mkdir tomcat-base && cd tomcat-base

下载tomcat的linux安装包,tomcat下载地址
上传到该目录下
编写Dockerfile文件

# Tomcat Base Image

# 以jdk-base:v1为基础镜像
FROM jdk-base:v1

# env
ENV LANG en_US.UTF-8
# 主版本号
ENV TOMCAT_MAJOR_VERSION 8
# 次版本号
ENV TOMCAT_MINOR_VERSION 8.5.88
# tomcat的安装路径
ENV CATALINA_HOME /apps/tomcat
# tomcat的安装目录
ENV APP_DIR ${CATALINE_HOME}/webapps

# tomcat
RUN mkdir /apps
# 解压压缩包并复制到/apps目录下  这样做不太安全,可以使用 COPY先把压缩包传过去,再解压
ADD apache-tomcat-8.5.88.tar.gz /apps
# 创建一个软链接
RUN ln -sv /apps/apache-tomcat-8.5.88 /apps/tomcat 

编写构建脚本

vi build-command.sh
#!/bin/bash

docker build -t tomcat-base:v8.5.88 .

执行构建脚本

bash build-command.sh

查看构建好的镜像

root@ubuntu:~/dockerfile/web/tomact/tomcat-base# docker images tomcat-base:v8.5.88
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat-base         v8.5.88             1c1ba0f43eee        10 minutes ago      851MB

使用构建好的镜像启动容器并进入:

docker run -it tomcat-base:v8.5.88

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/548270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

借助ChatGPT实现 PPT | 导图 | 短视频文案生成【AIGC】

文章目录 1、chatgpt 自动制作 PPT2、chatgpt 生成 Excel 公式3、chatgpt 生成思维导图4、chatgpt 快速生成短视频5、总结 1、chatgpt 自动制作 PPT 步骤如下: ①要求 chatgpt 生成 PPT 内容,以 markdown 格式输出; ②借助网站 mindshow.fun…

【C++】 哈希 (上)

文章目录 1. 哈希概念2. 哈希表直接定址法(常用)除留余数法(常用)解决哈希冲突方法1 ——闭散列 3. 闭散列的实现如何处理删除数据?定义数据结构insertlen为 _tables.size() 还是 _tables.capacity()?线性探测负载因子扩容 FindErase完整代码 1. 哈希概念…

SpringBoot项目打包部署到Nginx【无需配置Nginx】

0.前置知识 springboot打包的项目共分为jar和war两种类型 jar包 jar类型项目使用SpringBoot打包插件打包时,会在打成的jar中 内置一个tomcat 的jar 所以我们可以使用jdk直接运行,将功能代码放到其内置的tomcat中运行。 war包 在打包时需要将 内置的tom…

2023-05-20 技术与管理的照本宣科教条主义与从事实中成长-反思

摘要: 最近的两份工作遇到了极其严重的教条主义, 有多严重呢?几乎可以说人成了教条的教徒,做事就成了照本宣科的死板硬套, 简直匪夷所思。 结果就是对于现实问题简直就像是建立在空中楼阁之上,不但涉及到管理,更有技术上的。 教…

实训三:MLP配置(多链路捆绑的配置)

实训三:MLP配置 【实验目的】 掌握多链路捆绑的配置。验证配置。 【实验拓扑】 实验拓扑如图所示。 设备参数如表所示。 设备 接口 IP地址 子网掩码 默认网关 R1 Multilink 1 192.168.12.1 255.255.255.0 N/A R2 Multilink 1 192.168.12.2 255.255…

6年心得,从功能测试到测试开发,送给在测试路上一路走到黑的你

蓦然回首,软件测试风风雨雨的这就几年,起初每天的工作只是鼠标点点点,我还真不知道怎么办,闲的时候真的怀疑自己的存在价值,每天拿着7000的工资,飘荡在繁华的深圳,吃不饱也饿不死,未…

1.2 IAR 环境配置及编译

目录 一. 新建源码文件夹 二. 添加源文件到工程中 三. 编写一个简单的测试程序 四. 设置字体和行号 五. 工程配置 六. 编译链接工程 一. 新建源码文件夹 (1)在保存工作空间和工程的目录下,新建一个code文件夹,用于保存源码&…

斯坦福、Nautilus Chain等联合主办的 Hackathon 活动,现已接受报名

由 Stanford Blockchain Accelerator、Zebec Protocol、 Nautilus Chain、Rootz Lab 共同主办的黑客松活动,现已接受优秀项目提交参赛申请。 在加密行业发展早期,密码极客们就始终在对区块链世界基础设施,在发展方向的无限可能性进行探索。而…

计算机组成原理实验三-修改二进制文件的程序改变最终运行结果

实验资料: https://wwpv.lanzoue.com/b05drr8qh 密码:6wjx 计算机组成原理实验三 修改二进制文件的程序改变最终运行结果 复习实验二GCC选项:-E -S -c -o -v .\gcc.exe 1.c -> a.exe .\gcc.exe 1.c -o 21001302xx.exe(1)…

Nacos之服务配置中心

1.基础配置 1.1.新建模块cloudalibaba-config-nacos-client3377 1.1.1.POM <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance…

JVM学习(五)

1.1 JVM 类加载机制 JVM 类加载机制分为五个部分&#xff1a;加载&#xff0c;验证&#xff0c;准备&#xff0c;解析&#xff0c;初始化&#xff0c;下面我们就分别来看一下这 五个过程。 1.1.1 加载 加载是类加载过程中的一个阶段&#xff0c; 这个阶段会在内存中生成一…

路径规划算法:基于教与学优化算法的路径规划算法- 附代码

路径规划算法&#xff1a;基于教与学优化优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于教与学优化优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能…

Springcloud1--->负载均衡Ribbon

目录 负载均衡算法负载均衡原理启动两个服务实例开启负载均衡更改Ribbon随机策略 什么是Ribbon&#xff1a; 负载均衡算法 负载均衡算法&#xff1a; 1.轮询法&#xff1a;   将请求按顺序轮流地分配到后端服务器上&#xff0c;它均衡地对待后端的每一台服务器&#xff0c;而…

【正点原子STM32连载】 第十三章 跑马灯实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十三…

chatgpt赋能Python-python3_9_7怎么用

介绍Python3.9.7及其用途 Python是一种高级编程语言&#xff0c;已成为Web开发、数据科学、机器学习等领域中最广泛使用的语言之一。Python3.9.7是Python的最新版本&#xff0c;于2021年9月6日发布。它包括各种新的特性、改进和安全性实现&#xff0c;提高了Python应用程序的稳…

计算机图形学-GAMES101-13

Ray Tracing &#xff08;1&#xff09;为什么使用光线追踪 Ray Tracing 和 Rasterization 是两种不同的成像方式。Rasterization最大的问题&#xff1a;不利于表达全局效果。整体来说光栅化做阴影是比较困难的。Glossy reflection&#xff1a;一种不那么光滑的反射镜面。Ind…

在 Linux 上使用 yuzu 模拟 Nintendo Switch 试玩王国之泪

王国之泪5月12日发售&#xff0c;DLC 玩家已经造出各种脑洞大开的东西了&#xff0c;但是买的卡带迟迟没有收到&#xff0c;因此&#xff0c;打算使用 yuzu 模拟器先体验一下 yuzu 是一款开源的 Ninetendo Switch 模拟器&#xff0c;支持在 Linux 或者 Windows 平台运行&#…

GoLand 2023 Crack函数的支持

GoLand 2023 Crack函数的支持 增加了对“MIN_BY”和“MAX_BY”函数的支持。 更新了Prisma插件previewFeatures以包含jsonProtocol。 改进了与角度相关的符号的文档-添加了更多关于管道、特性和指令的文档。当您将鼠标悬停在符号上或调用显示文档完成时(F1/CtrlQ)&#xff0c;您…

linux工作目录切换命令文件查看及管理命令

1、查看用户工作目录 2、切换工作目录 这里使用cd命令即可&#xff0c;输入对应的路径就可切换。 如果要返回上一次所处的目录输入 cd - 如果要返回上层目录使用 cd … 返回用户家目录使用 cd ~ 3、查看目录中文件信息命令 使用ls命令可以查看目录中文件信息-a 参数可以…