专业的编程技术博客社区

网站首页 > 博客文章 正文

蓝易云 - Dockerfile和搭建Docker仓库:让容器化部署变得更简单

baijin 2024-11-06 09:34:49 博客文章 5 ℃ 0 评论

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"]

每一行命令的解释:

  1. FROM node:14:指定基础镜像为 Node.js 14 版本。
  2. WORKDIR /app:设置工作目录为 /app。
  3. COPY package*.json ./:将 package.json 和 package-lock.json 复制到工作目录。
  4. RUN npm install:安装项目依赖。
  5. COPY . .:将当前目录下的所有文件复制到工作目录。
  6. EXPOSE 3000:暴露应用运行的端口 3000。
  7. CMD ["node", "app.js"]:指定容器启动时运行的命令。

二、构建和运行 Docker 镜像

  1. 构建镜像
  2. docker build -t my-node-app .
  3. docker build:构建 Docker 镜像。
  4. -t my-node-app:为构建的镜像指定名称 my-node-app。
  5. .:指定 Dockerfile 所在目录。
  6. 运行容器
  7. docker run -p 3000:3000 my-node-app
  8. docker run:运行 Docker 容器。
  9. -p 3000:3000:将主机的 3000 端口映射到容器的 3000 端口。
  10. my-node-app:指定运行的镜像名称。

三、搭建 Docker 私有仓库

Docker 私有仓库(Registry)允许我们存储和分发 Docker 镜像,保证镜像的私密性和安全性。

  1. 安装 Docker Registry
  2. docker run -d -p 5000:5000 --name registry --restart=always -v /opt/registry/data:/var/lib/registry registry:2
  3. docker run:运行 Docker 容器。
  4. -d:后台运行容器。
  5. -p 5000:5000:将主机的 5000 端口映射到容器的 5000 端口。
  6. --name registry:指定容器名称为 registry。
  7. --restart=always:设置容器自动重启策略。
  8. -v /opt/registry/data:/var/lib/registry:将主机的 /opt/registry/data 目录挂载到容器的 /var/lib/registry 目录。
  9. registry:2:使用 Docker 官方 Registry 镜像版本 2。
  10. 配置 Docker 客户端
  11. 编辑 /etc/docker/daemon.json 文件,添加私有仓库地址:{ "insecure-registries": ["your-private-registry:5000"] }
  12. 重启 Docker 服务:sudo systemctl restart docker
  13. 推送镜像到私有仓库
  14. docker tag my-node-app your-private-registry:5000/my-node-app docker push your-private-registry:5000/my-node-app
  15. docker tag:为镜像打标签,指定私有仓库地址。
  16. docker push:将镜像推送到私有仓库。
  17. 从私有仓库拉取镜像并运行
  18. docker pull your-private-registry:5000/my-node-app docker run -p 3000:3000 your-private-registry:5000/my-node-app

四、配置私有仓库的安全性

为确保私有仓库的安全,可以使用 HTTPS 和基本身份认证。

  1. 生成自签名证书
  2. mkdir -p certs openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt
  3. mkdir -p certs:创建存放证书的目录。
  4. openssl req:生成自签名证书。
  5. -newkey rsa:4096:生成 4096 位 RSA 密钥。
  6. -nodes:不加密密钥。
  7. -sha256:使用 SHA-256 哈希算法。
  8. -keyout certs/domain.key:密钥输出文件。
  9. -x509:生成自签名证书。
  10. -days 365:证书有效期 365 天。
  11. -out certs/domain.crt:证书输出文件。
  12. 使用 HTTPS 启动 Docker Registry
  13. 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
  14. 设置基本身份认证
  15. docker run --entrypoint htpasswd registry:2 -Bbn your_username your_password > auth/htpasswd
  16. --entrypoint htpasswd:使用 htpasswd 工具生成密码文件。
  17. -Bbn:使用 bcrypt 哈希算法,不进行交互式输入。
  18. auth/htpasswd:输出密码文件。
  19. 使用 HTTPS 和基本认证启动 Docker Registry
  20. 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 技术,并应用于实际的开发和运维工作中。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表