1. Docker 基础
1.1 什么是 Docker
Docker 是一个开源平台,允许开发人员自动化地部署、扩展和管理应用程序。它通过容器来实现这些功能。容器是轻量级、可移植的环境,用于打包和运行应用程序及其所有依赖。
1.2 Docker vs 虚拟机
特性 | Docker 容器 | 虚拟机 |
---|---|---|
启动时间 | 秒级别 | 分钟级别 |
资源占用 | 共享主机操作系统内核,资源效率高 | 包含完整操作系统,资源占用较多 |
性能 | 接近原生 | 由于虚拟化开销,性能有所损失 |
可移植性 | 高,可在任何支持 Docker 的环境运行 | 相对较低,不同虚拟化平台之间迁移困难 |
2. 安装 Docker
2.1 在 Windows 上安装 Docker
- 从 Docker 官网 下载 Docker Desktop。
- 运行安装程序并按照提示完成安装。
- 安装完成后,启动 Docker Desktop。
2.2 在 macOS 上安装 Docker
- 从 Docker 官网 下载 Docker Desktop。
- 运行安装程序并将 Docker 图标拖到 Applications 文件夹中。
- 启动 Docker Desktop。
2.3 在 Linux 上安装 Docker
- 更新现有的软件包:
sudo apt-get update
- 安装必要的依赖:
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 APT 仓库:
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 systemctl start docker
sudo systemctl enable docker
3. Docker 基本操作
3.1 拉取镜像
使用 docker pull
命令从 Docker Hub 拉取镜像。例如,拉取官方的 Ubuntu 镜像:
docker pull ubuntu
3.2 运行容器
使用 docker run
命令运行容器。例如,运行一个交互式的 Ubuntu 容器:
docker run -it ubuntu
3.3 列出容器
使用 docker ps
命令列出正在运行的容器:
sh
复制代码
docker ps
使用 docker ps -a
命令列出所有容器,包括已停止的容器:
docker ps -a
3.4 停止容器
使用 docker stop
命令停止一个容器:
docker stop <容器ID>
3.5 删除容器
使用 docker rm
命令删除一个容器:
docker rm <容器ID>
3.6 删除镜像
使用 docker rmi
命令删除一个镜像:
docker rmi <镜像ID>
4. 使用 Dockerfile 构建镜像
4.1 编写 Dockerfile
创建一个名为 Dockerfile
的文件,内容如下:
# 使用官方的 Node.js 镜像作为基础镜像
FROM node:14
# 创建应用目录
WORKDIR /usr/src/app
# 复制 package.json 和 package-lock.json
COPY package*.json ./
# 安装依赖
RUN npm install
# 复制应用代码
COPY . .
# 暴露应用运行端口
EXPOSE 8080
# 启动应用
CMD ["node", "app.js"]
4.2 构建镜像
使用 docker build
命令根据 Dockerfile 构建镜像:
docker build -t mynodeapp .
4.3 运行镜像
使用 docker run
命令运行构建的镜像:
docker run -p 8080:8080 -d mynodeapp
4.4 访问应用
在浏览器中访问 http://localhost:8080
,你应该能够看到运行中的 Node.js 应用。
5. Docker Compose
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。
5.1 安装 Docker Compose
Docker Desktop 自带 Docker Compose。对于 Linux 用户,可以使用以下命令安装:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
5.2 编写 docker-compose.yml
创建一个 docker-compose.yml
文件,内容如下:
version: '3.8'
services:
app:
image: mynodeapp
ports:
- "8080:8080"
5.3 启动服务
使用 docker-compose up
启动服务:
docker-compose up
5.4 停止服务
使用 docker-compose down
停止服务:
docker-compose down
6. 高级主题
6.1 持久化数据
使用卷(volumes)来持久化数据:
docker run -d -p 8080:8080 -v /host/path:/container/path mynodeapp
6.2 网络
Docker 提供了多种网络模式,可以通过 docker network
命令进行管理:
docker network create mynetwork
docker run -d --network=mynetwork --name=mycontainer myimage
7. 常用命令总结
命令 | 描述 |
---|---|
docker pull <镜像名> |
拉取镜像 |
docker run -it <镜像名> |
运行容器 |
docker ps |
列出正在运行的容器 |
docker ps -a |
列出所有容器 |
docker stop <容器ID> |
停止容器 |
docker rm <容器ID> |
删除容器 |
docker rmi <镜像ID> |
删除镜像 |
docker build -t <镜像名> . |
根据 Dockerfile 构建镜像 |
docker-compose up |
启动 Compose 配置的服务 |
docker-compose down |
停止 Compose 配置的服务 |
docker volume create <卷名> |
创建卷 |
docker network create <网络名> |
创建网络 |
通过以上教程,你应该对 Docker 有了一个全面的了解,并能够进行基础的操作和应用部署。Docker 是一个非常强大且灵活的工具,随着使用的深入,你会发现它在各种场景下的强大功能。
拉取 MySQL 镜像是指从 Docker Hub 下载一个包含 MySQL 数据库的镜像到本地。以下是详细的步骤和相关说明:
8. 拉取 MySQL 镜像
使用 docker pull
命令从 Docker Hub 拉取 MySQL 镜像。例如,拉取最新版本的 MySQL 镜像:
docker pull mysql
如果需要特定版本的 MySQL,可以在镜像名称后面加上标签。例如,拉取 MySQL 8.0 版本的镜像:
docker pull mysql:8.0
9. 查看已拉取的镜像
拉取镜像后,可以使用以下命令查看本地的 Docker 镜像列表:
docker images
输出示例:
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 9d9e92d50fc2 2 days ago 448MB
10. 运行 MySQL 容器
运行 MySQL 容器时,需要指定一些环境变量,例如 MySQL 根用户的密码。以下是运行 MySQL 容器的基本命令:
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
--name mysql-container
:指定容器的名称为mysql-container
。-e MYSQL_ROOT_PASSWORD=my-secret-pw
:设置 MySQL 根用户的密码为my-secret-pw
。-d
:在后台运行容器。
11. 验证 MySQL 容器是否运行
使用 docker ps
命令查看正在运行的容器:
docker ps
输出示例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e7b35b9c1f3e mysql "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 3306/tcp, 33060/tcp mysql-container
11. 连接到 MySQL 容器
使用 docker exec
命令进入 MySQL 容器并连接到 MySQL 数据库:
docker exec -it mysql-container mysql -u root -p
系统会提示你输入 MySQL 根用户的密码(即之前设置的 my-secret-pw
)。
12. 数据持久化
为了确保 MySQL 数据库的数据在容器停止或删除后不会丢失,可以将数据目录挂载到主机上。以下是挂载数据卷的示例:
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -v /my/own/datadir:/var/lib/mysql -d mysql
-v /my/own/datadir:/var/lib/mysql
:将主机上的/my/own/datadir
目录挂载到容器内的/var/lib/mysql
目录,这样 MySQL 的数据将保存在主机上。
13. 端口映射
如果你需要从主机或其他容器访问 MySQL 服务,可以使用端口映射。例如,将容器内的 MySQL 端口(默认 3306)映射到主机的 3306 端口:
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql
完整示例
结合以上所有配置,以下命令将启动一个 MySQL 容器,设置根用户密码、挂载数据卷、并进行端口映射:
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -v /my/own/datadir:/var/lib/mysql -p 3306:3306 -d mysql
常见问题
- 无法连接 MySQL 容器:确保端口映射正确,并检查防火墙配置。如果连接到 MySQL 时遇到权限问题,请确保使用正确的用户名和密码。
- 数据丢失:使用数据卷来持久化数据,确保数据不会因为容器的停止或删除而丢失。
- 性能问题:对于生产环境,建议调优 MySQL 配置,并使用适当的硬件资源。
通过以上步骤,你可以成功拉取并运行 MySQL 镜像,配置 MySQL 容器,并实现数据持久化和端口映射。Docker 提供的容器化技术使得数据库管理更加便捷和高效。
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:http://example.com/subject/article/97/
许可协议:署名-非商业性使用 4.0 国际许可协议