【Docker】创建镜像+私有仓库搭建

本文介绍如何使用Dockercommit创建镜像及通过Dockerfile构建复杂镜像的过程,并详细展示了搭建和使用Docker私有仓库的步骤。

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

在这里插入图片描述


一、创建镜像

1. 方式一:

docker commit :从一个容器的改变中创建一个新的镜像
用法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
参数:

  • -a :提交的镜像作者
  • -c :使用Dockerfile指令来创建镜像
  • -m :添加注释
  • -p :提交时暂停容器运行
  • –help:帮助

示例:

[root@client ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
95d1b505bdfc        mysql               "docker-entrypoint..."   5 minutes ago       Created                                 mysql_all
[root@client ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.85.130:5000/mysql   latest              7bb2586065cd        3 weeks ago         477 MB
[root@client ~]# docker commit -m "mysql version1" -a "tong" 95d1b505bdfc mysqlall:v1
sha256:8a054348d287ec9d62be770253461acbea366494dfce5d488d90b70dd154333b
[root@client ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
mysqlall                    v1                  8a054348d287        2 seconds ago       477 MB
192.168.85.130:5000/mysql   latest              7bb2586065cd        3 weeks ago         477 MB
2. 方式二:
  • 使用Dockerfile

步骤:

  1. 创建镜像所在文件夹与Dockerfile文件
  2. 编写dockerfile文件 ,dockerfile知识点请点击
  3. 创建镜像
  4. 创建容器

例如使用Dockerfile创建nginx镜像

FROM centos:7
#MAINTAINER 维护者信息
MAINTAINER nginx1
#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
#RUN 执行以下命令
RUN yum install -y vim less wget curl pcre-devel wget net-tools gcc zlib zlib-devel make openssl-devel tar
#ADD  文件放在/root下,拷过去会自动解压
ADD http://nginx.org/download/nginx-1.8.0.tar.gz /root
RUN tar zxf /root/nginx-1.8.0.tar.gz
RUN mkdir -p /usr/local/nginx
#WORKDIR 相当于cd
WORKDIR /root/nginx-1.8.0
#定义服务器文件的完整路径
RUN ./configure --prefix=/usr/local/nginx && make && make install
RUN rm -rf /usr/local/nginx/conf/nginx.conf
COPY .nginx_conf /usr/local/nginx/conf/nginx.conf
#EXPOSE 映射端口
EXPOSE 80 443
#ENTRYPOINT 运行以下命令
ENTRYPOINT ["nginx"]
ENTRYPOINT ["nginx", "-h"]
#CMD 运行以下命令
CMD ["-v"]

docker build -t centos_nginx . 其中 . 代表Dockerfile 所在的文件的路径

二、搭建docker私有仓库

(1)设置

服务端机器 (docker)192.168.85.130运行registry容器
测试端机器 (client)192.168.85.138

(2)实际操作

  • 服务器端
[root@docker ~]# yum -y install docker
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: mirrors.aliyun.com
                     ............
Installed:
  docker.x86_64 2:1.13.1-94.gitb2f74b2.el7.centos                                                                            
..............           
Complete!
[root@docker ~]#  systemctl start docker  //启动docker 
[root@docker ~]# docker -v  
Docker version 1.13.1, build b2f74b2/1.13.1
[root@docker ~]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-94.gitb2f74b2.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      b2f74b2/1.13.1
 Built:           Tue Mar 12 10:27:24 2019
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-94.gitb2f74b2.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      b2f74b2/1.13.1
 Built:           Tue Mar 12 10:27:24 2019
 OS/Arch:         linux/amd64
 Experimental:    false
[root@docker ~]# docker pull registry  //拉取镜像
Using default tag: latest
Trying to pull repository docker.io/library/registry ... 
latest: Pulling from docker.io/library/registry
c87736221ed0: Pull complete 
1cc8e0bb44df: Pull complete 
54d33bcb37f5: Pull complete 
e8afc091c171: Pull complete 
b4541f6d3db6: Pull complete 
Digest: sha256:3b00e5438ebd8835bcfa7bf5246445a6b57b9a50473e89c02ecc8e575be3ebb5
Status: Downloaded newer image for docker.io/registry:latest
[root@docker ~]# docker images   //查看
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
docker.io/registry   latest              f32a97de94e1        6 weeks ago         25.8 MB
[root@docker ~]# docker run -d -p 5000:5000 registry  //运行
fcc75dc477b3063f24c9b31bcfc3fc48d919d884a359e4464a30d5331e77b93c
[root@docker ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
fcc75dc477b3        registry            "/entrypoint.sh /e..."   12 seconds ago      Up 11 seconds       0.0.0.0:5000->5000/tcp   confident_panini
[root@docker ~]# docker exec -it  fcc75dc477b3  /bin/sh  //进入容器中
/ #  netstat -lnp      //查看服务情况
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 :::5000                 :::*                    LISTEN      1/registry
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path
/ #  
  • 客户机端
[root@client ~]# systemctl stop firewalld.service 
[root@client ~]# setenforce 0
[root@client ~]# getenforce 
Permissive
[root@client ~]# yum -y install docker  //安装
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
..................
Complete!
[root@client ~]# systemctl start docker  //启动docker
[root@client ~]# docker -v             //docker版本
Docker version 1.13.1, build b2f74b2/1.13.1
[root@client ~]# docker pull mysql  //拉取镜像
Using default tag: latest
Trying to pull repository docker.io/library/mysql ... 
latest: Pulling from docker.io/library/mysql
27833a3ba0a5: Pull complete 
864c283b3c4b: Pull complete 
.................
902e6010661d: Pull complete 
dbe44d2bf055: Pull complete 
e906385f419d: Pull complete 
Digest: sha256:a7cf659a764732a27963429a87eccc8457e6d4af0ee9d5140a3b56e74986eed7
Status: Downloaded newer image for docker.io/mysql:latest
[root@client ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql     latest              7bb2586065cd        3 weeks ago         477 MB
[root@client ~]# docker tag mysql 192.168.85.130:5000/mysql  //打标签
[root@client ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.85.130:5000/mysql   latest              7bb2586065cd        3 weeks ago         477 MB
docker.io/mysql             latest              7bb2586065cd        3 weeks ago         477 MB
[root@client ~]# docker push 192.168.85.130:5000/mysql  //上传失败
The push refers to a repository [192.168.85.130:5000/mysql]
Get https://192.168.85.130:5000/v1/_ping: http: server gave HTTP response to HTTPS client
[root@client ~]# vim  /etc/docker/daemon.json   //修改json文件,因为通信时一个使用的是HTTP,一个是HTTPS需修改
[root@client ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["192.168.85.130:5000"]
}
[root@client ~]# systemctl restart docker
[root@client ~]# docker push 192.168.85.130:5000/mysql   //重新上传生成的镜像
The push refers to a repository [192.168.85.130:5000/mysql]
b3318162e91a: Pushed 
b5e500c1e699: Pushed 
8dd5a21494bb: Pushed 
1717d824958a: Pushed 
67f6124a308a: Pushed 
97874ea0e7f9: Pushed 
458d25c646d8: Pushed 
ec41e34b35a0: Pushed 
3437f67a712b: Pushed 
0aa7d65147ef: Pushed 
f411d8bde01c: Pushed 
5dacd731af1b: Pushed 
latest: digest: sha256:f2dc118ca6fa4c88cde5889808c486dfe94bccecd01ca626b002a010bb66bcbe size: 2828
[root@client ~]# docker images   //查看docker镜像
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.85.130:5000/mysql   latest              7bb2586065cd        3 weeks ago         477 MB
docker.io/mysql             latest              7bb2586065cd        3 weeks ago         477 MB
[root@client ~]# docker rmi -f $(docker images -aq)  //删除本地所有docker镜像
Untagged: 192.168.85.130:5000/mysql:latest
Untagged: 192.168.85.130:5000/mysql@sha256:f2dc118ca6fa4c88cde5889808c486dfe94bccecd01ca626b002a010bb66bcbe
Untagged: docker.io/mysql:latest
Untagged: docker.io/mysql@sha256:a7cf659a764732a27963429a87eccc8457e6d4af0ee9d5140a3b56e74986eed7
Deleted: sha256:7bb2586065cd50457e315a5dab0732a87c45c5fad619c017732f5a13e58b51dd
Deleted: sha256:5362a97701b6ba3d39453e9e8b435b4cc3d7b493fb506780b8e2ec9c3ee20b8e
Deleted: sha256:91ae6166a0c2de34f36c2bb6b66ba3782ec6186337b87362961fad845f5ce236
Deleted: sha256:ae307e2a0c006325d4b96c1f0a40b1ae35cf9a034435ec9925291dafed69e01f
.......................
[root@client ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@client ~]# docker pull 192.168.85.130:5000/mysql    //从私有仓库中拉取镜像
Using default tag: latest
Trying to pull repository 192.168.85.130:5000/mysql ... 
latest: Pulling from 192.168.85.130:5000/mysql
27833a3ba0a5: Pull complete 
864c283b3c4b: Pull complete 
cea281b2278b: Pull complete 
8f856c14f5af: Pull complete 
9c4f38c23b6f: Pull complete 
1b810e1751b3: Pull complete 
5479aaef3d30: Pull complete 
ded8fa2e1614: Pull complete 
636033ba4d2e: Pull complete 
902e6010661d: Pull complete 
dbe44d2bf055: Pull complete 
e906385f419d: Pull complete 
Digest: sha256:f2dc118ca6fa4c88cde5889808c486dfe94bccecd01ca626b002a010bb66bcbe
Status: Downloaded newer image for 192.168.85.130:5000/mysql:latest
[root@client ~]# docker images   
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.85.130:5000/mysql   latest              7bb2586065cd        3 weeks ago         477 MB
[root@client ~]# curl  http://192.168.85.130:5000/v2/_catalog  //列出所有镜像:
{"repositories":["mysql"]}

附:获取某个镜像的标签列表
[root@client ~]# curl -XGEThttp://X.X.X.X:PORT/v2/image_name/tags/list

如果想要更加详细了解,可以访问Docker官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值