网站首页 > 博客文章 正文
Dockerfile 和搭建 Docker 私有仓库:让容器化部署变得更简单
Docker 是一种轻量级的虚拟化技术,通过使用容器来部署应用,使得应用更加便捷、快速、独立地运行。本文将详细介绍如何编写 Dockerfile 并搭建 Docker 私有仓库,以实现容器化部署。
一、Dockerfile 基础知识
Dockerfile 是用于构建 Docker 镜像的文本文件,包含了一系列指令。以下是一个简单的 Dockerfile 示例:
# 使用官方的 Node.js 镜像作为基础镜像
FROM node:14
# 设置工作目录
WORKDIR /app
# 复制 package.json 和 package-lock.json
COPY package*.json ./
# 安装依赖
RUN npm install
# 复制应用程序代码
COPY . .
# 暴露端口
EXPOSE 3000
# 启动应用程序
CMD ["node", "app.js"]
每一行命令的解释:
- FROM node:14:指定基础镜像为 Node.js 14 版本。
- WORKDIR /app:设置工作目录为 /app。
- COPY package*.json ./:将 package.json 和 package-lock.json 复制到工作目录。
- RUN npm install:安装项目依赖。
- COPY . .:将当前目录下的所有文件复制到工作目录。
- EXPOSE 3000:暴露应用运行的端口 3000。
- CMD ["node", "app.js"]:指定容器启动时运行的命令。
二、构建和运行 Docker 镜像
- 构建镜像:
- docker build -t my-node-app .
- docker build:构建 Docker 镜像。
- -t my-node-app:为构建的镜像指定名称 my-node-app。
- .:指定 Dockerfile 所在目录。
- 运行容器:
- docker run -p 3000:3000 my-node-app
- docker run:运行 Docker 容器。
- -p 3000:3000:将主机的 3000 端口映射到容器的 3000 端口。
- my-node-app:指定运行的镜像名称。
三、搭建 Docker 私有仓库
Docker 私有仓库(Registry)允许我们存储和分发 Docker 镜像,保证镜像的私密性和安全性。
- 安装 Docker Registry:
- docker run -d -p 5000:5000 --name registry --restart=always -v /opt/registry/data:/var/lib/registry registry:2
- docker run:运行 Docker 容器。
- -d:后台运行容器。
- -p 5000:5000:将主机的 5000 端口映射到容器的 5000 端口。
- --name registry:指定容器名称为 registry。
- --restart=always:设置容器自动重启策略。
- -v /opt/registry/data:/var/lib/registry:将主机的 /opt/registry/data 目录挂载到容器的 /var/lib/registry 目录。
- registry:2:使用 Docker 官方 Registry 镜像版本 2。
- 配置 Docker 客户端:
- 编辑 /etc/docker/daemon.json 文件,添加私有仓库地址:{ "insecure-registries": ["your-private-registry:5000"] }
- 重启 Docker 服务:sudo systemctl restart docker
- 推送镜像到私有仓库:
- docker tag my-node-app your-private-registry:5000/my-node-app docker push your-private-registry:5000/my-node-app
- docker tag:为镜像打标签,指定私有仓库地址。
- docker push:将镜像推送到私有仓库。
- 从私有仓库拉取镜像并运行:
- docker pull your-private-registry:5000/my-node-app docker run -p 3000:3000 your-private-registry:5000/my-node-app
四、配置私有仓库的安全性
为确保私有仓库的安全,可以使用 HTTPS 和基本身份认证。
- 生成自签名证书:
- mkdir -p certs openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt
- mkdir -p certs:创建存放证书的目录。
- openssl req:生成自签名证书。
- -newkey rsa:4096:生成 4096 位 RSA 密钥。
- -nodes:不加密密钥。
- -sha256:使用 SHA-256 哈希算法。
- -keyout certs/domain.key:密钥输出文件。
- -x509:生成自签名证书。
- -days 365:证书有效期 365 天。
- -out certs/domain.crt:证书输出文件。
- 使用 HTTPS 启动 Docker Registry:
- docker run -d \ -p 5000:5000 \ --name registry \ --restart=always \ -v /opt/registry/data:/var/lib/registry \ -v /path/to/certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ registry:2
- 设置基本身份认证:
- docker run --entrypoint htpasswd registry:2 -Bbn your_username your_password > auth/htpasswd
- --entrypoint htpasswd:使用 htpasswd 工具生成密码文件。
- -Bbn:使用 bcrypt 哈希算法,不进行交互式输入。
- auth/htpasswd:输出密码文件。
- 使用 HTTPS 和基本认证启动 Docker Registry:
- docker run -d \ -p 5000:5000 \ --name registry \ --restart=always \ -v /opt/registry/data:/var/lib/registry \ -v /path/to/certs:/certs \ -v /path/to/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ registry:2
思维导图
通过以上内容,您可以详细了解如何编写 Dockerfile 并搭建 Docker 私有仓库,以实现容器化部署。希望这些内容能够帮助您更好地掌握 Docker 技术,并应用于实际的开发和运维工作中。
猜你喜欢
- 2024-11-06 docker仓库Harbor的搭建教程(docker 仓库搭建)
- 2024-11-06 【服务器】创建docker私有仓库从未如此简单
- 2024-11-06 DOCKER本地仓库(docker本地仓库源文件丢失)
- 2024-11-06 如何搭建自己的docker私有仓库(内网搭建docker私有仓库)
- 2024-11-06 学习笔记-Docker 仓库 - 私有仓库
- 2024-11-06 手把手教你使用Docker部署Gitlab仓库
- 2024-11-06 极简Docker仓库操作(docker仓库的作用)
- 2024-11-06 docker容器仓库私服建立(docker仓库的创建)
- 2024-11-06 Docker 系列四(自定义仓库)(docker安装自定义存储目录)
- 2024-11-06 Docker 搭建 GibLab 代码管理仓库
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)