Docker学习
简介
Docker是一个开源的应用容器引擎,它允许开发者将他们的应用及其依赖包打包到一个可移植的容器中,并发布到任何流行的Linux或Windows操作系统的机器上。Docker容器是完全使用沙箱机制,相互之间不会有任何接口,从而提供了高度的隔离性和安全性。
Docker由多个组件组成,包括Docker客户端(DockerClient)、Docker守护进程(Docker Daemon)、Docker镜像(Docker Image)和Docker容器(Docker Container)等。这些组件协同工作,使得开发者能够轻松地构建、运行和管理应用程序容器。
作用
以下几个方面:
- 应用程序打包:Docker可以将应用程序及其所有依赖项打包成一个称为容器的单元。这意味着,无论在哪里运行Docker,应用程序都能以相同的方式运行,从而消除了“在我的机器上工作”的问题。
- 简化部署:使用Docker,开发人员可以创建包含所有依赖项和配置的应用程序镜像,并将其推送到Docker仓库。然后,运维人员可以从该仓库中拉取镜像,并在生产环境中运行它,无需担心环境差异。
- 简化配置:Docker使用Dockerfile来定义应用程序的镜像。Dockerfile是一个文本文件,其中包含一组指令,用于构建Docker镜像。这些指令基于基础镜像(如Ubuntu、CentOS等),并添加应用程序所需的依赖项、文件、环境变量等。通过这种方式,开发人员可以确保应用程序在所有环境中都有相同的配置。
- 可扩展性:Docker支持水平扩展,即可以通过添加更多的容器实例来增加处理能力。这意味着,当需要处理更多的请求或数据时,可以轻松地添加更多的容器实例,而无需修改应用程序代码或配置。
- 隔离性:Docker容器具有高度的隔离性,每个容器都运行在自己的环境中,与其他容器和宿主机隔离。这种隔离性确保了容器之间的安全性和稳定性,避免了不同应用程序之间的冲突和干扰。
- 轻量级和快速:Docker容器比传统的虚拟机更轻量级,因为它们共享宿主机的内核和库。这使得Docker容器能够更快地启动和停止,并且占用的资源更少。
- 多平台支持:Docker支持多种操作系统和平台,包括Linux、Windows和macOS等。这使得开发人员可以在不同的平台上构建和运行应用程序,并确保在不同环境中的一致性。
- 持续集成和持续部署(CI/CD):Docker与CI/CD工具(如Jenkins、GitLab CI等)紧密集成,可以自动构建、测试和部署应用程序。这大大提高了开发效率,并减少了手动错误的可能性。
- 版本控制:Docker镜像可以像代码一样进行版本控制。这意味着,可以轻松地跟踪和管理应用程序的更改,并回滚到以前的版本(如果需要)。
- 社区支持: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 |
查看网络详细信息 |