Docker入门

发布时间:2023年12月18日

一.docker介绍

1.docker是什么?

?

  • 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 <container_name> 命令来查看容器的映射端口。

总结来说, -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将启动这两个容器,并根据定义的配置进行设置。这样,我们就可以同时运行和管理这两个容器,它们可以相互通信和交互。

文章来源:https://blog.csdn.net/WANGLI123956/article/details/134911795
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。