Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Docker 学习笔记2 - 创建一个镜像和发布镜像

Docker 学习笔记2 - 创建一个镜像和发布镜像

作者头像
张云飞Vir
发布于 2020-04-09 06:43:17
发布于 2020-04-09 06:43:17
1.3K01
代码可运行
举报
文章被收录于专栏:写代码和思考写代码和思考
运行总次数:1
代码可运行

0. 背景

本文讲解如何构建一个镜像,和发布到 Docker Hub。

基于 Docker 的开发流程 一般来说基于 Docker 的开发流程是这样的:

  • (1)创建Docker镜像,它承载了你的程序运行的必要环境,是创建和测试独立的基础。
  • (2)测试,验证你的镜像。
  • (2)发布/分享你的镜像。比如在 Docker Hub 上发布你的Docker镜像

本文关注第一步,创建一个基础的镜像,这个镜像是你的容器的基础。一个镜像包含了用于承载容器运行的私有的文件系统。基于此,我们需要把我们的应用程序的能够运行的所需文件/ 组件放入镜像中。

容器化的开发环境,相比于传统的开发环境更容易配置。由于一个容器化的开发环境会把应用程序所需要的文件依赖项,隔离在镜像的内部。那么,在你的真实开发主机上,仅需要安装Docker就够了。

通过这种方式,你可以轻松地为不同的技术栈开发应用程序,而无需更改开发者主机上的内容。

1. 在开始之前的准备

从 git 克隆一个示例项目到你本地:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/dockersamples/node-bulletin-board
cd node-bulletin-board/bulletin-board-app

2. 创建Docker镜像

步骤拆解:

  • (1) 编写 Dockerfile 文件
  • (2) 执行

下面分别说明。

2.1 编写 Dockerfile 文件

进入项目的根目录,新一个 Dockerfile 文件,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 指定一个 作为基础的 官方镜像
FROM node:current-slim

# 设置工作目录,这里是你的Docker镜像文件系统中的文件位置
WORKDIR /usr/src/app
# 拷贝你机器中的 package.json 到 镜像文件系统中
COPY package.json .
# 要使用npm,先指定一个国内的源
RUN npm config set registry https://registry.npm.taobao.org
# 执行 npm install
RUN npm install

# 暴露Docker镜像的 8080 端口
EXPOSE 8080

# 执行 指令 npm start
CMD [ "npm", "start" ]

# 拷贝当前文件下的内容到 Docker镜像中
COPY . .

说明:

  • FROM:指定一个 作为基础的 官方镜像
  • WORKDIR:设置Docker镜像文件系统中的工作目录,后续操作以这个为基础。
  • RUN :后面跟的是在你的Docker镜像中执行的指令。
  • EXPOSE:暴露Docker镜像的 8080 端口 上面的步骤构建了镜像的文件系统。
  • CMD:是第一个在映像中运行的指令。

这些步骤与您在主机上设置和安装应用程序的步骤大致相同。由于使用了Dockerfile,它可以使您在可移植的、独立的Docker镜像中执行相同的操作。

2.2 执行构建 docker build

在命令行执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker build --tag bulletinboard:1.0 .

执行后,将会看到按步骤执行的过程。

image.png

最后看到 Successfully tagged "你的镜像名",说明构建完成。

查看你本机的所有镜像 执行 docker images 查看你本机的所有镜像,看下是不是有了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker images

3. 用这个镜像启动容器

用这个镜像启动容器,执行: docker run --publish 8000:8080 --detach --name bb bulletinboard:1.0

说明: --publish: 指定端口映射,比如这里它将主机端口8000的流量转发到容器端口8080。容器的端口是私有的,想从网络中访问就必须以这种方式将流量转发给它。 --detach:表示将在后台运行此容器。 --name:指定容器的名称。

访问启动后的程序 在浏览器中打开,可以看到部署成功的应用web页面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://localhost:8000

移除这个容器 上面指定了名字叫 bb ,那么执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker rm --force bb

4. 在 Docker Hub 上发布你的Docker镜像

Docker Hub 存放着 Docker 及其组件的很多资源,很多人在这里发布/分享镜像,这里我们也发布一个。分这么几步:

  • (1)注册账户
  • (2) 创建 一个 仓库 repository
  • (3) 推送(push)你的镜像

4.1 注册账户

https://hub.docker.com/signup. 完成注册。

4.2 创建 一个 仓库 repository

找到 Repositories > Create ,填写一些信息,按引导完成创建。

4.3 推送(push)你的镜像

建立镜像关联到远程仓库 注意下面 gordon 改成你的账户名。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker tag bulletinboard:1.0 gordon/bulletinboard:1.0

执行push

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker push gordon/bulletinboard:1.0

现在镜像已经可以在Docker Hub上使用了,在新机器上部署使用它会非常方便,Docker将自动尝试并从Docker Hub下载它。

一个至关重要的最佳实践是:将你的 Dockerfile 放在版本控制中,可能与应用程序的源代码放在一起。并在 Docker Hub 存储库描述指示可以在何处找到这个文件。这样不仅保留镜像构建方式的记录,还保留镜像作为完整应用程序运行的方式的记录。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Docker 快速入门(二)- 构建并运行您的镜像
现在您已经安装了开发环境,可以开始开发容器化的应用程序了。一般来说,开发工作流是这样的:
用户8803964
2021/07/05
2K0
面向初学者的Docker快速入门指南
yum源:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo为了速度可以替换文件中的url。
DevOps云学堂
2020/07/23
1.3K0
面向初学者的Docker快速入门指南
Docker 快速入门(三)- 在 Docker Hub 上共享镜像
现在,您已经在本地开发机器上构建了第二部分中描述的容器化应用程序。开发容器化应用程序的最后一步是在像 Docker Hub 这样的注册表上共享镜像,以便它们可以被轻松地下载和运行在任意目标机器上。
用户8803964
2021/07/05
1.2K0
Docker for Devs:创建一个开发版镜像
在本文中,我们介绍了如何使用 Docker 容器化技术来部署基于 Express.js 的 Web 应用程序。通过使用 Docker,我们可以快速、高效地搭建和部署应用程序,同时保持应用程序的可移植性和可扩展性。我们通过创建一个简单的 Dockerfile 和相应的 docker-compose.yml 文件,将一个 Express.js Web 应用程序成功部署到 Docker 容器中,并通过使用 Docker Compose 来管理多个容器的部署。我们还探讨了如何使用本地主机上的数据卷将应用程序的源代码和依赖项部署到容器中,并演示了如何使用 Docker 的交互式 CLI 工具来管理容器和容器组。通过本文的深入研究和实践,我们可以深入了解 Docker 容器化技术的基本原理和应用方法,为开发人员、运维人员和系统管理员提供宝贵的实践经验。
Techeek
2018/01/08
1.9K0
Docker for Devs:创建一个开发版镜像
Docker入门:使用Dockerfile构建Docker镜像
我们通过Docker build命令以及Dockerfile把我们的应用以及应用依赖的资源及环境打包成Docker镜像,帮助我们在各种我们需要的环境中部署应用,让我们不再担心环境差异带来的应用部署问题
KenTalk
2023/04/07
10.2K0
Docker入门:使用Dockerfile构建Docker镜像
Docker系列-(2) 镜像制作与发布
上篇文章引入了Docker的基本原理和操作,本节文章主要介绍如何制作Docker镜像和发布。
码老思
2023/10/17
6750
Docker系列-(2) 镜像制作与发布
docker学习笔记
示例Dockerfile:https://github.com/yeshan333/psweb
Cloud-Cloudys
2020/07/07
8200
Docker的镜像
根据用户输入的文章内容,撰写摘要总结。
coders
2018/01/04
1.8K0
Docker的镜像
Docker(一)——Docker的简单学习
 docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
传说之下的花儿
2023/04/16
4090
Docker(一)——Docker的简单学习
【docker】Docker的基本指令和HTML/PYTHON/C++的简单创建示例
Docker 是一个开源平台,专为简化开发、部署和运行应用程序而设计。通过使用称为“容器”(Container)的轻量级虚拟化技术,将应用程序及其依赖环境打包到一个独立的单元中,使应用程序能够在任何环境中一致地运行。
SarPro
2024/05/24
2090
【docker】Docker的基本指令和HTML/PYTHON/C++的简单创建示例
墙裂推荐!看完全面掌握,最详细的 Docker 学习笔记总结(2021最新版)
Docker 是一个开源的容器引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者和系统管理员在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括 VMs(虚拟机)、bare metal、OpenStack 集群、云端、数据中心和其他的基础应用平台。容器是完全使用沙箱机制,相互之间不会有任何接口。
民工哥
2021/04/18
3.6K0
看完这篇,Docker你就入门了
在计算机技术日新月异的今天, Docker在国内发展的如火如荼,特别是在一线互联网公司,Docker的使用是十分普遍的,在理解docker之前,我们先熟悉两个概念,容器和虚拟机。
边缘计算
2021/04/16
5880
Docker核心技术学习笔记
思维导图: http://naotu.baidu.com/file/85634842b0e8e8630651d0fc5bf5b9a4
全栈程序员站长
2022/07/20
1.5K0
Docker核心技术学习笔记
🐟前端同学也能搞定 Docker:快速入门指南
前端掌握Docker要掌握到什么程度呢?其实只要能写DockerFile脚本就行了,至于深入原理和底层啊,看自己兴趣吧。毕竟Go我只会CRUD,反正目前对于我来说足够用了,下面我来介绍一下Docker水文和分享我在项目中如何使用Docker,反正就是简单粗暴,至于k8s容器编排,给我直接上腾讯云ok,毕竟我只是一个切图仔,最复杂我也只会用docker-compose,那就开始Docker之旅吧
linwu
2023/07/27
3620
🐟前端同学也能搞定 Docker:快速入门指南
两小时入门Docker
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。
秃头哥编程
2019/07/04
6500
Docker学习笔记
镜像是无法修改的,当运行一个镜像后,会产生一个容器,修改只在容器层上生效,当commit容器后会生成一个新的镜像,作为以后备用,以此类推,以后不断叠加,产生出新的镜像。就像虚拟机中的快照一样。
黄啊码
2022/06/20
6710
Docker 镜像的创建与构建私有库
一、Docker镜像的创建方法 docker镜像是除了docker的核心技术之外,也是应用发布的标准格式。一个完整的docker镜像可以支撑一个docker容器的运行,在docker的整个使用过程中,进入一个已经定型的容器之后,就可以在容器中进行操作,最常见的操作就是在容器中安装应用服务,如果要把已经安装的服务进行迁移,就需要把环境及搭建的服务生成新的镜像。
小手冰凉
2019/11/29
9390
一文带你了解 Docker 容器生命周期
在本文中,将介绍 Docker 的基本概念,包括容器和镜像的定义,以及 Docker 容器生命周期的各个阶段。我们还将讨论 Docker Hub 和 Docker Registry 的作用。
网络技术联盟站
2023/07/22
1.2K0
一文带你了解 Docker 容器生命周期
使用Docker镜像
镜像是Docker三大核心概念中最重要的一部分,而Docker运行容器前需要本地存在对应的镜像,如果镜像不存在,Docker会尝试从默认的镜像仓库中下载(默认使用Docker Hub公共注册服务器的仓库),用户也可以通过配置来使用自定义的镜像仓库,笔者在前面就自定义了镜像仓库。
啃饼思录
2020/10/26
1.2K0
《前端运维》三、Docker--1镜像与容器
  如果我们想要让软件运行起来,首先要保证操作系统的设置,其次还需要依赖各种组件和库的正确安装。那么虚拟机就是一种带环境安装的一种解决方案,它可以实现在一种操作系统里面运行另外一种操作系统,但是虚拟机的缺点也是十分明显的,资源占用多、冗余步骤多、启动速度慢。由于虚拟机存在的这些令人诟病的缺点。Linux发展出了另一种虚拟化技术,Linux Containers,即Linux容器,缩写为LXC。
zaking
2022/05/10
4840
《前端运维》三、Docker--1镜像与容器
相关推荐
Docker 快速入门(二)- 构建并运行您的镜像
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验