自定义镜像
1.使用docker run启动一个容器,对容器进行配置,然后使用docker commit保存为新镜像
docker run -it docker.io/centos:latest
docker commit 容器ID 镜像名:标签 #保存容器为新镜像
2.使用Dockerfile制作新镜像
Dockerfile语法格式
- FROM:指定基础镜像
- MAINTAINER:镜像创建者信息
- EXPOSE:开放的端口
- ENV:设置变量
- ADD:复制文件到镜像
- RUN:制作镜像时执行的命令,可以有多个
- WORKDIR:定义容器默认工作目录,相当于cd到目录下
- CMD:容器启动时执行的命令,仅可以有一条CMD
] mkdir docker_build
] cd docker_build
] vim Dockerfile #文件名不可自定义
FROM docker.io/centos:latest
RUN cp -a /etc/yum.repos.d/* /root
ADD local.repo /root/l.repo
RUN yum -y install httpd
] docker build -t 镜像名:标签 Dockerfile所在目录
] docker build -t myos:test .
3.制作httpd服务容器
- 编写Dockerfile文件所需命令可以先开启一个容器手动执行一遍后history查看
] docker run -it docker.io/centos:latest
yum -y install httpd
rpm -ql httpd | grep system
vim /usr/lib/systemd/system/httpd.service #查看服务启动的命令和需要设置的变量
LANG=C #手动设置变量
sed -i 98s/\#// /etc/httpd/conf/httpd.conf
echo "Hello World" > /var/www/html/index.html
/usr/sbin/httpd -DFOREGROUND
ss -lntup
- 编写Dockerfile文件
] vim Dockerfile
FROM docker.io/centos:latest
RUN yum -y install httpd
RUN sed -i 98s/\#// /etc/httpd/conf/httpd.conf
WORKDIR /var/www/html
ADD index.html index.html
ENV LANG=C
EXPOSE 80
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
] docker build -t myos:httpd .
自定义镜像仓库registry
- 共享镜像的一台服务器(192.168.1.30)
yum -y install docker-distribution
systemctl start docker-distribution
systemctl enable docker-distribution
查看仓库镜像名称
curl http://192.168.1.30:5000/v2/_catalog
查看仓库镜像标签
curl http://192.168.1.30:5000/v2/镜像名称/tags/list
文件 | 说明 |
---|---|
/etc/docker-distribution/registry/config.yml | 配置文件 |
/var/lib/registry/ | 数据存储路径 |
- 客户端配置
docker1.12版本
] vim /etc/sysconfig/docker
INSECURE_REGISTRY='--insecure-registry 192.168.1.30:5000' #指定仓库ip和端口
ADD_REGISTRY='--add-registry 192.168.1.30:5000'
] systemctl restart docker
docker1.13版本可以使用上面的方法,也可以:
] vim /etc/docker/daemon.json
{ "insecure-registries":["192.168.1.30:5000"] }
] systemctl restart docker
- 私有仓库镜像push|pull
[root@docker1 ~] docker tag docker.io/busybox:latest 192.168.1.30:5000/busybox:latest #打标签
[root@docker1 ~] docker push 192.168.1.30:5000/busybox:latest #上传
[root@docker1 ~] docker tag docker.io/myos:httpd 192.168.1.30:5000/myos:httpd
[root@docker1 ~] docker push 192.168.1.30:5000/myos:httpd
[root@docker2 ~] docker run -itd 192.168.1.30:5000/myos:httpd #可以直接运行容器,也可以docker pull拉取镜像