一、创建镜像
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官方文档