本文介绍了Docker部署的基础知识和步骤,包括Docker的安装、镜像和容器的基础操作以及常用命令。详细讲解了如何通过Dockerfile创建和运行容器,并提供了部署Web应用和数据库服务的实战案例。Docker部署能够确保应用在任何环境下的运行一致性,简化了开发和部署流程。
Docker简介及安装Docker 是一种开源的应用容器引擎,可以让开发者打包一个应用及其依赖关系到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
使用 Docker,开发者可以打包一个应用及其依赖关系到一个可移植的容器中,然后发布到任何支持Docker的环境中,而无需担心兼容性问题。Docker 采用操作系统级的虚拟化技术,不需要虚拟机,使用资源效率更高。
在Linux、Windows和MacOS上安装Docker的步骤如下:
# 更新包列表 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 - # 设置稳定存储库 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # 更新包列表 sudo apt-get update # 安装Docker CE sudo apt-get install docker-ce
在Windows或MacOS上,可以通过Docker Desktop进行安装。从Docker官网下载Docker Desktop,按照安装向导进行安装即可。
安装完成后,可以通过以下命令验证Docker是否安装成功:
# 检查Docker版本 docker --version
如果安装成功,将输出Docker的版本信息。
Docker镜像和容器基础Docker镜像是一个只读的模板,包含了启动容器所需的所有内容,包括应用代码、运行时环境、库和工具等。镜像可以用来创建和启动Docker容器。
你可以通过Docker Hub等镜像仓库获取Docker镜像。例如,以下命令可以拉取一个官方的Nginx镜像:
docker pull nginx
Docker容器是镜像运行实例。容器是轻量级的、可移植的和自包含的环境,用于运行应用程序及其依赖项。容器由镜像创建。容器可以启动、停止、删除和停止。
你可以使用以下命令来运行一个Nginx容器:
docker run -d --name my-nginx nginx
上述命令中的-d
参数表示容器将在后台运行,--name
参数用于指定容器的名称,nginx
是镜像名称。
可以使用以下命令查看本地已有的镜像:
docker images
使用以下命令搜索Docker Hub上的镜像:
docker search nginx
你可以使用docker run
命令来创建并运行一个Docker容器。例如,创建一个名为my-webapp
的容器,使用my-webapp
镜像:
docker run -d --name my-webapp my-webapp
你可以使用以下命令来启动一个已经存在的容器:
docker start my-webappDocker常用命令
docker pull nginx
docker ps -a
docker start my-nginx
docker stop my-nginx
Dockerfile是一个文本文件,包含了构建Docker镜像所需的所有命令。Dockerfile文件中定义了一系列的命令,用来自动构建容器镜像。
# 使用官方的Python基础镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 复制当前目录的内容到容器内的/app目录 COPY . /app # 安装任何需要的包 RUN pip install --no-cache-dir -r requirements.txt # 指定启动命令 CMD ["python", "app.py"]
要创建自定义镜像,首先需要编写一个Dockerfile,然后使用docker build
命令构建镜像。
# 构建镜像 docker build -t my-webapp:v1 .
上述命令会构建一个镜像,并命名为my-webapp:v1
。
Docker部署是指将应用打包成Docker容器,并将其部署到生产环境的过程。通过使用Docker,可以确保应用在任何环境下的运行一致性。
假设你有一个简单的Python应用,代码如下:
# app.py from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, Docker!' if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
# 使用官方的Python基础镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 复制当前目录的内容到容器内的/app目录 COPY . /app # 指定启动命令 CMD ["python", "app.py"]
# 构建镜像 docker build -t simple-webapp . # 运行容器 docker run -d -p 5000:5000 --name my-webapp simple-webapp
上述命令会构建一个镜像,并将其命名为simple-webapp
。然后运行容器,并将容器的5000端口映射到主机的5000端口。
Docker支持多种网络模式,包括bridge
、host
、overlay
和none
等。默认情况下,Docker容器使用bridge
网络模式。
docker network ls
docker network create my-network
docker run -d --name my-webapp --network my-network simple-webappDocker容器的管理和维护
Docker容器的备份和恢复可以通过创建和导出容器的快照来实现。
docker commit my-webapp my-webapp-backup
docker export my-webapp > my-webapp-backup.tar
# 从镜像恢复容器 docker import my-webapp-backup.tar my-webapp-backup # 从tar文件恢复容器 docker import my-webapp-backup.tar
docker rm my-webapp
docker system prune
Docker允许用户对容器设置资源限制,包括CPU和内存使用量。
docker run --cpus="0.5" my-webapp
docker run --memory="256m" my-webappDocker部署实战案例
假设你有一个简单的Flask应用,代码如下:
# app.py from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, Docker!' if __name__ == '__main__': app.run(host='0.0.0.0', port=8080)
# 使用官方的Python基础镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 复制当前目录的内容到容器内的/app目录 COPY . /app # 指定启动命令 CMD ["python", "app.py"]
# 构建镜像 docker build -t my-webapp . # 运行容器 docker run -d -p 8080:8080 --name my-webapp my-webapp
上述命令会构建一个镜像,并将其命名为my-webapp
。然后运行容器,并将容器的8080端口映射到主机的8080端口。
假设你希望部署一个MySQL数据库。
docker pull mysql:latest
docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 mysql
上述命令会从Docker Hub拉取最新的MySQL镜像,并启动一个MySQL容器,设置环境变量MYSQL_ROOT_PASSWORD
为my-secret-pw
,并将容器的3306端口映射到主机的3306端口。
docker exec -it my-mysql mysql -uroot -p
上述命令会打开MySQL的交互界面,使用root用户登录。
通过以上步骤,你可以成功搭建并维护一个Docker环境,从简单的Web应用到复杂的数据库服务,都能轻松部署和管理。