Docker入门

一.docker介绍

1.docker是什么?

Docker入门_第1张图片

 

  • Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何影响。

  • Docker的优势包括快速部署、跨平台兼容、资源隔离、易于管理和扩展等。

  • Docker由三个主要组件组成:Docker引擎、Docker镜像和Docker容器。

  1. Docker引擎是运行和管理容器的核心组件,

  2. Docker镜像是应用程序和其依赖项的打包格式,

  3. Docker容器是基于镜像运行的实例。

2. Docker容器:

- 容器是一种轻量级的虚拟化技术,它提供了隔离的运行环境,使应用程序可以在不同的环境中以相同的方式运行。

- 创建容器可以使用Docker命令行工具或Docker API。容器的启动可以基于现有的镜像,也可以通过编写Dockerfile来定义自定义镜像。

- Docker提供了一系列命令和API来管理和监控容器,包括启动、停止、重启、查看日志、查看状态等操作。

3. Docker镜像:

- 镜像是Docker容器的基础,它包含了运行应用程序所需的所有文件、依赖项和配置。

- 镜像可以通过Dockerfile来定义和构建,Dockerfile是一个文本文件,用于描述如何构建镜像。

- Docker镜像可以通过Docker命令行工具或Docker Registry来管理和分享。Docker Registry是一个集中存储和分发镜像的仓库。

4.Docker应用

- Docker在各种场景中都有广泛的应用,包括开发环境搭建、持续集成和部署、微服务架构等。

- Docker可以提供一致的开发和测试环境,简化了开发者之间的协作和应用的部署。

- 在CI/CD中,Docker可以用于构建和打包应用程序,以及自动化测试和部署。

- 在微服务架构中,Docker可以帮助实现服务的隔离、部署和扩展。

 二.docker常用命令

1.docker基础命令

启动docker

systemctl start docker

关闭docker

systemctl stop docker

重启docker

systemctl restart docker

docker设置随服务启动而自启动

systemctl enable docker 

 查看docker运行状态

systemctl status docker

 查看docker版本号信息

docker version

docker info

ocker 帮助命令

忘记了某些命令便可使用此进行查看与回顾

docker --help

比如 咱忘记了 拉取命令 不知道可以带哪些参数 咱可以这样使用

docker pull --help

2.镜像命令

查看镜像列表

docker images

 搜索镜像

docker search 镜像名

docker search --filter=STARS=9000 mysql

搜索 STARS >9000的 mysql 镜像

拉取镜像

不加tag(版本号) 即拉取docker仓库中 该镜像的最新版本latest 加:tag 则是拉取指定版本

 docker pull 镜像名

docker pull 镜像名:tag

运行镜像 

docker run 镜像名

docker run 镜像名:Tag

删除镜像 

1.删除一个

docker rmi -f 镜像名/镜像ID

2.删除多个 其镜像ID或镜像用用空格隔开即可

docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID

3.删除全部镜像 -a 意思为显示全部, -q 意思为只显示ID

docker rmi -f $(docker images -aq)

4.删除镜像

docker image rm 镜像名称/镜像ID

 3.容器命令

1.查看正在运行容器列表

docker ps

2.查看所有容器 ---包含正在运行和已停止的

docker ps -a

3.运行一个容器

-it 表示 与容器进行交互式启动

-d 表示可后台运行容器 (守护式运行)

--name 给要运行的容器 起的名字

/bin/bash 交互路径

docker run -it --name 要取的别名 镜像名:Tag /bin/bash

 例如我们要启动一个redis 把它的别名取为redis001 并交互式运行 需要的命令 —我这里指定版本号为5.0.5

#1.拉取redis镜像

docker pull redis:5.0.5

#2.命令启动

docker run -it --name redis001 redis:5.0.5 /bin/bash 

4.停止容器

docker stop 容器名/容器ID 

5.删除容器 

#删除一个容器

docker rm -f 容器名/容器ID

#删除多个容器 空格隔开要删除的容器名或容器ID

docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID

#删除全部容器

docker rm -f $(docker ps -aq)

6.容器端口与服务器端口映射 

命令:

-p 宿主机端口:容器端口 (注意是小写的p)

-P 宿主机随机端口:容器端口 (注意是大写P)

 -p 9090:80 解析 将容器内部的 80端口与docker 宿主机(docker装在哪太服务器 那台服务器 )9090端口进行映射 那通过外部访问宿主机9090端口 即可访问到 docker 容器 80端口了

 docker run -d --name nginx01 -p 9090:80 nginx

docker run -d --name nginx02 -p 9091:80 nginx

在Docker中, -p 和 -P 是用于映射容器端口到主机端口的两个选项。它们之间的区别如下:

1. -p 选项:这个选项用于映射指定的容器端口到主机的指定端口。例如,使用 -p 8080:80 将容器的80端口映射到主机的8080端口。你可以指定容器和主机的端口号。

2. -P 选项:这个选项用于自动将容器的所有暴露的端口映射到主机的随机端口。Docker会自动分配一个主机端口,并将容器端口映射到该主机端口上。类似 docker -p :80 你可以使用 docker port 命令来查看容器的映射端口。

总结来说, -p 选项允许你手动指定容器和主机的端口映射关系,而 -P 选项则是自动将容器的所有暴露的端口映射到主机的随机端口上。

7.进入容器

这里咱就进入 前面的 nginx1 容器

docker exec -it 容器名/容器ID /bin/bash

进入 前面的 nginx容器

docker exec -it nginx01 /bin/bash

8.退出容器

从容器内 退出到自己服务器中 需注意 两个退出命令的区别

#直接退出 未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭

exit

# 优雅提出 --- 无论是否添加-d 参数 执行此命令容器都不会被关闭

Ctrl + p + q

9.容器文件拷贝

docker cp 命令用于在容器和本地文件系统之间复制文件/文件夹。

#从主机上拷贝文件到容器内

docker cp 1.txt mycontainer:/1.txt

#从容器里面拷贝文件/目录到本地一个路径

docker cp 容器名称或id:/container_path to_path  

例如:docker cp tomcat:usr/local/tomcat/README.md ./

10.查看容器日志

docker logs -f --tail=要查看末尾多少行 默认all 容器ID

12.容器自动重启

使用docker run命令时 添加参数--restart=always 便表示,该容器随docker服务启动而自动启动

docker run -d  -p 8888:6379 --restart=always --name redis002 nginx:latest/bin/bash

13.数据挂载

简单来讲,就是将容器内的数据与外部宿主机文件绑定起来,类似一个双持久化,当容器删除时,宿主机文件数据目录仍在,下次启动容器只要将数据目录指向宿主机数据所在位置即可恢复!

命令:

-v 宿主机文件存储位置:容器内文件位置

如此操作,就将 容器内指定文件挂载到了宿主机对应位置,-v命令可以多次使用,即一个容器可以同时挂载多个文件

-v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置

Redis示例:

运行一个docker redis 容器 进行 端口映射 两个数据卷挂载 设置开机自启动

 docker run -p 6300:6379 --name redis01 --restart=always -v /home/208/redis/redis.conf:/etc/redis/redis.conf -v /home/208/redis/data:/data -d redis redis-server /etc/redis/redis.conf

 三.dockerfile文件

1.标准dockerfile文件格式

FROM openjdk:8

#设置工作目录

WORKDIR /app

#复制应用程序文件到容器中

COPY target/wms-app-0.0.1-SNAPSHOT.jar app.jar

# 设置环境变量

ENV JAVA_HOME=/usr/local/openjdk-11

ENV PATH=$PATH:$JAVA_HOME/bin

#暴漏端口

EXPOSE 8080

#设置启动命令

ENTRYPOINT ["java","-jar","app.jar"]

这个示例Dockerfile的功能是构建一个基于OpenJDK 11镜像的Docker镜像。它的构建过程包括以下步骤:

1. 使用 FROM 指令指定基础镜像,这里使用的是OpenJDK 11镜像。

2. 使用 WORKDIR 指令设置工作目录为 /app ,后续的操作都在这个目录下进行。

3. 使用 COPY 指令将当前目录下的所有文件复制到容器的 /app 目录下。

4. 使用 ENV 指令设置环境变量,这里是设置Java的安装路径和将Java可执行文件路径添加到系统PATH中。

5. 使用 RUN 指令在容器中执行命令,这里是使用javac编译App.java文件。

6. 使用 CMD 指令在容器启动时执行命令,这里是执行Java应用程序。

通过以上步骤,我们可以使用该Dockerfile构建一个包含Java应用程序的镜像,并在容器启动时执行Java应用程序。

3.构建镜像

当你有了上述的Dockerfile文件后,你可以使用 docker build 命令来构建Docker镜像。以下是使用 docker build 命令的示例:

1. 首先,打开终端并进入包含Dockerfile的目录。

2. 运行以下命令来构建镜像:

docker build -t myapp:v1 .

解释:

-t myapp:v1 :指定构建的镜像名称为 myapp:v1 ,你可以自定义镜像名称。

. :表示Dockerfile所在的当前目录。

3. Docker引擎将会根据Dockerfile的指令和参数开始构建镜像。它会执行每个指令,并在构建过程中显示相应的输出信息。

4. 构建完成后,你可以使用 docker images 命令来查看构建好的镜像列表:

docker images

4. CMD 与 ENTRYPOINT 区别

在Dockerfile中, CMD 和 ENTRYPOINT 都是用于定义容器启动时要执行的命令或脚本。它们之间有一些区别:

CMD 指令:

- CMD 指令用于设置容器启动时要执行的默认命令。它可以有多种形式:

- CMD ["executable","param1","param2"] :使用JSON数组格式,推荐使用这种形式。

- CMD command param1 param2 :使用命令格式,不推荐使用这种形式。

- 如果在运行镜像时指定了要运行的命令,那么 CMD 指令将被覆盖。 docker run app206:v1 /bin/bash

- CMD 指令可以被Dockerfile中的多个 CMD 指令覆盖,但只有最后一个 CMD 指令会生效。

ENTRYPOINT 指令:

- ENTRYPOINT 指令类似于 CMD ,用于设置容器启动时要执行的命令。它也可以有多种形式:

- ENTRYPOINT ["executable","param1","param2"] :使用JSON数组格式,推荐使用这种形式。

- ENTRYPOINT command param1 param2 :使用命令格式,不推荐使用这种形式。

- 与 CMD 不同的是, ENTRYPOINT 指令的参数不会被覆盖。如果在构建镜像时指定了要运行的命令,它将作为参数传递给 ENTRYPOINT 指令。

- ENTRYPOINT 指令的参数可以通过 CMD 指令进行覆盖,这样可以在运行容器时动态地修改执行的命令。

综上所述, CMD 指令用于设置默认的容器启动命令,而 ENTRYPOINT 指令用于设置始终执行的命令。 ENTRYPOINT 指令更适合用于定义容器的主要执行逻辑,而 CMD 指令则更适合用于提供默认参数或允许在运行容器时动态修改命令。

四.docker conpose

1.概述

Docker Compose是一个用于定义和运行多个Docker容器的工具。它使用YAML文件来定义应用程序的服务、网络和卷等配置,然后使用单个命令即可启动、停止和管理整个应用程序的多个容器。

使用Docker Compose的简要步骤如下:

1. 创建一个YAML文件(通常命名为 docker-compose.yml ),用于定义应用程序的服务、网络和卷等配置。

2. 在YAML文件中定义服务,包括容器的镜像、端口映射、环境变量、依赖关系等。

3. 运行 docker-compose up 命令,Docker Compose将根据YAML文件中的配置启动和管理容器。

4. 使用 docker-compose down 命令停止和删除由Compose创建的容器。

2.安装

yum install docker-compose

以下是一个简单的Docker Compose示例:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - 3888:80
    volumes:
      - ./nginxhtml:/usr/share/nginx/html

  db:
    image: mysql:latest
    ports: 
      - 3999:3306
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=mydb
    volumes:
      - ./mysqldata:/var/lib/mysql

在这个示例中,我们定义了两个服务: web 和 db 。

web 服务使用了 nginx:latest 镜像,并将主机的3888端口映射到容器的80端口。还定义了一个卷,将主机的 ./nginxhtml 目录映射到容器的 /usr/share/nginx/html 目录。

db 服务使用了 mysql:latest 镜像,并设置了两个环境变量 MYSQL_ROOT_PASSWORD 和 MYSQL_DATABASE 。还定义了一个卷,将主机的 ./mysqldata 目录映射到容器的 /var/lib/mysql 目录。

通过运行 docker-compose up 命令,Docker Compose将启动这两个容器,并根据定义的配置进行设置。这样,我们就可以同时运行和管理这两个容器,它们可以相互通信和交互。

你可能感兴趣的:(docker,spring,cloud,容器)