文章目录
- 介绍Docker和容器化技术
- 什么是Docker?
- Docker的优势和应用场景
- Docker的应用场景包括但不限于:
- 安装和配置Docker
- 安装Docker引擎
- 配置Docker环境
- Docker镜像命令
- 搜索镜像
- 拉取镜像
- 查看本地镜像
- 删除本地镜像
- Docker容器命令
- 创建容器
- 启动容器
- 停止容器
- 查看容器状态
- 进入容器
- 删除容器
- Docker网络命令
- 创建网络
- 查看网络
- 连接容器到网络
- 断开容器与网络的连接
- Docker数据卷命令
- 创建数据卷
- 查看数据卷
- 挂载数据卷到容器
- 备份和恢复数据卷
- Docker Compose命令
- 编写Docker Compose文件
- 启动和停止应用
- 查看应用状态
- Docker Swarm命令
- 初始化Swarm模式
- 添加节点
- 部署服务
- 扩展和缩减服务
- Docker Registry命令
- 搭建私有仓库
- 推送镜像到私有仓库
- 从私有仓库拉取镜像
- 实际应用示例
- 使用Docker部署Web应用
- 使用Docker构建多容器应用
- Jenkins服务器中部署docker的简单调用
介绍Docker和容器化技术
什么是Docker?
Docker是一种开源的容器化平台,可以让开发者打包应用程序及其所有依赖关系(如库、环境变量、配置文件等)到一个称为容器的独立运行环境中。容器是一种轻量级、可移植的软件单元,它们可以在任何支持Docker的环境中运行,而不受底层系统的影响。
Docker的优势和应用场景
-
轻量级和快速部署: Docker容器相比于传统虚拟机更轻量级,启动速度更快,使得应用程序的部署和扩展变得更加高效。
-
环境一致性: Docker容器可以确保在不同环境中应用程序的行为一致,避免了“在我的机器上可以运行”的问题。
-
资源利用率高: 多个Docker容器可以共享主机的操作系统内核,节省了资源,提高了系统利用率。
-
易于管理: Docker提供了丰富的命令行工具和API,使得容器的管理、监控、日志查看等操作变得简单。
-
应用隔离: 每个Docker容器都是相互隔离的,一个容器的问题不会影响其他容器,提高了应用程序的安全性。
Docker的应用场景包括但不限于:
-
微服务架构: Docker容器适合部署和管理微服务,每个微服务可以打包成一个独立的容器,便于扩展和维护。
-
持续集成和持续部署(CI/CD): Docker容器可以在不同环境中快速部署,适合用于构建持续集成和持续部署的流程。
-
开发环境隔离: 开发人员可以使用Docker容器来创建隔离的开发环境,避免开发环境与生产环境不一致导致的问题。
-
跨平台开发: Docker容器可以在不同操作系统和云平台上运行,使得应用程序在各种环境中具有高度的可移植性。
通过使用Docker,开发者可以更加便捷地构建、交付和运行应用程序,提高了开发效率和部署灵活性,成为现代软件开发中不可或缺的一环。
安装和配置Docker
安装Docker引擎
安装Docker引擎是使用Docker的第一步。以下是安装Docker引擎的常见步骤:
-
Ubuntu系统下安装Docker:
-
更新apt软件包索引:
sudo apt-get update
-
安装必要的软件包以允许apt通过HTTPS使用存储库:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
-
添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
-
设置Docker稳定版存储库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
-
更新apt软件包索引:
sudo apt-get update
-
安装最新版本的Docker:
sudo apt-get install docker-ce
-
验证Docker是否安装成功:
sudo docker --version
-
-
macOS系统下安装Docker:
- 下载Docker Desktop for Mac并安装:https://www.docker.com/products/docker-desktop
-
Windows系统下安装Docker:
- 下载Docker Desktop for Windows并安装:https://www.docker.com/products/docker-desktop
配置Docker环境
安装完Docker后,通常不需要太多额外的配置。但是,你可以根据需要进行一些常见的配置,如:
-
配置Docker镜像加速器: 在国内使用Docker时,可以配置镜像加速器以加速镜像的拉取和推送。常用的镜像加速器有阿里云加速器、网易云加速器等。
-
配置Docker容器网络: 可以创建自定义网络以连接Docker容器,或者使用默认的桥接网络。
-
配置Docker存储: 可以配置Docker容器的存储驱动,如使用本地存储、网络存储或云存储等。
-
安全配置: 可以配置Docker的安全参数,如限制容器的资源使用、设置用户访问权限等。
配置Docker环境可以根据实际需求进行调整,确保Docker在你的开发和部署流程中能够更好地发挥作用。
Docker镜像命令
搜索镜像
要在Docker Hub上搜索镜像,可以使用以下命令:
docker search <镜像名称>
例如,要搜索名为ubuntu
的镜像,可以运行:
docker search ubuntu
拉取镜像
要拉取一个镜像到本地,可以使用以下命令:
docker pull <镜像名称>:<标签>
例如,要拉取Ubuntu 20.04的镜像,可以运行:
docker pull ubuntu:20.04
查看本地镜像
要查看本地已经拉取的镜像列表,可以使用以下命令:
docker images
这将列出本地所有的镜像,包括镜像名称、标签、镜像ID、创建时间等信息。
删除本地镜像
要删除本地的一个或多个镜像,可以使用以下命令:
docker rmi <镜像ID或镜像名称>
如果要删除多个镜像,可以在命令中指定多个镜像ID或名称。
例如,要删除名为ubuntu:20.04
的镜像,可以运行:
docker rmi ubuntu:20.04
请注意,删除镜像时要谨慎,确保不再需要这些镜像,因为删除后将无法恢复。
Docker容器命令
创建容器
要创建一个容器,可以使用以下命令:
docker create <镜像名称> <命令>
例如,要创建一个基于Ubuntu 20.04镜像的容器,可以运行:
docker create ubuntu:20.04
启动容器
要启动一个已经创建的容器,可以使用以下命令:
docker start <容器ID或容器名称>
例如,要启动名为my_container
的容器,可以运行:
docker start my_container
停止容器
要停止一个正在运行的容器,可以使用以下命令:
docker stop <容器ID或容器名称>
例如,要停止名为my_container
的容器,可以运行:
docker stop my_container
查看容器状态
要查看容器的状态,可以使用以下命令:
docker ps
这将列出正在运行的容器的信息,包括容器ID、镜像名称、状态、创建时间等。
如果要查看所有包括已停止的容器,可以使用-a
选项:
docker ps -a
进入容器
要进入一个正在运行的容器,可以使用以下命令:
docker exec -it <容器ID或容器名称> <命令>
例如,要进入名为my_container
的容器并打开一个交互式终端,可以运行:
docker exec -it my_container bash
这将在容器内部打开一个bash终端,可以在其中执行命令。
删除容器
要删除一个容器,可以使用以下命令:
docker rm <容器ID或容器名称>
例如,要删除名为my_container
的容器,可以运行:
docker rm my_container
请注意,删除容器时要谨慎,确保不再需要这些容器,因为删除后将无法恢复。
Docker网络命令
创建网络
要创建一个自定义网络,可以使用以下命令:
docker network create <网络名称>
例如,要创建一个名为my_network
的网络,可以运行:
docker network create my_network
查看网络
要查看Docker中存在的网络列表,可以使用以下命令:
docker network ls
这将列出所有的Docker网络,包括网络ID、名称、驱动程序等信息。
连接容器到网络
要将一个容器连接到指定的网络,可以使用以下命令:
docker network connect <网络名称> <容器ID或容器名称>
例如,要将容器my_container
连接到my_network
网络,可以运行:
docker network connect my_network my_container
断开容器与网络的连接
要将一个容器与指定网络断开连接,可以使用以下命令:
docker network disconnect <网络名称> <容器ID或容器名称>
例如,要将容器my_container
与my_network
网络断开连接,可以运行:
docker network disconnect my_network my_container
请注意,网络命令可以帮助您管理Docker中的网络配置,确保容器能够按照需要进行通信和连接。
Docker数据卷命令
创建数据卷
要创建一个数据卷,可以使用以下命令:
docker volume create <数据卷名称>
例如,要创建名为my_volume
的数据卷,可以运行:
docker volume create my_volume
查看数据卷
要查看所有的数据卷,可以使用以下命令:
docker volume ls
这将列出所有的数据卷,包括数据卷的名称和驱动程序。
挂载数据卷到容器
要将一个数据卷挂载到容器中,可以使用以下命令:
docker run -v <数据卷名称>:<容器路径> <镜像名称>
例如,要将名为my_volume
的数据卷挂载到容器的/data
路径,可以运行:
docker run -v my_volume:/data ubuntu:20.04
这将创建一个基于Ubuntu 20.04镜像的容器,并将my_volume
数据卷挂载到容器的/data
路径。
备份和恢复数据卷
要备份数据卷,可以使用以下命令将数据卷导出为一个.tar文件:
docker run --rm -v <数据卷名称>:/data -v <目标路径>:/backup ubuntu:20.04 tar cvf /backup/<备份文件名>.tar /data
例如,要备份名为my_volume
的数据卷到/backup
目录下的my_volume_backup.tar
文件中,可以运行:
docker run --rm -v my_volume:/data -v /backup:/backup ubuntu:20.04 tar cvf /backup/my_volume_backup.tar /data
要恢复数据卷,可以使用以下命令将.tar文件导入到一个新的数据卷中:
docker run --rm -v <目标路径>:/data -v <备份文件路径>:/backup ubuntu:20.04 tar xvf /backup/<备份文件名>.tar -C /data
例如,要将/backup
目录下的my_volume_backup.tar
文件恢复为一个名为my_volume_restore
的数据卷,可以运行:
docker run --rm -v my_volume_restore:/data -v /backup:/backup ubuntu:20.04 tar xvf /backup/my_volume_backup.tar -C /data
这将创建一个名为my_volume_restore
的数据卷,并将备份文件中的内容恢复到该数据卷中。
Docker Compose命令
编写Docker Compose文件
Docker Compose使用YAML文件来定义和配置多个容器应用。以下是一个简单的Docker Compose文件示例:
version: '3'
services:
web:
image: nginx:latest
ports:
- 80:80
volumes:
- ./html:/usr/share/nginx/html
在这个示例中,我们定义了一个名为web
的服务,使用了nginx:latest
镜像,并将主机的80端口映射到容器的80端口。还使用了一个数据卷将主机上的./html
目录挂载到容器的/usr/share/nginx/html
路径。
启动和停止应用
要启动使用Docker Compose定义的应用程序,可以使用以下命令:
docker-compose up
这将根据Docker Compose文件启动所有定义的服务。
要停止应用程序,可以使用以下命令:
docker-compose down
这将停止并移除所有相关的容器、网络和数据卷。
查看应用状态
要查看Docker Compose应用程序的状态,可以使用以下命令:
docker-compose ps
这将显示所有定义的服务的状态,包括容器ID、状态、端口映射等信息。
可以使用其他Docker命令,如docker ps
和docker logs
,来查看单个服务的状态和日志。
Docker Swarm命令
Docker Swarm是Docker的内置原生集群和编排工具。它允许您将多个Docker主机组成一个集群,以便轻松地部署和管理分布式应用程序。
初始化Swarm模式
要初始化一个Docker Swarm集群,可以使用以下命令:
docker swarm init
这将将当前主机设置为Swarm管理节点,并生成一个加入令牌,用于其他节点加入集群。
添加节点
要将其他节点加入到Swarm集群中,可以使用以下命令:
docker swarm join --token <加入令牌> <管理节点IP>:<端口>
其中,<加入令牌>
是在初始化Swarm模式时生成的加入令牌,<管理节点IP>
是Swarm管理节点的IP地址,<端口>
是Swarm管理节点的监听端口。
部署服务
要在Swarm集群中部署服务,可以使用以下命令:
docker service create --name <服务名称> --replicas <副本数> <镜像名称>
其中,<服务名称>
是要部署的服务的名称,<副本数>
是要运行的服务副本数,<镜像名称>
是要使用的镜像名称。
例如,要部署一个名为my_service
的服务,使用nginx:latest
镜像,并运行3个副本,可以运行:
docker service create --name my_service --replicas 3 nginx:latest
扩展和缩减服务
要扩展或缩减Swarm集群中的服务副本数,可以使用以下命令:
docker service scale <服务名称>=<副本数>
例如,要将名为my_service
的服务的副本数扩展到5个,可以运行:
docker service scale my_service=5
这将增加my_service
服务的副本数到5个。
要缩减副本数,只需将<副本数>
设置为较小的值即可。
请注意,Swarm会自动处理服务的副本分布和容器的调度,以确保服务的高可用性和负载均衡。
Docker Registry命令
Docker Registry是Docker官方提供的镜像仓库服务,您可以使用它来存储和管理Docker镜像。您可以搭建私有的Docker Registry来存储自己的镜像。
搭建私有仓库
要搭建私有的Docker Registry,可以使用以下命令:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
这将在本地启动一个私有的Docker Registry服务,并映射到主机的5000端口。
推送镜像到私有仓库
要将一个镜像推送到私有仓库,首先需要给镜像打上私有仓库地址的标签,然后推送到私有仓库。以下是推送镜像到私有仓库的命令:
docker tag image_name localhost:5000/image_name
docker push localhost:5000/image_name
这将把名为image_name
的镜像推送到搭建的私有仓库中。
从私有仓库拉取镜像
要从私有仓库拉取镜像,可以使用以下命令:
docker pull localhost:5000/image_name
这将从私有仓库中拉取名为image_name
的镜像到本地。
实际应用示例
使用Docker部署Web应用
以下是使用Docker部署Web应用的示例步骤:
-
编写Dockerfile:创建一个名为Dockerfile的文件,其中定义了如何构建Web应用的Docker镜像。例如,可以基于一个现有的Web服务器镜像,如Nginx或Apache,将应用程序代码复制到镜像中,并设置适当的配置。
-
构建Docker镜像:在终端中导航到包含Dockerfile的目录,并运行以下命令来构建镜像:
docker build -t my_web_app .
这将根据Dockerfile构建一个名为
my_web_app
的镜像。 -
运行Docker容器:使用以下命令将镜像作为容器运行起来:
docker run -d -p 80:80 my_web_app
这将在端口80上将容器的80端口映射到主机上,使Web应用可通过主机的IP地址访问。
现在,您的Web应用已经在Docker容器中运行,并且可以通过主机的IP地址访问。
使用Docker构建多容器应用
对于复杂的应用程序,可能需要多个容器来支持不同的组件。以下是使用Docker构建多容器应用的示例步骤:
-
编写Docker Compose文件:创建一个名为docker-compose.yml的文件,其中定义了应用程序的各个服务和它们之间的依赖关系。在该文件中,可以指定每个服务使用的镜像、容器之间的网络连接等。
-
编写Dockerfile:为每个服务编写Dockerfile,定义如何构建每个服务的镜像。可以使用不同的基础镜像和安装所需的软件包、配置等。
-
构建和启动应用程序:在终端中导航到包含docker-compose.yml文件的目录,并运行以下命令来构建和启动应用程序:
docker-compose up -d
这将根据docker-compose.yml文件中的配置构建和启动应用程序的所有服务。
现在,您的多容器应用程序已经在Docker中构建和运行起来了。Docker Compose会自动处理服务之间的网络连接和依赖关系,使应用程序的部署变得简单和可靠。
请注意,这只是一个简单的示例,实际的多容器应用程序可能涉及更多的服务和复杂的配置。
Jenkins服务器中部署docker的简单调用
-
运行命令
docker run -d -it --name rocketmq-dashboard --restart=always -d -p 6765:8080 xxx.com/cea/rocketmq-dashboard:1.0.0
docker run
: 运行一个新的容器。-d
: 后台运行容器。-it
: 分配一个伪终端并保持标准输入打开。--name rocketmq-dashboard
: 为容器指定一个名称为rocketmq-dashboard
。--restart=always
: 设置容器总是在Docker守护进程启动时重新启动。-p 6765:8080
: 将主机的端口6765映射到容器的端口8080。xxx.com/cea/rocketmq-dashboard:1.0.0
: 要运行的镜像名称及其标签。
-
查看进程名称
docker ps
docker ps
: 查看正在运行的容器列表。
-
进入运行目录
进入运行目录 xxxx 可以是ps查出来的名称 也可以是iddocker exec -it xxxxx /bin/bash
docker exec
: 在运行的容器中执行命令。-it
: 分配一个伪终端并保持标准输入打开。xxxxx
: 容器的名称或ID。/bin/bash
: 要在容器中执行的命令,这里是启动一个bash shell。