如何在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。