Docker Learning (1) Descarga, instalación y comandos básicos comunes

Notas de inicio rápido de Docker

1. Descripción general de Docker

1.1 Introducción básica a Docker

Docker es un motor contenedor de aplicaciones de código abierto, basado en el lenguaje Go y de código abierto que cumple con el protocolo Apache2.0, que permite a los desarrolladores empaquetar sus aplicaciones y paquetes de dependencias en una imagen portátil y luego publicarlos en el sistema operativo Linux o Windows. máquinas, también se puede lograr la virtualización. Los contenedores utilizan completamente el mecanismo sandbox y no tienen ninguna interfaz entre sí, es decir, están aislados entre sí.

Dirección del sitio web oficial: https://www.docker.com/

Dirección del documento: https://docs.docker.com/

Dirección de la biblioteca espejo: https://hub.docker.com/

Un Docker completo consta de las siguientes cuatro partes:

  • Cliente DockerClient

  • demonio Docker demonio

  • Imagen acoplable

  • contenedor DockerContainer

1.2 El significado de Docker:

Durante el proceso de desarrollo, el entorno en el que se basa el desarrollo del proyecto está completamente bien. Al entregar el paquete jar o el paquete war del proyecto al personal de operación y mantenimiento, la premisa es que la configuración del entorno de la otra máquina también está bien. Si cada uno La máquina está en Antes de ejecutar el programa, debe configurar el entorno por separado y la carga de trabajo es evidente.

Modo de implementación de proyecto tradicional: Instalar-Configurar-Ejecutar;

Modo de implementación de Docker: copiar y ejecutar;

1. Estandarización de la entrega

Al igual que el logotipo de Docker, Docker es un componente de entrega "estandarizado" en el campo de la ingeniería de software, como un contenedor para el transporte de mercancías. Como todos sabemos, los contenedores pueden empaquetar artículos de diferentes tamaños que son difíciles de transportar en un todo. Proporciona un estándar universal para el embalaje de mercancías. Camiones, trenes, cargueros y otros vehículos de transporte adoptan este estándar, lo que hace posible la estandarización centrada en los contenedores. El diseño mejora enormemente la eficiencia de la logística y el transporte.

Los entregables de software tradicional incluyen: aplicaciones, paquetes de instalación de software dependientes, documentación de configuración, documentos de instalación, documentos en línea y otros componentes no estándar. El entregable estandarizado de Docker se llama "imagen", que contiene la aplicación y el entorno de ejecución del que depende, lo que simplifica enormemente el modelo de entrega de la aplicación.

2. Construya una vez y entregue muchas veces

Las imágenes de Docker se pueden "construir una vez y entregar muchas veces". Cuando se trata de implementación de copias múltiples de aplicaciones o migración de aplicaciones, el valor de Docker puede reflejarse mejor.

Construya una vez y ejecútela en cualquier lugarEste es también el concepto de Docker;

3. Aislamiento de aplicaciones

Durante el transporte, las mercancías pueden aislarse eficazmente mediante contenedores. El mismo Docker puede aislar la interacción entre diferentes aplicaciones.

1.3 La diferencia entre Docker y VMware

Tecnología de máquina virtual:

  • Además de un sistema operativo, instale y ejecute otro sistema operativo.
  • Necesita virtualizar el hardware, ejecutar un sistema operativo completo y luego instalar y ejecutar software en este sistema.
  • Consume muchos recursos, tiene pasos redundantes y complicados y su inicio es muy lento.

contenedor acoplable:

  • Los recursos necesarios para ejecutar el software se empaquetan en un contenedor aislado y se ejecutan directamente en el host. El contenedor en sí no tiene su propio kernel ni hardware virtual.

  • Docker es una virtualización a nivel de kernel que puede ejecutar muchas instancias de contenedores en una máquina física. Cada contenedor está aislado entre sí, tiene su propio sistema de archivos y no se afecta entre sí, lo que maximiza el rendimiento del servidor.

1.4 Composición de Docker

Insertar descripción de la imagen aquí

  • Imagen

    • Una imagen es como una plantilla: una imagen puede crear muchas instancias de contenedor;

    • Similar a los conceptos de clases y objetos en el lenguaje Java, es decir, una clase puede crear instancias de múltiples objetos.

  • Envase

    • Una imagen crea una instancia de una aplicación que se ejecuta de forma independiente o de un grupo de aplicaciones;

    • Se puede iniciar, iniciar, detener, eliminar. Cada contenedor está aislado el uno del otro.

  • Repositorio

    • Un lugar centralizado para almacenar archivos de imágenes. Cada almacén contiene múltiples imágenes. Cada imagen tiene una etiqueta diferente ("etiqueta": similar a un número de versión)
    • Los tipos de almacén incluyen almacenes privados y almacenes públicos. Docker Hub: (https://hub.docker.com/) es el almacén público más grande.

2. Instalación de Docker

Preparación temprana del entorno : Compré un servidor 2G de 1 núcleo de Alibaba Cloud. Para operaciones específicas e introducción, consulte la publicación del blog: https://blog.csdn.net/weixin_43155804/article/details/122813771

  • Verifique el comando de la versión del sistema Linux: uname -r
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# uname -r
3.10.0-1062.18.1.el7.x86_64
# 系统内核版本为3.10.0
  • Ver la configuración del sistema: cat /etc/os-release
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
  • instalar la ventana acoplable

    • Desinstalar la versión anterior (si corresponde)
    yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    
    • Descargue el paquete de instalación requerido
    yum install -y yum-utils
    
    • Configurar un almacén reflejado
    # 设置国外的地址(下载速度太慢)
    yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo  
    
    # 设置阿里云的Docker镜像仓库(推荐使用,下载速度较快)
    yum-config-manager \
        --add-repo \
        https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    
    • Actualizar el índice del paquete yum
    yum makecache fast
    
    • instalar la ventana acoplable
    # docker-ce为社区版,docker-ee为企业版
    # 该命令默认为安装最新版本
    yum install docker-ce docker-ce-cli containerd.io
    # 如果想要安装指定版本:
    yum install docker-ce-<版本号> docker-ce-cli-<版本号>
    
    # 安装成功会出现 completed提示
    
    • Iniciar ventana acoplable
    systemctl start docker
    
    # 查看当前版本号,验证是否启动成功:
    docker version
    

Insertar descripción de la imagen aquí

  • Descargue la imagen de Hola Mundo para probarla.
docker run hello-world

Insertar descripción de la imagen aquí

  • Ver la imagen descargada
docker images

Insertar descripción de la imagen aquí

  • desinstalación de la ventana acoplable
# 1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 2. 删除资源  /var/lib/docker是docker的默认工作路径
rm -rf /var/lib/docker
  • reinicio de la ventana acoplable
systemctl restart docker

3. Configurar la aceleración de imágenes de Alibaba Cloud

  • Inicie sesión en el sitio web oficial de Alibaba Cloud y busque la columna del servicio de aceleración espejo: https://cr.console.aliyun.com/cn-beijing/instances/mirrors

Insertar descripción de la imagen aquí

  • Ejecute los cuatro comandos en secuencia en la consola para completar la configuración.
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://h98xb7ko.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

4. El proceso de ejecución de Docker Run:

4.1. Hello-world ejecuta el proceso general

Insertar descripción de la imagen aquí

  • Primero, buscará la imagen de hello-world en esta máquina:
  • No se puede encontrar la imagen hello-world localmente
  • Descargar desde remoto: extraer de la biblioteca...
  • Descarga completada: pull compelte
  • Ejecutándose exitosamente: ¡hola desde Docker!

4.2 Proceso de ejecución de Docker Run:

(Error en la transferencia de la imagen del enlace externo. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-ETbIgH8Z-1652287080144) (E:\02-study notes\note Pictures\docker\ 1-pasos de ejecución de Docker.png)]
Insertar descripción de la imagen aquí

4.3 Principios subyacentes

Docker es un sistema con una estructura Cliente-Servidor. El demonio Docker se ejecuta en el host y se accede desde el cliente a través de Socket. Cuando el Docker Server (servidor) recibe la instrucción del Docker-Client (cliente), ejecutará el instrucción.Los contenedores Docker están aislados entre sí y no se afectan entre sí.

Insertar descripción de la imagen aquí

4.4、Docker versus VM Ware

  • Docker tiene menos capas de abstracción que las máquinas virtuales

  • Docker usa el kernel del host y la VM necesita el sistema operativo invitado.

Insertar descripción de la imagen aquí

Cuando Docker crea un nuevo contenedor, no necesita recargar el kernel del sistema operativo como una máquina virtual. Utiliza directamente el sistema operativo del host. La máquina virtual necesita cargar el sistema operativo invitado. Esta operación de la máquina virtual hace que se inicie. en minutos velocidad nivelada .

5. Comandos comunes de Docker

5.1 Comandos de ayuda

docker version		# 显示docker的版本信息
docker info			# 显示docker的信息 包括镜像和容器数量
docker --help		# 帮助命令

Puede verlo a través de la documentación de ayuda de Docker: https://docs.docker.com/reference/

5.2 Comandos de duplicación comunes

  1. Imágenes de Docker ver todas las imágenes en el host local
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker images 
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   4 months ago   13.3kB
centos        latest    5d0da3dc9764   5 months ago   231MB

# 字段解释:
REPOSITORY	镜像的仓库源
TAG			镜像的标签
IMAGE ID 	镜像的ID
CREATED		镜像创建的时间
SIZE		镜像的大小
# 通过docker images --help 可以查看该命令的详细使用
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker images --help

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             # 显示所有镜像
  -f, --filter filter   # 通过条件进行过滤显示
  -q, --quiet           # 只显示镜像的ID

  1. Docker buscar imagen nombre buscar imagen
# docker search 镜像名
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker search --help

Usage:  docker search [OPTIONS] TERM

Search the Docker Hub for images

Options:
  -f, --filter filter   # 根据条件来筛选
  --filter=STARS=500   # 按照STARS来筛选,筛选出数量在500之上的,这里并不是找出STARS等于500的

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

  1. Docker extraer imagen nombre descargar imagen
# docker pull 镜像名		--下载镜像
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker pull mysql			# 下载mysql
Using default tag: latest									# 如果命令中不写tag值,默认下载最新版本latest
latest: Pulling from library/mysql							# docker images的核心:分层下载
72a69066d2fe: Pull complete 
93619dbc5b36: Pull complete 
99da31dd6142: Pull complete 
626033c43d70: Pull complete 
37d5d7efb64e: Pull complete 
ac563158d721: Pull complete 
d2ba16033dad: Pull complete 
688ba7d5c01a: Pull complete 
00e060b6d11d: Pull complete 
1c04857f594f: Pull complete 
4d7cfa90e6ea: Pull complete 
e0431212d27d: Pull complete 
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest								#真实地址

# 下载指定版本:(前提是 指定的版本必须先存在于docker中)
docker pull mysql:5.7
由于docker images有分层下载,上面已经下载过mysql的最新版本,此处下载5.7版本的时候,由于有和最新版本公用的地方,在这次下载中直接显示为Already exists。5.7所独有的东西会被下载。

Insertar descripción de la imagen aquí

  1. eliminación de imagen de Docker RMI
docker rmi		# rm 删除 i镜像(image)
docker rmi -f 条件	# 根据条件进行删除

Insertar descripción de la imagen aquí

# 批量删除
docker rmi -f 容器id				    # 删除指定id的镜像
docker rmi -f 容器id 容器id 容器id  	 # 删除多个镜像
docker rmi -f $(docker images -aq)   # 删除全部的镜像
# $(docker images -aq)表示显示所有的image的ID,并作为参数,传递给 -f

5.3 Comandos de contenedores comunes

Nota: Puede crear un contenedor solo después de tener una imagen. Descargue una imagen de centos para aprender.

  1. Descargar imagen de centos
docker pull centos
  1. Iniciar/salir de la duplicación
# 启动:
docker run [可选参数] 镜像名字
#参数说明
--name="Name"		#容器名字 用来区分容器
-d					# 后台方式运行
-it					# 使用交互方式运行,进入容器查看内容
-p					# 指定容器的端口 -p8080:8080
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口 (常用)
	-p 容器端口
		
# 启动并进入容器内部
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker run -it centos /bin/bash
[root@208950ad49e7 /]# ls 查看容器内的centos,基础版本很多命令都是不完善的
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

# 从容器中退回主机
[root@208950ad49e7 /]# exit 	退出镜像服务器
  1. Listar todos los contenedores en ejecución
#docker ps
docker ps   # 当前正在运行的容器
-a 			# 列出在当前正在运行的容器,+历史运行过的容器
-n=2		#显示最近创建的2个容器(最近的)
-q			#只显示容器的编号
  1. Dos formas de salir de un contenedor
exit		# 容器停止并退出
ctrl+p+q	# 容器不停止,退出

Insertar descripción de la imagen aquí

  1. Eliminar contenedor
docker rm 容器id 					# 删除指定id的容器(正在运行的容器删除不了)
docker rm -f 					 # 可以强制性删除正在运行的容器
docker rm -f $(docker ps -aq)	 # 删除全部容器
docker ps -a -q|xrags docker rm		#先查询出所有的容器id,用管道符传递给|后面的语句,进行全部删除
  1. Iniciar y detener operaciones de contenedores
docker start 容器id		#启动容器
docker restart 容器id		# 重启容器
docker stop 容器id		#停止当前正在运行的容器
docker kill 容器id		# 强制停止当前容器

Insertar descripción de la imagen aquí

5.4 Otros comandos de uso común:

  1. Ver comando de registro
docker logs

[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker logs --help

Usage:  docker logs [OPTIONS] CONTAINER

Fetch the logs of a container

Options:
      --details        Show extra details provided to logs
  -f, --follow         #显示日志
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  -n, --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     # 显示时间戳
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)

# docker logs 
-tf			#显示日志
--tail 10	#显示10条日志
  1. Ver información del proceso en el contenedor.
# docker top 容器id
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker top 6289e8425a39
UID	      PID        PPID       C        STIME       TTY         TIME            CMD
root      29143      29125      0        22:37       pts/0       00:00:00      /bin/bash

  1. Ver metadatos de imagen
# docker inspect 容器id
  1. Entra en el contenedor que me está ejecutando actualmente.

Por lo general, el contenedor se ejecuta en segundo plano, es necesario ingresar al contenedor y modificar algunas configuraciones.

# 方式1

docker exet -it 容器id 

Insertar descripción de la imagen aquí

# 方式2
docker attach 容器id

Insertar descripción de la imagen aquí

la diferencia:

# docker exec	      进入容器后没开启一个新的终端,可以在里面操作,是常用的进入命令
# docker attach       进入容器正在执行我的终端,不会启动新的进程
  1. Copie archivos del contenedor al host
# 命令
docker cp 容器id:容器内文件路径 目的路径

Insertar descripción de la imagen aquí

6. Practica

6.1 implementación de nginx

  1. Buscar espejo
# docker search nginx
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker search nginx
NAME                                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                                             Official build of Nginx.                        16754     [OK]       
linuxserver/nginx                                 An Nginx container, brought to you by LinuxS…   165                  
bitnami/nginx                                     Bitnami nginx Docker Image                      125                  [OK]
ubuntu/nginx                                      Nginx, a high-performance reverse proxy & we…   48                   
bitnami/nginx-ingress-controller                  Bitnami Docker Image for NGINX Ingress Contr…   18                   [OK]
rancher/nginx-ingress-controller                                                                  10               
  1. Extraer imagen de descarga
# docker pull nginx  下载最新版本
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete 
a9edb18cadd1: Pull complete 
589b7251471a: Pull complete 
186b1aaa4aa6: Pull complete 
b4df32aa5a72: Pull complete 
a0bcbecc962e: Pull complete 
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
  1. Consultar imágenes descargadas localmente
# docker images
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    605c77e624dd   4 months ago   141MB
centos       latest    5d0da3dc9764   7 months ago   231MB
  1. Ejecutar imagen
# docker run -d --name 别名 -p 主机端口:容器端口 镜像名字
# -d 					  # 后台运行
# -- name       		  # 起名字
# -p 主机端口:容器端口		# 端口映射

[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker run -d --name nginx01 -p 3344:80 nginx
d1e7b7a311bb2f8cd2033b1329178882c453b1ab308afa577c50e21d99fce745


  1. El concepto de mapeo portuario (exposición)

(Error en la transferencia de la imagen del enlace externo. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-NDuPFkdt-1652287080146) (E:\02-Study Notes\Note Pictures\docker\ Introducción al concepto Docker\8.3 Puerto expuesto.png)]
Insertar descripción de la imagen aquí

  1. Ver imágenes corriendo
# docker ps 
# docker ps -a  # 所有运行的镜像,包括历史运行的

[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
d1e7b7a311bb   nginx     "/docker-entrypoint.…"   18 seconds ago   Up 17 seconds   0.0.0.0:3344->80/tcp   nginx01
  1. Ver y ejecutar localmente
# curl localhost:3344  可以通过本地查看运行状态、
# 通过公网查看: 虚拟机ip:映射端口
# 当访问出现错误时,需要登录阿里服务器控制台,添加334的安全组

[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html {
    
     color-scheme: light dark; }
body {
    
     width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# 

Los resultados de configurar el grupo de seguridad de Alibaba Cloud y acceder a él a través de la red pública:

Insertar descripción de la imagen aquí

La ruta de acceso es: http://dirección IP del servidor: puerto expuesto, puede acceder con éxito a nginx.

  1. Archivo de configuración
# 进入容器,进行自定义配置文件
# docker exec -it 给容器起的别名 /bin/bash 进入容器后台
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker exec -it nginx01 /bin/bash
# 查看 nginx 所在的目录
root@d1e7b7a311bb:/# whereis nginx 
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
# 进入nginx所在的目录
root@d1e7b7a311bb:/# cd /etc/nginx
# 查看目录中文件列表
root@d1e7b7a311bb:/etc/nginx# ls
conf.d	fastcgi_params	mime.types  modules  nginx.conf  scgi_params  uwsgi_params

¡En este punto, la implementación de nginx está completa!

6.2 implementación de Tomcat

  1. Utilice el comando Docker Run para descargar

Cuando se ejecuta Docker, automáticamente ayudará a descargar sin buscar y luego extraer.

  1. Uso oficial:
docker run -it --rm tomcat:9.0
之前启动都是后台启动,停止之后,容器还是可以查到,--rm一般用来测试,用完就删除
使用docker ps -a查看记录 没有找到启动tomcat的记录

# 前期学习不建议这么做,还是老老实实的通过pull来进行下载吧
  1. Descargue y ejecute la imagen de Tomcat.
# 1、docker pull tomcat		# 下载tomcat镜像
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
0e29546d541c: Already exists 
9b829c73b52b: Already exists 
cb5b7ae36172: Already exists 
6494e4811622: Already exists 
668f6fcc5fa5: Already exists 
dc120c3e0290: Already exists 
8f7c0eebb7b1: Already exists 
77b694f83996: Already exists 
0f611256ec3a: Already exists 
4f25def12f23: Already exists 
Digest: sha256:9dee185c3b161cdfede1f5e35e8b56ebc9de88ed3a79526939701f3537a52324
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest

# 2、docker images   查看本地所有镜像
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
nginx                 latest    605c77e624dd   4 months ago    141MB
tomcat                latest    fb5657adc892   4 months ago    680MB
hello-world           latest    feb5d9fea6a5   7 months ago    13.3kB
centos                latest    5d0da3dc9764   7 months ago    231MB

# 3、docker run -d -p 3355:8080 --name tomcat01 tomcat 运行
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker run -d -p 3355:8080 --name tomcat01 tomcat
3e7fc95c278a15b8dbe8e0773089cbe6ede11da07ccb7b4d3718e73de7146a57


# 进入tomcat01中:
docker exec -it tomcat01 /bin/bash/
# 进入之后发现,在外部访问:http://39.107.241.179:3355,显示404错误,表示没有加载到资源
# 进入tomcat01中,发现webapps目录为空,webapps.dist文件夹中包括访问所需内容,
# 在tomcat01中,将webapps.dist中的内容拷贝到webapps中:
cp -r webapps.dist/* webapps

随后刷新之后,便可通过外部访问tomcat界面
  1. Alibaba Cloud establece el grupo de seguridad 3355 y accede a él a través de la red pública externa y se encuentra un error 404:

Insertar descripción de la imagen aquí

El ícono de tomact ya se muestra en la barra de navegación, pero aparece 404 en la interfaz, lo que demuestra que se puede acceder a Tomcat a través de la red externa pública, pero no está cargado en el recurso. Ingrese al contenedor espejo para ver el archivo de configuración de Tomcat. .

  1. Métete dentro del contenedor.
# docker exec -it tomcat01 /bin/bash
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker exec -it tomcat01 /bin/bash
root@3e7fc95c278a:/usr/local/tomcat# ls		#查看容器中的文件
BUILDING.txt  CONTRIBUTING.md  LICENSE	NOTICE	README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
root@3e7fc95c278a:/usr/local/tomcat# cd webapps			# 进入webapps目录,ls查看列表,发现目录中没有文件,是空的
root@3e7fc95c278a:/usr/local/tomcat/webapps# ls
root@3e7fc95c278a:/usr/local/tomcat/webapps# cd ..		# 返回上一级
root@3e7fc95c278a:/usr/local/tomcat# cd webapps.dist	# 查看webapps.dist发现该目录中存放着tomcat的相关文件
root@3e7fc95c278a:/usr/local/tomcat/webapps.dist# ls
ROOT  docs  examples  host-manager  manager

Al ingresar al contenedor, descubrimos que hay menos archivos en el contenedor, esto se debe a que Alibaba Cloud Image descarga la imagen más pequeña de forma predeterminada para garantizar el entorno operativo más pequeño.

Copie los archivos del directorio webapps.dist al directorio webapps

# 将webapps.dist目录下的所有内容,拷贝到webapps中
root@3e7fc95c278a:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@3e7fc95c278a:/usr/local/tomcat# cd webapps
root@3e7fc95c278a:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
root@3e7fc95c278a:/usr/local/tomcat/webapps# 

Actualiza la ruta de acceso a la red pública, después de eso, muestra que puedes acceder exitosamente:

Insertar descripción de la imagen aquí

  1. Acceso interno mediante curl:
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# curl localhost:3355
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/10.0.14</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <div id="wrapper">
            <div id="navigation" class="curved container">
                <span id="nav-home"><a href="https://tomcat.apache.org/">Home</a></span>
                <span id="nav-hosts"><a href="/docs/">Documentation</a></span>
                <span id="nav-config"><a href="/docs/config/">Configuration</a></span>
                <span id="nav-examples"><a href="/examples/">Examples</a></span>
                <span id="nav-wiki"><a href="https://wiki.apache.org/tomcat/FrontPage">Wiki</a></span>
                <span id="nav-lists"><a href="https://tomcat.apache.org/lists.html">Mailing Lists</a></span>
                <span id="nav-help"><a href="https://tomcat.apache.org/findhelp.html">Find Help</a></span>
                <br class="separator" />
            </div>
            <div id="asf-box">
                <h1>Apache Tomcat/10.0.14</h1>
            </div> 
            <p class="copyright">Copyright &copy;1999-2022 Apache Software Foundation.  All Rights Reserved</p>
        </div>
    </body>
</html>

¡En este punto, la implementación de Tomcat está completa!

6.3 Implementación de ElasticSearch

  1. Instalar comando de ejecución
docker run -d --name elasticsearch02 --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:8.2.0
  1. El uso de memoria es muy alto. Modifique la configuración de la página.

La memoria ocupada por ES es muy alta. Dado que el servidor utilizado para el aprendizaje es de 1 núcleo y 2G, el uso de memoria de ES es demasiado alto después del inicio, lo que provocará que la máquina virtual se congele. Puede detenerla.

Cuando se ejecuta la ventana acoplable, agregue **-e ES_JAVA_OPTS="-Xms64m -Xmx512m"** para modificar los parámetros de configuración de la página, similar a modificarlo en el archivo de configuración de IDEA.

Xms: la ocupación mínima es de 64 m, la ocupación máxima de Xmx es de 512 m

docker run -d --name elasticsearch02 --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:8.2.0
  1. Verificar el uso de recursos
docker stats

6.4 Pensando en los problemas

  • Al configurar nginx, cada vez que cambia el archivo de configuración de nginx, debe ingresar al contenedor a través de la máquina virtual para operar, lo que sin duda es muy problemático.
  • De manera similar, al implementar Tomcat, también debe ir al directorio webapps.dist para copiar el contenido a webapps, lo que también es engorroso para ingresar al contenedor cada vez.
  • Para los dos problemas anteriores, ¿no sería bueno si se pudiera proporcionar una ruta de mapeo fuera del contenedor para que podamos acceder directamente?

Este problema se resolverá bien si aprendemos la tecnología de volumen de datos del contenedor Docker más adelante .

Con esto concluye el capítulo de inicio rápido.Piensa más, practica más y domina los comandos básicos

Supongo que te gusta

Origin blog.csdn.net/weixin_43155804/article/details/124722625
Recomendado
Clasificación