本文提供了详细的Docker部署教程,适合新手入门学习。内容涵盖Docker的安装、环境配置、镜像和容器的操作以及网络与存储管理。通过实际案例,如Web应用和数据库服务的部署,进一步加深对Docker应用的理解。Docker部署教程中包含了从基础到高级的各种操作步骤。
Docker简介与环境搭建Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源。Docker 可以让开发者打包应用及其依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker 采用客户端-服务器架构,Docker 客户端的命令可以连接 Docker 客户端和 Docker 服务端,也可以直接使用命令行与本地 Docker 服务端进行交互。
Docker 支持在多种操作系统上安装,以下是主要的操作系统安装步骤:
更新包索引:
sudo apt-get update
安装包以允许 apt
使用存储库:
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 -
使用新的GPG密钥验证:
sudo apt-key fingerprint 0EBFCD88
添加Docker的APT存储库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
更新包索引并安装Docker CE:
sudo apt-get update sudo apt-get install docker-ce
sudo docker run hello-world
卸载旧的Docker版本(如果已安装):
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine
安装必要的依赖包:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加Docker存储库:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装Docker CE:
sudo yum install docker-ce
启动Docker服务:
sudo systemctl start docker
sudo docker run hello-world
Docker 镜像仓库有官方的 Docker Hub 和私有的仓库,如 Docker Enterprise Edition 中的 Docker Trusted Registry (DTR),也可以使用其他第三方提供的镜像仓库,如阿里云、腾讯云等。设置仓库需要先登录到相应的仓库。
docker login # 输入用户名和密码
默认情况下,Docker在Linux系统上的存储位置是 /var/lib/docker
,可以通过以下命令设置自定义的存储位置:
sudo mkdir -p /my/docker sudo mount -t tmpfs -o size=10G tmpfs /my/docker echo ' { "graph": "/my/docker" }' | sudo tee /etc/docker/daemon.json sudo systemctl restart docker
可以从 Docker Hub 或其他公共镜像仓库中获取 Docker 镜像。Docker Hub 拥有大量的官方镜像,包括 Linux 发行版、开发工具、Web 服务器等。
搜索镜像:
docker search ubuntu
docker pull ubuntu
使用 docker images
命令查看本地的 Docker 镜像列表。
docker images
输出结果:
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest b0e2f0c3b4c9 5 weeks ago 64.2MB
使用 docker rmi
命令删除本地的 Docker 镜像。
docker rmi ubuntu:latest
使用 docker run
命令创建并运行 Docker 容器。以下是一些常用的参数:
-d
:后台运行容器--name
:指定容器名称-p
:指定端口映射示例:
docker run -d --name my-ubuntu -p 8080:80 ubuntu:latest
使用 docker ps
命令查看正在运行的 Docker 容器。
docker ps
输出结果:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c4567890abcdef ubuntu:latest "/bin/bash" 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp my-ubuntu
使用 docker stop
命令停止容器。
docker stop my-ubuntu
使用 docker start
命令重启容器。
docker start my-ubuntu
使用 docker rm
命令删除容器。
docker rm my-ubuntu
Docker 通过多种网络模式来支持容器间的通信,包括桥接网络、主机网络、容器网络等。
创建桥接网络:
docker network create my-net
docker run -d --name my-ubuntu --network my-net -p 8080:80 ubuntu:latest
Docker 数据卷是一种持久化存储机制,可以将数据保存在容器之外。这种方式的好处是,即使容器被删除,数据仍然可以保存下来。
创建数据卷:
docker volume create my-data
docker run -d --name my-ubuntu -v my-data:/app ubuntu:latest
以下是 Docker 常用的一些命令:
docker run
:创建并运行一个新的容器docker ps
:列出正在运行的容器docker images
:列出所有镜像docker build
:使用 Dockerfile 构建镜像docker rmi
:删除一个或多个镜像docker rm
:删除一个或多个容器构建Docker镜像:
docker build -t my-app .
解释:-t my-app
参数:给构建的镜像指定一个标签,这里指定为 my-app
。.
表示 Dockerfile 文件在当前目录下。
从Dockerfile构建镜像并运行容器:
docker build -t my-app . && docker run -d --name my-app-container my-app
解释:docker build -t my-app .
构建一个名为 my-app
的镜像。docker run -d --name my-app-container my-app
从 my-app
镜像运行一个后台容器,并命名为 my-app-container
。
部署一个简单的 Web 应用,例如使用 Flask 框架的 Python 应用。
创建一个简单的 Flask 应用:
# app.py from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' if __name__ == '__main__': app.run(host='0.0.0.0')
创建 Dockerfile 文件:
# Dockerfile FROM python:3.7 WORKDIR /app COPY . /app RUN pip install -r requirements.txt CMD ["python", "app.py"]
构建并运行 Docker 镜像:
# 构建镜像 docker build -t my-web-app . # 运行容器 docker run -d --name my-web-container -p 8080:80 my-web-app
验证应用是否运行成功,可以使用浏览器访问 http://localhost:8080
,若看到 "Hello, World!",则表示应用启动成功。
部署一个简单的 MySQL 数据库服务。
创建 Dockerfile 文件:
# Dockerfile FROM mysql:5.7 ENV MYSQL_ROOT_PASSWORD=root ENV MYSQL_DATABASE=mydb ENV MYSQL_USER=myuser ENV MYSQL_PASSWORD=mypassword
构建并运行 Docker 镜像:
# 构建镜像 docker build -t my-mysql . # 运行容器 docker run -d --name my-mysql-container -p 3306:3306 my-mysql
验证数据库是否运行成功,可以使用 MySQL 客户端连接到新创建的数据库实例,命令如下:
mysql -h localhost -P 3306 -u myuser -p
通过以上步骤,可以成功地将 Web 应用和数据库服务部署到 Docker 中,充分利用 Docker 的优势,实现应用的快速部署和管理。