如何在Ubuntu 18上设置Docker私有仓库?

Docker Registry是一个允许您在组织内创建和存储映像的软件应用程序。

您也可以在公共注册表的Hub上创建和上传映像。但是,这些映像将变为公开的,任何人都可以访问和使用您的映像。因此,建议使用Docker私有注册表来控制和保护您的映像。

在本教程中,我将解释如何在Ubuntu 18.04上设置Docker私有注册表。

要求

  • 两台具有root凭据的Ubuntu服务器
  • 两台服务器上的静态IP地址

入门

在开始之前,您需要在两个系统上配置主机名解析。这样,两个系统可以通过主机名进行通信。

为此,在两个系统上运行以下命令:

echo "192.168.0.100 server" >> /etc/hosts
echo "192.168.0.102 client" >> /etc/hosts

完成后,您可以继续下一步。

安装Docker

接下来,您需要在两个系统上安装Docker包。默认情况下,Ubuntu 18.04默认存储库中没有提供Docker。因此,您需要添加它们。

首先,使用以下命令安装所需的软件包:

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注册表容器

首先,您需要在服务器系统上安装注册表容器。通过运行以下命令可以完成:

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:portnumber/image name:tag”格式重命名您的nginx映像。

您可以使用以下命令完成:

docker tag ubuntu:nginx server:5000/ubuntu:nginx

在私有注册表服务器上上传Nginx映像

现在,您可以使用push命令将生成的Nginx映像上传到私有注册表服务器:

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实践操作,请查看此online course

类似文章