本文概述
Docker Registry是一个软件应用程序, 可让你在组织内创建和存储映像。
你还可以在Docker Hub公共注册表上创建和上传映像。但是, 这些图像变为公开图像, 任何人都可以访问和使用你的图像。因此, 建议使用允许你控制和保护映像的Docker私有注册表。
在本教程中, 我将解释如何在Ubuntu 18.04上设置Docker私有注册表。
要求
- 两台具有根凭据的Ubuntu服务器
- 两台服务器上的静态IP地址
入门
在开始之前, 你将需要在两个系统上都配置主机名解析。因此, 两个系统都可以通过主机名相互通信。
为此, 请在两个系统上运行以下命令:
echo "192.168.0.100 server" >> /etc/hosts
echo "192.168.0.102 client" >> /etc/hosts
完成后, 你可以继续下一步。
安装Docker
接下来, 你将需要在两个系统上安装Docker软件包。默认情况下, Docker在Ubuntu 18.04默认存储库中不可用。因此, 你将需要添加它们。
首先, 使用以下命令安装所需的软件包:
apt-get install apt-transport-https software-properties-common ca-certificates curl -y
接下来, 使用以下命令添加Docker存储库:
wget https://download.docker.com/linux/ubuntu/gpg
apt-key add gpg
echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" | tee /etc/apt/sources.list.d/docker.list
接下来, 更新存储库并使用以下命令安装Docker:
apt-get update -y
apt-get install docker-ce -y
安装完成后, 使用以下命令检查docker的状态:
systemctl status docker
你应该看到以下输出:
docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2019-05-01 15:08:45 UTC; 7min ago
Docs: https://docs.docker.com
Main PID: 2658 (dockerd)
Tasks: 8
CGroup: /system.slice/docker.service
└─2658 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
安装Docker Registry Container
首先, 你需要在服务器系统上安装注册表容器。你可以通过运行以下命令来做到这一点:
docker pull registry
下载注册表映像后, 应该会看到以下输出:
Using default tag: latest
latest: Pulling from library/registryc
87736221ed0: Pull complete
1cc8e0bb44df: Pull complete
54d33bcb37f5: Pull complete
e8afc091c171: Pull complete
b4541f6d3db6: Pull complete
Digest: sha256:3b00e5438ebd8835bcfa7bf5246445a6b57b9a50473e89c02ecc8e575be3ebb5
Status: Downloaded newer image for registry:latest
接下来, 使用以下命令启动注册表容器:
docker run -d -p 5000:5000 --restart=always --name registry registry
你可以使用以下命令查看正在运行的注册表容器:
docker ps
你应该看到以下输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4912e461745f registry "/entrypoint.sh /etc…" About a minute ago Up About a minute 0.0.0.0:5000->5000/tcp registry
在客户端系统上创建Docker容器映像
你的注册表服务器现在可以使用了。是时候在客户端系统上创建Docker容器映像了。
首先, 登录到客户端系统并创建一个dockerfile来构建Nginx Web服务器映像:
mkdir Image
cd Image
nano dockerfile
添加以下行:
FROM ubuntu:18.04
LABEL project="Nginx Web Server Image"
LABEL maintainer "[email protected]"
RUN \a
pt-get update && \
apt-get install -y nginx && \
rm -rf /var/lib/apt/lists/* && \
echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \
chown -R www-data:www-data /var/lib/nginx
# Define mountable directories.
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]
# Define working directory.WORKDIR /etc/nginx
# Define default command.CMD ["nginx"]
# Expose ports.
EXPOSE 80
EXPOSE 443
保存并关闭文件。然后, 通过运行以下命令来构建Nginx映像:
docker build -t ubuntu:nginx .
成功构建Nginx映像后, 你应该看到以下输出:
---> bc6e61406108
Step 5/9 : VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]
---> Running in 30832b7ff816
Removing intermediate container 30832b7ff816
---> 1940ec1c2225Step 6/9 : WORKDIR /etc/nginx
---> Running in 88755ef2d7c8
Removing intermediate container 88755ef2d7c8
---> 4fe930c96a73Step 7/9 : CMD ["nginx"]
---> Running in c8d492317d88
Removing intermediate container c8d492317d88
---> 3218acfd15f8Step 8/9 : EXPOSE 80
---> Running in 35921ef45db9Removing intermediate container 35921ef45db9
---> a6a299b86a6dStep 9/9 : EXPOSE 443
---> Running in 755441cefe2f
Removing intermediate container 755441cefe2f
---> 9be7dc6b0825
Successfully built 9be7dc6b0825
Successfully tagged ubuntu:nginx
接下来, 你可以使用以下命令检查生成的图像:
docker images
你应该在以下输出中看到你的nginx图像:
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu nginx 9be7dc6b0825 About a minute ago 161MB
ubuntu 18.04 d131e0fa2585 4 days ago 102MB
registry latest f32a97de94e1 7 weeks ago 25.8MB
接下来, 你将需要以” registryserver:端口号/图像名称:标签”格式重命名nginx图像。
你可以使用以下命令进行操作:
docker tag ubuntu:nginx server:5000/ubuntu:nginx
在私有注册表服务器上上传Nginx映像
现在, 你可以使用push命令将生成的Nginx映像上载到Private Registry Server:
docker push server:5000/ubuntu:nginx
图像成功上传后, 你将看到以下输出:
The push refers to repository [server:5000/ubuntu]
2e5us8en4s9d: Pushed
l1is9e9d8j7e: Pushed
nginx: digest: sha256:aa0d8fi49dir0d7rn33nee122b size: 1862
你还可以使用以下命令从注册表服务器下载上载的图像:
docker pull server:5000/ubuntu:nginx
我希望你现在已有足够的知识来在生产服务器上设置自己的私有Docker注册表服务器。如果你希望获得更多的Docker动手知识, 请查看此在线课程。
评论前必须登录!
注册