简介

Docker是一个开源的应用容器引擎,它允许开发者将他们的应用及其依赖包打包到一个可移植的容器中,并发布到任何流行的Linux或Windows操作系统的机器上。Docker容器是完全使用沙箱机制,相互之间不会有任何接口,从而提供了高度的隔离性和安全性。

Docker由多个组件组成,包括Docker客户端(DockerClient)、Docker守护进程(Docker Daemon)、Docker镜像(Docker Image)和Docker容器(Docker Container)等。这些组件协同工作,使得开发者能够轻松地构建、运行和管理应用程序容器。

作用

以下几个方面:

  1. 应用程序打包:Docker可以将应用程序及其所有依赖项打包成一个称为容器的单元。这意味着,无论在哪里运行Docker,应用程序都能以相同的方式运行,从而消除了“在我的机器上工作”的问题。
  2. 简化部署:使用Docker,开发人员可以创建包含所有依赖项和配置的应用程序镜像,并将其推送到Docker仓库。然后,运维人员可以从该仓库中拉取镜像,并在生产环境中运行它,无需担心环境差异。
  3. 简化配置:Docker使用Dockerfile来定义应用程序的镜像。Dockerfile是一个文本文件,其中包含一组指令,用于构建Docker镜像。这些指令基于基础镜像(如Ubuntu、CentOS等),并添加应用程序所需的依赖项、文件、环境变量等。通过这种方式,开发人员可以确保应用程序在所有环境中都有相同的配置。
  4. 可扩展性:Docker支持水平扩展,即可以通过添加更多的容器实例来增加处理能力。这意味着,当需要处理更多的请求或数据时,可以轻松地添加更多的容器实例,而无需修改应用程序代码或配置。
  5. 隔离性:Docker容器具有高度的隔离性,每个容器都运行在自己的环境中,与其他容器和宿主机隔离。这种隔离性确保了容器之间的安全性和稳定性,避免了不同应用程序之间的冲突和干扰。
  6. 轻量级和快速:Docker容器比传统的虚拟机更轻量级,因为它们共享宿主机的内核和库。这使得Docker容器能够更快地启动和停止,并且占用的资源更少。
  7. 多平台支持:Docker支持多种操作系统和平台,包括Linux、Windows和macOS等。这使得开发人员可以在不同的平台上构建和运行应用程序,并确保在不同环境中的一致性。
  8. 持续集成和持续部署(CI/CD):Docker与CI/CD工具(如Jenkins、GitLab CI等)紧密集成,可以自动构建、测试和部署应用程序。这大大提高了开发效率,并减少了手动错误的可能性。
  9. 版本控制:Docker镜像可以像代码一样进行版本控制。这意味着,可以轻松地跟踪和管理应用程序的更改,并回滚到以前的版本(如果需要)。
  10. 社区支持:Docker有一个庞大的社区,提供了大量的教程、示例、工具和插件。这使得学习和使用Docker变得更加容易,并且可以获得来自社区的支持和帮助。

快速入门

镜像和容器

当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需的环境,配置,系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器(container)

由于镜像还打包了自身所需要的环境,配置,系统函数库,这使其可以在不同系统环境下运行,也就是说Docker的镜像可以忽略操作系统的环境,忽略系统本身的差异而去直接部署,而其中创建的隔离环境-容器,这使之我们可以在一台服务器中部署多个应用,从而做的互不打扰,减少了资源的浪费

下载实例(部署Mysql)

1
docker run -d --name mysql -p 3306:3306 -e TZ=Aisa/Shanghai -e MYSQL_ROOT_PASSWORD=123 mysql

我们启动Dokcer后,Docker会启动一个服务,即Docker守护进程(Docker Daemon),他会监听Docker客户端(Docker Client)的命令,当我们下达了docker run命令后,守护进程就会监听到,然后就会到镜像仓库(存储和管理镜像的平台,Docker官方维护了一个公共仓库 Docker Hub)寻找你所需要的镜像并拉去到本地

命令解读(docker run)

  • -d:让容器后台运行
  • --name:给容器命名
  • -e:环境变量
  • -p:将宿主机端口映射到容器内端口
  • 名称结构 镜像名(repository):版本号(TAG)如果未指定版本号,即默认最新版

常用命令

环境信息

  • docker info: 显示Docker系统信息,包括容器和镜像的数量、Docker使用的执行驱动和存储驱动等。
  • docker version: 显示Docker版本信息,包括客户端和服务器端的版本号、API版本、Git commit等。

2. 镜像管理

  • docker images: 列出本地主机上的所有镜像。
  • docker search [IMAGE_NAME]: 从Docker Hub搜索镜像。
  • docker pull [IMAGE_NAME]: 从Docker Hub或其他仓库下载镜像到本地。
  • docker rmi [IMAGE_ID]: 删除本地的一个或多个镜像。
  • docker build: 使用Dockerfile构建镜像。
  • docker tag [SOURCE_IMAGE] [TARGET_IMAGE]: 标记本地镜像,将其归入某一仓库。
  • docker push [IMAGE_NAME]: 将本地的镜像推送到Docker Hub或其他仓库。

3. 容器管理

  • docker run: 创建一个新的容器并运行一个命令。若本地没有指定镜像,则会到默认仓库中拉去该镜像
  • docker ps: 列出当前正在运行的容器。
  • docker ps -a: 列出所有容器,包括已经停止的容器。
  • docker stop [CONTAINER_ID]: 停止一个或多个正在运行的容器。
  • docker start [CONTAINER_ID]: 启动一个或多个已经停止的容器。
  • docker restart [CONTAINER_ID]: 重启一个或多个容器。
  • docker rm [CONTAINER_ID]: 删除一个或多个容器。
  • docker attach [CONTAINER_ID]: 连接到正在运行中的容器。
  • docker exec -it [CONTAINER_ID] [COMMAND]: 在运行的容器中执行命令。
  • docker logs [CONTAINER_ID]: 获取容器的日志。
  • docker inspect [CONTAINER_ID]: 查看容器的详细信息。
  • docker top [CONTAINER_ID]: 查看容器中运行的进程。
  • docker cp [CONTAINER_ID]:[PATH_IN_CONTAINER] [PATH_IN_HOST]: 从容器中复制文件到主机上。

4. 系统信息和日志

  • docker events: 从服务器获取实时事件。
  • docker history [IMAGE_NAME]: 显示一个镜像的历史。

数据卷挂载

数据卷

数据卷是一个虚拟目录,他将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器内产生的数据

如何挂在数据卷

  • 在创建容器时,利用-v 数据卷名:容器内目录完成挂载

    1
    docker run -d --name  nginx -p 80:80 -v html:/user/share/nginx/html nginx
  • 容器创建时,如果发现挂载的数据卷不存在,会自动创建

常见命令

  • docker volume ls:查看数据卷
  • docker volume rm:删除数据卷
  • docker volume inspect:查看数据卷详情
  • docker volume prune:删除未使用数据卷

Dockerfile

镜像的结构是什么

镜像中包含了应用程序所需要的运行环境,函数库,配置以及应用本身等各种文件,这些文件分层打包而成

Dockerfile是做什么

Dockerfile就是利用固定的指令来描述镜像的结构和构建过程,这样Docker才可以来构建镜像

构建镜像的命令是什么

docker build -t 镜像名 Dockerfile目录

容器网络互联

命令 说明
docker network create 创建一个网络
docker network ls 查看所有网络
docker network rm 删除指定网络
docker network prune 清除未使用网络
docker network connect 使指定容器连接加入某网络
docker network disconnect 使指定容器连接离开某网络
docker network inspect 查看网络详细信息