首页 > 其他分享 >docker构建镜像

docker构建镜像

时间:2024-03-04 17:13:15浏览次数:16  
标签:v1 myimage 构建 镜像 docker 推送

How to build a docker image.

本项目用于学习使用docker来构建镜像。
这里我们使用docker来编译我们的一个c++项目然后生成一个docker镜像,并将镜像上传到自己的docker仓库,最后使用该镜像来运行我们的项目。

0. cpp源文件介绍

在src文件夹下面有一个cpp文件,实现了整数的加法,我们在docker中使用g++编译器来编译这个文件。

// add.cpp
#include <iostream>

int main(int argc, char *argv[])
{
    if (argc < 3)
    {
        std::cout << "Usage: " << argv[0] << " <num1> <num2>" << std::endl;
        return 1;
    }
    else
    {
        int num1 = atoi(argv[1]);
        int num2 = atoi(argv[2]);
        std::cout << num1 << " + " << num2 << " = " << num1 + num2
                  << std::endl;
    }
    return 0;
}

1. 编写Dockerfile

在项目的根目录下创建一个名为Dockerfile的文件。在该文件中,编写构建镜像的指令和参数。

# 使用基础镜像
FROM ubuntu:18.04
# 安装g++编译器
RUN apt-get update && apt-get install g++ -y
# 创建一个工作目录
RUN mkdir /myapp
# 复制项目文件到镜像中
COPY ./src /myapp
# 设置docker构建时工作目录
WORKDIR /myapp
# 编译项目
RUN g++ add.cpp -o add && g++ mul.cpp -o mul
# 使用ENTRYPOINT来设置启动命令
ENTRYPOINT [ "/myapp/add" ]
# ENTRYPOINT默认参数,当容器运行输入参数时,会覆盖默认参数
CMD ["2", "3"]

2. 构建镜像

在项目的根目录下,运行以下命令来构建镜像:

docker build -t myimage:v1 .

该命令将使用Dockerfile中的指令构建一个新的镜像,并将其标记为"myimage:v1"。

3. 运行镜像

一旦镜像构建成功,你就可以运行它了。运行以下命令来启动容器:

docker run myimage:v1 # 输出 2 + 3 = 5
docker run myimage:v1 5 7 # 输出 5 + 7 = 12

该命令将使用"myimage:v1"镜像启动一个新的容器。

4. 推送镜像到仓库

如果你想将镜像推送到仓库,例如Docker Hub,你可以使用以下命令:

docker push username/myimage:v1
# 注: 推送时需要使用docker tag修改image的名字,给image前面加上个人用户名。
# 例如: docker tag myimage:v1 ladisson/myimage:v1 然后就会多出一个image,推送即可

该命令将推送"myimage:v1"镜像到"username"用户仓库中。
这样就能在docker hub中看到自己的镜像了。

5. 清理镜像

当你不再需要镜像时,可以使用以下命令来清理镜像:

docker image prune

该命令将删除所有未使用的镜像。

总结

在本文中,我们介绍了如何使用Dockerfile构建镜像,并介绍了如何运行和推送镜像到仓库。通过遵循这些步骤,你可以轻松地构建、运行和推送Docker镜像。
项目完整代码,请查看github仓库地址

标签:v1,myimage,构建,镜像,docker,推送
From: https://www.cnblogs.com/LadissonLai/p/18052147

相关文章

  • 不会还有人不会用docker init吧?
    现在立刻马上给我停止编写Dockerfiles,改为使用dockerinit编写Dockerfileanddocker-compose配置文件!您是那些觉得写作Dockerfiles和docker-compose.yml文件很痛苦的人之一吗?至少我从来没有享受过。我总是想知道我是否遵循了最佳实践,并且在编写配置文件时是否在不知不觉中......
  • docker命令
    1.docker卸载卸载Docker:sudoyumremovedocker-cedocker-ce-clicontainerd.io删除目录和卷sudorm-rf/var/lib/dockersudorm-rf/var/lib/containerd 2.dockerimages[options]dockerimages-adocker0mages-q 3.dockersearch[option]镜像名字d......
  • docker环境部署容器之间互通:Hyperf+MySQL
    在docker中要使Hyperf和Mysql网络互通,则需要在创建相应容器的时候指定共享网络,步骤如下:一、首先我们指定共享网络dockernetworkcreate--subnet172.18.0.1/16test  //整条命令复制执行就行不用改这个ip二、创建hyperf命令dockerrun--namehyperf-vD:\hyperf202......
  • Docker容器构建
    弊端:镜像的使用者不知道镜像构建细节镜像的构建者忘记构建的细节需要手动操作一、使用Dockerfile来定制镜像1.编写DockerfileDockerfile是一个文本文件,用以说明镜像的构建步骤,通过dockerbuild命令进行自动的构建举个例子FROMubuntu:18.04COPYa.txt/a.txtRUNec......
  • 在Docker中,网络模式有哪些?
    在Docker中,网络模式是用来定义容器如何与宿主机和其他容器进行网络通信的。以下是Docker中常见的网络模式及其详细解释:Bridge模式(桥接模式):这是Docker的默认网络模式。当创建一个容器时,Docker会为其分配一个独立的网络命名空间,并在宿主机上创建一个虚拟网桥(默认为docker0),容器......
  • 在Docker中,资源限制原理是什么?
    在Docker中,资源限制主要是通过Linux内核的ControlGroups(cgroups)和Namespaces技术来实现的。1.ControlGroups(cgroups)cgroups是Linux内核的一个特性,它提供了一种机制来限制、记录、隔离进程组使用的物理资源(如CPU、内存、磁盘I/O等)。当Docker创建一个容器时,它会为该......
  • 在Docker中,docker run cmd entrypoint 有什么区别?
    在Docker中,dockerrun、CMD和ENTRYPOINT是相互关联又各有不同的概念,它们都涉及到如何配置和启动容器。下面详细介绍它们的区别和联系:dockerrundockerrun是Docker客户端命令,用于创建一个新的容器并运行其中的应用程序。当你执行dockerrun时,你可以指定一系列参数,如......
  • Docker 常用指令
    1.指令FROM指定base镜像MAINTAINER设置镜像的作者,可以是任意字符串COPY将文件从buildcontext复制到镜像,COPY支持两种形式:COPYsrcdest与COPY["src","dest"],src只能指定buildcontext中的文件或目录ADD与COPY类似,从buildcontext复制文件到镜像。不......
  • 使用 Gradle 构建包含所有依赖的 JAR 包
    在Gradle中构建一个包含所有依赖的jar包(通常被称为“fatjar”或者“uberjar”),你可以使用shadowJar插件来包含编译的类和依赖。这里是一个基本的例子,使用shadowJar插件:首先,在你的build.gradle文件中引入shadowJar插件:plugins{id'java'id'com.githu......
  • 使用 docker-compose 部署 Jenkins
    Jenkins是一款非常流行的开源持续集成工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。有关Jenkins的详细介绍,可以查看官网:https://www.jenkins.io本篇博客主要介绍如何通过docker-compose快速部署Jenkins工具,也让大家避免踩坑我的CentOS7虚拟机ip地址是1......