【Docker】創建鏡像+私有倉庫搭建

在這裏插入圖片描述


一、創建鏡像

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官方文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章