Capítulo de operación y mantenimiento Docker Soul Torture-2.1

Preste atención a la cuenta pública de WeChat: Java Book Club para más artículos buenos Yo Ollie

En la última publicación del blog, ya tenemos una comprensión básica de Docker. Esta vez realizaremos una tortura del alma en los dos componentes centrales de Docker. Debido al espacio, principalmente torturaremos Imágenes en esta sección. En cuanto a los contenedores, déjelo para la segunda mitad. Tortura.

Imagenes

Al final de la sección anterior mencionamos la conjetura de diseño de Docker, esta vez tomamos tomcat como ejemplo para probar nuestra conjetura paso a paso.

[Error en la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-hotlink, se recomienda guardar la imagen y subirla directamente (img-6pXHwOzL-1583691583551) (E: \ architect \ markdown \ gallery \ Docker-image.png)]

Ya sabemos por la sección anterior que cuando se ejecuta dokcer pull tomcat, buscaremos la imagen de tomcat en hub.docker.com.

¿Cómo se crea la imagen?

Tortura del alma 1: ¿De dónde proviene esta imagen?

Primero abramos una dirección:

https://github.com/docker-library/tomcat/tree/master/8.5/jdk8/openjdk

Desde esta dirección, podemos encontrar: todas las imágenes se obtienen de un Dockerfile, ¿no lo crees? Puede buscar otros almacenes ~

Abra el Dockerfile, encontramos que se ve así, una sección larga (debido a la longitud de la sección, solo capturamos algunas de las secciones), parece una gramática fija, no hay forma ~

FROM openjdk:8-jdk
ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME
......
RUN set -eux; \
	\
	......
	chmod -R +rX .; \
	chmod 777 logs temp work
# verify Tomcat Native is working properly
RUN ......
EXPOSE 8080
CMD ["catalina.sh", "run"]

Con Dockerfile, verifiquemos si puede generar una imagen.

#1.查看现有images
docker images
#2.将上述的DOckerfiler文件上传到当前目录
#3.执行生成image操作
docker build -t my-mysql-image .
#4.再次执行查看image操作,就可以发现生成了镜像my-mysql-image

De las operaciones anteriores, podemos sacar una conclusión: image都是由Dockerfile得来的¿Podemos escribir un Dockerfile para generar nuestra propia imagen? La respuesta es sí. Para escribir nuestro propio Dockerfiler, tenemos que echar un vistazo a su sintaxis básica:

#1.FROM 指定基础镜像
FROM ubuntu:14.04
#2.RUN 在镜像内部执行命令,例如安装软件或者配置环境等,换行可以用""
RUN groupadd -r mysql && useradd -r -g mysal mysql
#3.ENV 设置变量的值,后面可以直接使用${MYSQL_MAJOR},可通过docker run --e key=value修改
ENV MYSQL_MAJOR 5.7 
#4.LABEL设置镜像标签
LABEL email="[email protected]" 
LABEL name="itcrazy2016
#5.VOLUME 指定数据的挂载目录
VOLUME /usr/lib/mysql
#6.COPY 将宿主机的文件复制到镜像内,如果目录不存在,会自动创建所需要的目录。注意只是复制,不会提取和解压
COPY docker-entrypoint.sh /usr/local/bin/
#7.ADD 将主机的文件复制到镜像内,和COPY类似,只是ADD会对压缩文件提取和解压
ADD application.yml /etc/itcrazy2016/
#8.WORKDIR 指定镜像的工作目录,之后的命令都是基于此目录工作,若不存在则创建
WORKDIR /usr/local
WORKDIR tomcat
RUN touch test.txt
	#会在/usr/local/tomcat下创建test.txt文件
	WORKDIR /root
    ADD app.yml test/
	#会在/root/test下多出一个app.yml文件
#9.CMD 容器启动的时候默认执行命令,若有多个CMD命令,只有最后一个会生效
CMD ["mysqld"] 
或
CMD mysqld
#10.ENTRYPOINT 和CMD的使用类似,与之不同的是:docker run执行时,会覆盖CMD的命令,而ENTRYPOINT不会 
ENTRYPOINT ["docker-entrypoint.sh"]
#11.EXPOSE 指定镜像要暴露的端口,启动镜像时,可以使用-p将该端口映射给宿主机
EXPOSE 3306

Crea tu propia imagen

Después de comprender los comandos básicos de Dockerfile, podemos proceder a crear nuestra propia imagen. Aquí demostramos con un proyecto web Spring Boot, las operaciones específicas son las siguientes:

#1.创建一个Spring Boot项目,创建一个Controller类,参考代码:
https://github.com/Alvin33/docker-all
#2.对项目进行打包
mvn clean package
#3.在docker环境中新建一个目录'first-dockerfile'
#4.将所打的jar包'docker-all-0.0.1-SNAPSHOT.jar'上传到该目录中(这里我们可以先执行sudo yum install lrzsz,这样就可以直接把文件拖入到虚机中啦)。并在该目录下创建Dockerfile文件,编写Dockerfile文件内容如下:
FROM openjdk:8
MAINTAINER jarluo
LABEL name="dockerfile-demo" version="1.0" author="jarluo"
COPY docker-all-0.0.1-SNAPSHOT.jar dockerfile-image.jar
CMD ["java","-jar","dockerfile-image.jar"]
#5.根据我们上面建立的Dockerfile构建镜像
docker build -t my-docker-image .
#6.基于image创建container
docker run -d --name user01 -p 8888:8080 my-docker-image
	#我们可以通过docker ps 查看我们创建的容器
#7.查看启动日志
docker logs user01
#8.宿主机上访问curl localhost:8888/dockerfile 如果返回结果 说明我们自己定义的Dockerfile正确啦~
#9.此外,我们还可以在启动一个容器
docker run -d --name user02 -p 8889:8080 my-docker-image

En este punto, creo que los pequeños amigos del libro tienen una comprensión más profunda de la imagen de Docker. Pero tal vez todos tengan nuevas dudas. Yo mismo creé la imagen. Quiero ponerla a disposición de todos los codificadores de Internet o de mis compañeros de mi empresa. ¿Qué debo hacer?

Compartir imagen personalizada

Tortura del alma 2: Cómo compartir imágenes personalizadas

Aquí discutiremos tres opciones, creo que siempre hay una adecuada para ti ~

  • Carga de imágenes personalizadas hub.docker.com

En la sección anterior, sabemos que todo nuestro iamge se extrae del concentrador, por lo que, por supuesto, también podemos cargar el iamge que creamos en el concentrador.

#1.首先我们要登录hub官网注册属于我们自己的账户,然后进行登录
#2.在docker机器上登录,会要求输入用户名及密码
docker login
#3.将我们自定义image进行重新命名,docker能找到我们官网的账户
docker tag my-docker-image alvin33/my-docker-image 
#4.将我们自定义的iamge推送到hub
docker push alvin33/my-docker-image

Una vez que el envío sea exitoso, actualice nuestra propia página de inicio en el sitio web oficial y podrá ver la imagen que acaba de cargar, así que si alguien más quiere usarla, ¿qué debo hacer? Por supuesto que se usa como otros espejos.

#1.拉取镜像
docker pull alvin33/my-docker-image
#2.创建容器
dokcer run -d --name user01 -p 6666:8080 alvin33/my-docekr-image
  • Carga de imágenes personalizadas en Alibaba Cloud

Algunas personas pueden preguntar, con el almacén del sitio web oficial de Docker, ¿por qué usar el almacén de Alibaba Cloud? Lo que demostramos anteriormente es solo una pequeña demostración. Cuando cargue un proyecto muy grande, será más lento, por lo que consideraremos el servidor doméstico Alibaba Cloud para la cena.

#1.阿里云官网登录自己的阿里云,打开该网址
https://cr.console.aliyun.com/cn-hangzhou/instances/repositories
#2.宿主机登录阿里云docker仓库,参照阿里云官网访问路径https://cr.console.aliyun.com/cn-hangzhou/instances/credentials
sudo docker login --username=alvinos666 registry.cn-hangzhou.aliyuncs.com
#3.阿里云容器镜像服务创建命名空间alvin33 
#4.给自定义image打tag.
sudo docker tag my-docker-image:latest  registry.cn-hangzhou.aliyuncs.com/alvin33/my-docker-image:v1.0
#5.推送自定义镜像到阿里云docker仓库
sudo docker push registry.cn-hangzhou.aliyuncs.com/alvin33/my-docker-image:v1.0

Después de completar los pasos anteriores, actualizamos el almacén de espejos nuevamente y puede ver el espejo que cargamos.

Si desea tirar y jugar, el comando también se le enviará directamente, después de todo, este sitio web de Alibaba Cloud es bastante largo.

#镜像拉取
docker pull registry.cn-hangzhou.aliyuncs.com/alvin33/my-docker-image:v1.0
#创建容器
docker run -d --name user01 -p 6661:8080 registry.cn-hangzhou.aliyuncs.com/alvin33/my-docker-image:v1.0
  • Carga de imágenes personalizadas Servidor privado Docker Harbour

Finalmente, echemos un vistazo a cómo operar si queremos construir un servidor privado. Primero podemos construir el entorno básico de Docker Harbour. Los pasos específicos son los siguientes:

#1.下载版本Docker Harbor,以1.7.1版本为例   
https://github.com/goharbor/harbor/releases
#2.检查当前机器是否安装了docker-compose
docker-compose version
	#2.1如果没有安装,则执行以下命令进行安装
	#2.1.1.下载最新版的docker-compose文件
	sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
	#2.1.2.添加可执行权限
	sudo chmod +x /usr/local/bin/docker-compose
	#2.1.3.测试安装结果
	docker-compose --version
		#测试安装结果的时候可能会爆出以下错误
		Cannot open self /usr/local/bin/docker-compose or archive /usr/local/bin/docker-compose.pkg
		#解决方案:
		参见该网址:https://www.cnblogs.com/sixiweb/p/7048914.html
#3.上传并解压
tar -zxvf harbor-online-installer-v1.7.1.tgz
#4.进入到harbor目录,修改harbor.cfg文件,主要是ip地址的修改成当前机器的ip地址。同时也可以看到Harbor的密码,默认是Harbor12345
hostname = 192.168.110.164
#5.安装harbor
sh install.sh
#6.浏览器访问,比如192.168.110.164(个人虚机地址),输入用户名admin和密码Harbor12345即可。

#tip:
	当发现页面访问不了的时候,可以重启harbor,进入到harbor目录,命令以下命令:
	docker-compose stop
	docker-compose start
	

El entorno básico de Docker Harbour está configurado, entonces, ¿cómo lo impulsamos? Veamos:

#1.在宿主机上登录Docker Harbor
docker -D login 192.168.110.164
	#报如下错误:
	Error response from daemon: Get https://192.168.110.164/v2/: dial tcp 192.168.110.164:443: connect: connection refused
	#解决方案参考:https://blog.csdn.net/zyl290760647/article/details/83752877
	A:在需要登陆的docker client端修改lib/systemd/system/docker.service文件,在里面修改ExecStart那一行,增加--insecure-registry=192.168.110/164,
	然后重启docker (systemctl daemon-reload    systemctl restart docker)
	B:在harbor服务器端修改 /etc/docker/daemon.json(如果没有这个文件,自己建),增加
	{
    
    
 	 "insecure-registries": ["192.168.110.164"]
  	}
  	以上语句注意空格。
	修改后,同样运行 (systemctl daemon-reload    systemctl restart docker)
	出现以下语句,说明成功.
	WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
#2.推送自定义镜像
	#2.1 登录Harbor UI,新建项目harbor-test,并新建用户alvin33,并在新建的项目harbor-test内添加刚才新建的成员用户:alvin33
	#2.2 使用alvin33重新登录账户(输入用户名时请输入alvin33)
	docker login 192.168.110.164
	#2.3 登录完成后我们就可以进行推送啦,具体执行以下两步操作;
docker tag my-docker-image:latest 192.168.110.164/harbor-test/my-docker-image:v1.0
docker push 192.168.110.164/harbor-test/my-docker-image:v1.0

En este punto, hemos utilizado el servidor privado de Harbour para administrar nuestras imágenes personalizadas.
Inserte la descripción de la imagen aquí

Escrito al final:

Al principio del artículo, mencionamos el pensamiento en capas de la ventana acoplable. Después de leer el artículo, deberíamos poder sentir que en realidad estamos hablando de una cosa todo el tiempo, es decir, Dockerfile. Y el proceso de ejecución de comandos de Dockerfile, ¿no es como hacer un pastel de mil capas, capa por capa?

En la segunda mitad, analizaremos Contenedores y sentiremos la capa Contenedores en la parte superior de la capa de imágenes.

Un poco fuera de tema:

Escribí este artículo sin demasiadas imágenes, considerando que luego de que el artículo anterior fue subido al blog, las imágenes no se mostraban, probé muchas soluciones, pero no eran muy cómodas. Entonces quiero esperar a que se resuelva este problema, agregaré más imágenes para aumentar la expresividad. Con respecto a este problema, ahora existe una buena solución. Así que pensé en tomarme el tiempo para escribir una columna de herramientas. Introducir especialmente las herramientas en desarrollo o trabajo. Crezcan juntos y progresen juntos.

Supongo que te gusta

Origin blog.csdn.net/aiwaston/article/details/104744939
Recomendado
Clasificación