Docker建立私有仓库的过程
Docker 是一款基于 Linux 的轻量级虚拟化,可以快速部署和管理容器化应用程序,它广泛应用于开发、测试、部署等环节。 Docker Hub 是 Docker 的云服务平台,可以让你共享或者获取 Docker 的 image。但是,在特殊场景下,如网络不便、代码私密性要求等情况下,我们需要自建 Docker 私有仓库来存储自己的 Docker image。私有仓库可以在局域网内提供高效、便捷的镜像服务,极大的提高了开发效率。
下面是 Docker 建立私有仓库的完整攻略。
一、创建用于存储 image 的目录
首先,我们需要在自己的服务器上创建一个目录,用于存储 Docker image。这个目录可以是任意的,例如:
sudo mkdir -p /data/docker_registry
sudo chown -R www-data:www-data /data/docker_registry
其中,docker_registry 目录是存放 Docker image 的目录,www-data 用户组是访问该目录的用户组。
二、安装 Docker
在创建好 Docker image 存储目录之后,我们需要安装 Docker,安装 Docker 可以参考官方的文档,这里就不再赘述。
三、创建 Docker Registry 容器
在安装 Docker 后,我们需要构建 Docker Registry image,并在 Docker 容器中运行该 image。
1. 构建 Docker Registry Image
我们可以使用 Docker 官方提供的 Registry Image,也可以根据自己的需求构建 Registry Image。
docker pull registry:2.7.1
docker tag registry:2.7.1 my-registry:1.0
其中,registry:2.7.1 是 Docker 官方提供的 Docker Registry Image,my-registry:1.0 是我们为该 Docker image 自定义的镜像名称和版本号。
2. 启动 Docker Registry 容器
使用以下命令启动 Docker Registry 容器:
docker run -d -p 5001:5000 --name my-registry -v /data/docker_registry:/var/lib/registry my-registry:1.0
其中:
- -d 表示以后台方式运行容器;
- -p 表示发布容器的端口,这里发布容器的端口为 5001,实际可以自定义;
- --name 指定容器的名称为 my-registry;
- -v 表示容器的内部目录挂载到本地的目录,这里/var/lib/registry 目录挂载到 /data/docker_registry 目录。这样,容器中的 image 文件就可以存储在 /data/docker_registry 目录;
- my-registry:1.0 是我们自定义的 Docker Registry 镜像名称和版本号。
3. 配置 Docker
我们需要配置 Docker,使它在向私有仓库中 push 和 pull image 时可以正确识别。
可以在 /etc/docker/daemon.json 中配置,如果没有该文件,可以新建一个。
{
"insecure-registries":["my-registry:5001"]
}
其中,my-registry:5001 是我们上面创建的 Docker Registry 容器的 IP 地址和端口。
4. 重启 Docker 服务
修改完 /etc/docker/daemon.json 后,我们需要重启 Docker 服务。
sudo systemctl restart docker
四、向私有仓库中 push 和 pull image
在 Docker Registry 容器中启动成功后,我们就可以使用 docker push 和 docker pull 命令向私有仓库中 push 和 pull image 了。
push image
我们需要为 Docker image 添加 tag,指定为我们自己的私有仓库名。
docker tag my-image:latest my-registry:5001/my-image:latest
备注:
- my-image:latest 是我们本地要 push 到 Docker Registry 容器中的镜像名称和版本号;
- my-registry:5001 是私有仓库的 IP 地址和端口;
- my-image:latest 是我们想要 push 到私有仓库的镜像名称和版本号。
然后,我们可以使用 docker push 命令将镜像推送到私有仓库中:
docker push my-registry:5001/my-image:latest
pull image
我们可以使用 docker pull 命令从私有仓库中 pull image。
docker pull my-registry:5001/my-image:latest
五、示例
下面,我们以 Node.js 的应用为例来演示如何构建 Docker image 并 push 到私有仓库中。
1. 编写 Node.js 应用
我们首先需要编写一个 Node.js 应用,这里简单起见,我们只编写了一个简单的 HTTP Server。
const http = require('http');
const hostname = '0.0.0.0';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
将这个文件保存为 index.js。
2. 编写 Dockerfile
在 Node.js 应用编写完后,我们需要构建 Docker image,下面是一个简单的 Dockerfile。
FROM node:12
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "npm", "start" ]
在上述 Dockerfile 中,我们首先使用 node:12 镜像作为基础镜像,然后将当前目录下的 package*.json 文件拷贝到镜像中,运行 npm install 安装应用程序的依赖包,最后拷贝整个当前目录到镜像中,暴露容器的端口为 3000,指定应用程序的启动命令为 npm start。
3. 构建 Docker image 并 push 到私有仓库中
在编写完 Dockerfile 后,我们需要使用 docker build 命令构建 Docker image。
docker build -t my-registry:5001/my-node-app:1.0 .
其中:
- -t my-registry:5001/my-node-app:1.0 指定要构建的 Docker image 的名称和版本号;
- . 表示 Dockerfile 文件在当前目录下。
构建成功后,我们可以使用 docker push 命令将 Docker image 推送到私有仓库中。
docker push my-registry:5001/my-node-app:1.0
成功推送到私有仓库中后,我们可以使用 docker pull 命令从私有仓库中 pull image。
docker pull my-registry:5001/my-node-app:1.0
结论
私有仓库提供了更加安全、可靠、高效的 image 管理服务,我们可以在自己的局域网中建立 Docker 私有仓库,极大的提高 image 的管理和部署效率。本篇攻略详细讲解了 Docker 建立私有仓库的过程,同时提供了两个简单的示例说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:docker建立私有仓库的过程 - Python技术站