手动构建自己的docker容器镜像实战

手动构建自己的docker容器镜像需要以下几个步骤:

1.编写Dockerfile:Dockerfile是定义docker容器镜像的配置文件,它包含了构建镜像所需要的所有操作指令,如从基础镜像开始构建、安装软件包、配置环境等。

以下是一个简单的Dockerfile示例:

# 使用ubuntu 18.04作为基础镜像
FROM ubuntu:18.04

# 安装必要的软件包
RUN apt-get update \
&& apt-get -y install nginx

# 拷贝工作目录的文件到容器内指定路径,这里拷贝的是当前目录下的index.html文件
COPY index.html /var/www/html/

# 暴露80端口
EXPOSE 80

# 配置Nginx
CMD ["nginx", "-g", "daemon off;"]

这个Dockerfile定义了一个基于ubuntu 18.04的Nginx镜像,安装Nginx并拷贝一个index.html文件到容器内指定路径,然后暴露80端口并启动Nginx服务。

2.构建镜像:在Dockerfile所在目录下使用docker build命令构建镜像,命令格式为:docker build -t <镜像名称>:<标签> <Dockerfile路径>

方式1: 默认使用 Dockerfile 目录

docker build -t mynginx:1.0 . 
# 这里点号"."表示当前路径(即Dockerfile所在的目录),如果Dockerfile在其他路径下可以指定绝对路径

方式2:自定义Dockerfile文件名称

docker build -t mynginx:1.0 -f myDockerfile .
# -f 指定Dockerfile的文件名为myDockerfile

3.启动容器:在镜像构建完成后,可以使用docker run命令启动容器,命令格式为:docker run -p <宿主机端口>:<容器内端口> -d <镜像名称>:<标签>

docker run -p 8080:80 -d mynginx:1.0
# 指定将容器的80端口映射到宿主机的8080端口

以上是手动构建docker容器镜像的简单流程。下面将用两个示例说明手动构建docker容器镜像的具体步骤。

示例一:构建一个简单的Python Flask应用镜像

1.创建项目目录

mkdir flask
cd flask

2.编写Dockerfile

# 使用python 3.6作为基础镜像
FROM python:3.6

# 创建应用目录
WORKDIR /app

# 安装应用依赖包
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# 拷贝应用代码到容器内指定路径
COPY app.py /app

# 暴露5000端口
EXPOSE 5000

# 启动应用
CMD ["python3", "app.py"]

在项目目录下,创建一个app.py文件,编写Python Flask应用代码:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

3.构建镜像

docker build -t myflaskapp:1.0 .

4.启动容器

docker run -p 5000:5000 -d myflaskapp:1.0

现在,Python Flask应用已经运行在docker容器中,可以在浏览器中通过 http://localhost:5000 访问应用。

示例二:构建一个基于Java的Spring Boot应用镜像

1.创建项目目录

mkdir springboot
cd springboot

2.编写Dockerfile

# 使用openjdk 8作为基础镜像
FROM openjdk:8

# 创建应用目录
WORKDIR /app

# 拷贝jar文件到容器内指定路径
COPY target/myapp.jar /app

# 暴露8080端口
EXPOSE 8080

# 启动应用
CMD ["java", "-jar", "myapp.jar"]

在Spring Boot应用项目中,使用Maven或Gradle工具构建应用并生成可执行jar包,执行mvn package./gradlew build即可,这里假设生成的可执行jar包名为myapp.jar

3.构建镜像

docker build -t myspringbootapp:1.0 .

4.启动容器

docker run -p 8080:8080 -d myspringbootapp:1.0

现在,Spring Boot应用已经运行在docker容器中,可以在浏览器中通过 http://localhost:8080 访问应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:手动构建自己的docker容器镜像实战 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • deepin/debian 安装docker

    简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 关于Deepin中的Docker 深度官方deepin已经集成了docker,不过不是docker-ce这样的最新版。要想使用最新版可以参考官网d…

    Docker 2023年4月13日
    00
  • Docker容器常用命令汇总

    Docker常用命令总结如下: # 查看docker详细信息 docker info   # 获取当前节点所有容器 docker ps -a   # 管理容器生命周期 docker [start|stop|restart] <containerID|containerName>   # 查看容器日志 docker logs <contain…

    Docker 2023年4月11日
    00
  • 镜像使用、容器连接

    Docker镜像使用 列出镜像列表、获取一个新的镜像 REPOSITORY:表示镜像的仓库源 TAG:镜像的标签 IMAGE ID:镜像ID CREATED:镜像创建时间 SIZE:镜像大小 -i: 交互式操作。 -t: 终端。 ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。 /bin/bash:放在镜像名后的是命…

    Docker 2023年4月8日
    00
  • 解决docker与vmware的冲突问题

    解决 Docker 与 VMware 的冲突问题,需要经过以下几步: 1. 确认是否存在冲突 首先在使用前,我们需要确认是否存在冲突,可以输入以下命令查看当前是否存在已经启动的 vmware 大写堆栈: lsmod | grep -i vmw 如果输出了类似 vmw_vsock_vmci_transport 或者 vmw_vmci 的关键词,则说明存在已经启…

    Docker 2023年5月16日
    00
  • docker ——从docker容器的内部,连接本机的mysql

    所以我有一个Nginx运行在一个docker容器,我有一个mysql运行在localhost,我想连接到我的Nginx内的MySql。 MySql在localhost上运行,并且不将端口暴露给外部世界,因此其绑定在localhost上,而不是绑定在机器的ip地址上。 有没有办法连接到这个MySql或任何其他程序在localhost从这个docker容器?  …

    Docker 2023年4月16日
    00
  • docker本地仓库

    环境:1:docker仓库     192.168.159.139            2:docker验证机   192.168.159.141   下载registry    运行registry    验证:    如要希望docker客户端支持http协议,需在启动docker时加入参数 –insecureregistry your_regist…

    Docker 2023年4月12日
    00
  • 神奇的DEBUG:因为异常导致MongoDB容器无法启动

    越来越多的项目使用docker进行环境搭建,统一了开发和运行环境,好处颇多。但同时也引入了许多复杂性,比如一些容器服务突然无法启动,那么debug起来就比物理机安装的服务麻烦一些。这段时间Mac Pro经常出现莫名卡死的情况,我在没有办法的情况下只能强制关机,于是我遇到了再次开机后无法启动某个项目中的MongoDB容器的问题。查看该mongoDB容器的日志,…

    Docker 2023年4月11日
    00
  • K8S 实用工具之一 – 如何合并多个 kubeconfig?

    开篇 ? 引言: 磨刀不误砍柴工 工欲善其事必先利其器 K8S 集群规模,有的公司倾向于少量大规模 K8S 集群,也有的公司会倾向于大量小规模的 K8S 集群。 如果是第二种情况,是否有一个简单的 kubectl 命令来获取一个 kubeconfig 文件并将其合并到 ~/.kube/config 文件作为一个额外的上 context? ? 提示: Kube…

    Docker 2023年4月9日
    00
合作推广
合作推广
分享本页
返回顶部