Tabla de contenido
Uno, imagen de Docker
1.1, tres formas de construir un espejo
■ dockerfile
■ Crear imagen en función de contenedor de imagen existente
■ Construir sobre la base de la plantilla local,
1.2, la superposición de imágenes de la ventana acoplable
■ Cada instrucción en el Dockerfile creará una nueva capa de imagen
■ La capa de imagen se almacenará en caché y se reutilizará
■ Cuando se modifican las instrucciones del Dockerfile, el archivo copiado cambia, o la variable especificada al construir la imagen es diferente, la imagen correspondiente La caché de la capa se invalidará
■ Después de que falle una determinada capa de la caché reflejada, se invalidarán las cachés de la capa reflejada posterior.
■ La capa reflejada es inmutable. Si agrega un archivo a una capa y luego lo elimina en la siguiente, entonces El archivo seguirá incluido en la imagen.
二 、 Dockerfire
2.1, instrucciones de funcionamiento de dockerfile
Nota: la diferencia entre AGREGAR y COPIAR
● COPIAR: solo copiar
● AGREGAR: copiar, descomprimir y el objeto operable no es solo un archivo sino también una URL
Nota: La diferencia entre CMD y ENTRYPOINT
● CMD: El comando CMD lo personalizamos nosotros. Es un programa ejecutable cuando el contenedor se está ejecutando. Si hay varios comandos CMD en el dockerfile, solo el último tendrá efecto.
● ENTRYPOINT : se refiere al sistema que se está iniciando. El primer ejecutor que se ejecuta por defecto
2.2, use dockerfile para crear una imagen de apache
[root@docker opt]# mkdir apache
[root@docker opt]# cd apache/
[root@docker apache]# ls
[root@docker apache]# vim Dockerfile
FROM centos #基于的基础镜像
MAINTAINER apache #维护镜像的用户信息
RUN yum -y update #镜像操作指令安装apache软件
RUN yum -y install httpd
EXPOSE 80 #开启80端口
ADD index.html /var/www/html/index.html #复制网站首页文件
ADD run.sh /run.sh #将执行脚本复制到镜像中
RUN chmod 755 /run.sh
CMD ["/run.sh"] #启动容器时执行脚本
[root@docker apache]# vim index.html
[root@docker apache]# vim run.sh
[root@docker apache]# cat index.html
Hello world!
[root@docker apache]# cat run.sh
#! /bin/bash
rm -rf /run/httpd/* #删除apache缓存
exec /usr/sbin/apachectl -D FOREGROUND #exec执行,apachectl -D守护
[root@docker apache]# docker build -t httpd:centos . #生成镜像,.表示本地目录
[root@docker apache]# docker run -d -p 1216:80 httpd:centos # -p:表示指定的端口映射
-P:表示随机映射的端口
[root@docker apache]# docker ps -a
2.3. Crear una imagen basada en un contenedor de imágenes existente
[root@docker ~]# docker images
[root@docker ~]# docker run -itd nginx:latest /bin/bash
[root@docker ~]# docker ps -a
En tercer lugar, el establecimiento de almacenes privados.
3.1, la diferencia entre registro y puerto
registro: interfaz de personaje
puerto: página web propia
3.2. Ejemplo
[root@docker ~]# docker pull registry
[root@docker ~]# vim /etc/docker/daemon.json
[root@docker ~]# systemctl restart docker
[root@docker ~]# docker create -it registry /bin/bash
[root@docker ~]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
#宿主机的/data/registry自动创建挂载容器中的/tmp/registry
[root@docker ~]# curl -XGET http://192.168.140.20:5000/v2/_catalog
#获取私有仓库列表
[root@docker ~]# docker tag nginx:latest 192.168.140.20:5000/nginx
#打标签
[root@docker ~]# docker push 192.168.140.20:5000/nginx #上传到仓库
[root@docker ~]# curl -XGET http://192.168.140.20:5000/v2/_catalog
[root@docker ~]# docker images
[root@docker ~]# docker pull 192.168.140.20:5000/nginx #进行本地下载
[root@docker ~]# docker images
Resumen: registro
- tirar descarga
- Primero cambie el archivo de configuración: daemon.json para conectarse al almacén privado
- Ejecutar la operación del
usuario de registro - Etiqueta
- carga de empuje
- jalar
Cuatro, volumen de datos de la ventana acoplable y contenedor de volumen de datos
4.1, volumen de datos de la ventana acoplable
■ 数据卷是一个提供容器使用的特殊目录
■ 数据卷是宿主机和容器间目录的挂载
■ 创建数据卷
docker run -d -v /data1 -v /data2 --name webhttpd:centos
■ 挂载主机目录作为数据卷
docker run -d -v /var/www:/data1 --name web-1httpd:centos
-v表示将宿主机的目录和容器的目录实现共享
[root@docker ~]# docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash
[root@1c13c7f2d3be /]# cd /data1/
[root@1c13c7f2d3be data1]# touch test1
[root@1c13c7f2d3be data1]# ll
[root@docker ~]# cd /var/ #另起一个窗口进行验证
[root@docker var]# cd www
[root@docker www]# ll
4.2, contenedor de volumen de datos
■ 数据卷容器是一个容器中的目录和另一个容器中的目录进行挂载
[root@docker ~]# docker run --name web10 -v /data1 -v /data2 -it centos:7 /bin/bash
另起窗口进行验证
[root@docker ~]# docker run -it --volumes-from web10 --name dc1 centos:7 /bin/bash
[root@f9d06e0697f8 /]# cd data1/
[root@f9d06e0697f8 data1]# touch 1.txt
[root@f9d06e0697f8 data1]# cd ..
[root@f9d06e0697f8 /]# cd data2/
[root@f9d06e0697f8 data2]# touch 2.txt
Cinco, interconexión de contenedores (usando centos mirroring)
[root@docker ~]# docker run -itd -P --name b1 centos:7 /bin/bash
c927e250afc9cbea2a2d80719a5ddce28ae4b762a62ab39b3c2cbbbce76c5e22 #创建并运行容器取名b1,端口号自动映射
[root@docker ~]# docker exec -it c927e250afc9 /bin/bash
[root@c927e250afc9 /]# yum -y install net-tools
[root@docker ~]# docker run -itd -P --name b2 --link b1:b1 centos:7 /bin/bash
a8fb67c2c153ecefad53b3a284a1b11715c074a29109f2c03fa2ae29db6d860b
[root@docker ~]# docker exec -it a8fb67c2c153 /bin/bash
[root@a8fb67c2c153 /]# yum -y install net-tools
[root@c927e250afc9 /]# ifconfig
[root@a8fb67c2c153 /]# ifconfig
[root@a8fb67c2c153 /]# ping 172.17.0.3