Docker 镜像及Docker仓库配置 [四]

本文介绍了Docker镜像的两种构建方式,包括手动构建和使用Dockerfile,并详细解释了Dockerfile的构建步骤。此外,文章讨论了Docker仓库的概念,如何解决非HTTPS仓库的连接问题,以及Docker Registry的使用和私有仓库Harbor的搭建。通过实例展示了如何制作镜像并上传到Docker仓库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker 镜像及Docker仓库配置 [四]

标签(空格分隔): Docker
时间:2016年11月8日15:45:20

**博客:www.abcdocker.com
微信公众号:abcdocker
笔者QQ:381493251
Abcdocker交流群:454666672
如果遇到什么问题可以进群询问,我们是一个乐于帮助的集体!**


一、Docker 镜像介绍

Docker镜像构建分为两种,一种是手动构建,另一种是Dockerfile(自动构建

Docker镜像手动构建案例:

我们基于centos镜像进行构建,制作nginx镜像

[root@linux-node1 ~]# docker run --name abcdocker -it centos
[root@026ae321431d /]# yum install wget -y
[root@026ae321431d /]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@026ae321431d /]# yum install nginx -y

我们需要修改nginx配置文件,让他运行在前台

[root@026ae321431d /]# vi /etc/nginx/nginx.conf
...
daemon off;
...

修改完之后我们退出

[root@linux-node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
026ae321431d        centos              "/bin/bash"         8 minutes ago       Exited (0) 4 seconds ago                       abcdocker

我们修改完之后需要commit

[root@linux-node1 ~]# docker commit -m "My Nginx" 026ae321431d abcdocker/abcdocker:v1
sha256:d1da04e088afa5bc005fbef9c75c6c4d4432df2f8fdda2ca16543638ec3682f4
[root@linux-node1 ~]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
abcdocker/abcdocker   v1                  d1da04e088af        4 minutes ago       386.5 MB
docker.io/nginx       latest              e43d811ce2f4        34 hours ago        181.4 MB
docker.io/centos      latest              980e0e4c79ec        6 weeks ago         196.7 MB

#注释
-m 描述
容器ID
第一个abcdocker是仓库的名称
第二个abcdocker是镜像的名称
v1 标签,如果是最后一个版本我们可以打latest

我们现在启动制作好的nginx镜像

[root@linux-node1 ~]# docker run --name nginxv1 -d -p 81:80 abcdocker/abcdocker:v1 nginx 
2827b5ff95363d4597928a1e094b4c267178350a6c23a075bda90fabff1c671e
我们要写镜像全称,带上标签

提示:后面的nginx不是镜像的nginx,而是服务的名称
  4.png-57.6kB
我们可以查看访问日志

[root@linux-node1 ~]# ./docker_in.sh nginxv1
[root@2827b5ff9536 /]# tail -f /var/log/nginx/access.log 
192.168.56.1 - - [23/Oct/2016:09:09:49 +0000] "GET / HTTP/1.1" 200 3700 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0" "-"
192.168.56.1 - - [23/Oct/2016:09:09:49 +0000] "GET /nginx-logo.png HTTP/1.1" 200 368 "http://192.168.56.11:81/" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0" "-"
192.168.56.1 - - [23/Oct/2016:09:09:49 +0000] "GET /poweredby.png HTTP/1.1" 200 2811 "http://192.168.56.11:81/" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0" "-"
192.168.56.1 - - [23/Oct/2016:09:09:49 +0000] "GET /favicon.ico HTTP/1.1" 404 3650 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0" "-"
192.168.56.1 - - [23/Oct/2016:09:09:49 +0000] "GET /favicon.ico HTTP/1.1" 404 3650 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0" "-"

以上就是手动构建nginx镜像

Dockerfile是由一行命令语句组成的

Dockerfile构建步骤:

[root@linux-node1 ~]# mkdir /dockerfile
[root@linux-node1 ~]# cd /dockerfile
[root@linux-node1 dockerfile]#
[root@linux-node1 dockerfile]# mkdir nginx
[root@linux-node1 dockerfile]# cd nginx/
[root@linux-node1 nginx]#
我们要在nginx目录上自动化创建一个nginx镜像

注意:D需要大写,当我们构建dockerfile的时候,docker默认会在我们当前目录读取一个名为Dockerfile的文件。这时候的D必须大写

[root@linux-node1 nginx]# cat Dockerfile
# This Dockerfile
# My Name is YuHongCong

# Base image
FROM centos

# Maintainer
MAINTAINER abcdocker xxx@gmail.com

#Commands
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum install -y nginx && yum clean all
RUN echo "daemon off;" >>/etc/nginx/nginx.conf
ADD index.html /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx"]
#井号代表注释
#Base image  除了注释的第一行,必须是FROM,意思就是我们需要告诉dockerfile基础镜像是什么
#Maintainer 维护信息

#Commands 命令

#ADD index.html 这个文件需要我们在当前目录下有才可以,我们配置我们可以准备好,然后使用ADD命令进行添加或修改
EXPOSE 对外端口号
CMD [“nginx”] 它要启动的命令是nginx (就算是nginx服务)

关于Dokcerfile文章:http://www.abcdocker.com/abcdocker/1724

我们写好dockerfile还需要一个index.html

[root@linux-node1 nginx]# echo www.abcdocker.com >index.html
[root@linux-node1 nginx]# ll
total 8
-rw-r--r-- 1 root root 368 Oct 23 18:04 Dockerfile
-rw-r--r-- 1 root root  18 Oct 23 18:06 index.html

提示:.代表构建的位置,我们是当前目录,我们使用docker build进行构建

[root@linux-node1 nginx]# docker build -t mynginx:v2 .

### 如何配置 Docker 镜像仓库 #### 使用 Docker 官方 Registry 构建私有镜像仓库 Docker官方提供了名为Docker Registry的基础版本来构建私有的Docker镜像仓库,该服务具有完整的仓库管理功能,不过它并不提供图形化界面[^2]。 为了启动一个简单的Registry实例,可以执行如下命令: ```bash docker run -d -p 5000:5000 --restart=always --name registry registry:2 ``` 这将在主机的`5000`端口上运行最新的稳定版Registry容器,并设置重启策略为始终自动重启。一旦部署完成,在推送或拉取镜像时就可以指定这个自定义的Registry地址了。 对于安全性考虑,建议通过HTTPS访问Registry,这就涉及到SSL证书的配置工作;另外还可以结合认证机制进一步增强安全防护措施。 #### 利用 Nexus 来创建更复杂的解决方案 除了官方提供的Registry外,也可以基于其他成熟的软件产品如Sonatype Nexus Repository Manager来进行更加复杂的企业级Docker镜像库建设[^3]。Nexus支持多种类型的存储库管理和分发协议,因此非常适合用来作为统一的二进制文件和依赖项管理中心。 要在Nexus中启用Docker支持并将其配置成内部镜像仓库,则需按照以下方式操作: 1. 登录到Nexus Web UI; 2. 创建一个新的Repository,选择类型为`docker (hosted)`; 3. 设置必要的参数选项,比如Blob Store路径、HTTP端口号等; 4. 启用V1兼容模式以便于旧客户端连接(可选); 5. 应用更改保存设置。 当一切准备就绪之后,便可以通过修改Docker守护进程配置或者环境变量的方式让开发者们能够方便快捷地使用新建立起来的服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值