一、創建鏡像
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
步驟:
- 創建鏡像所在文件夾與Dockerfile文件
- 編寫dockerfile文件 ,dockerfile知識點請點擊
- 創建鏡像
- 創建容器
例如使用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官方文檔