1. Docker 基础

1.1 什么是 Docker

Docker 是一个开源平台,允许开发人员自动化地部署、扩展和管理应用程序。它通过容器来实现这些功能。容器是轻量级、可移植的环境,用于打包和运行应用程序及其所有依赖。

1.2 Docker vs 虚拟机

特性 Docker 容器 虚拟机
启动时间 秒级别 分钟级别
资源占用 共享主机操作系统内核,资源效率高 包含完整操作系统,资源占用较多
性能 接近原生 由于虚拟化开销,性能有所损失
可移植性 高,可在任何支持 Docker 的环境运行 相对较低,不同虚拟化平台之间迁移困难

2. 安装 Docker

2.1 在 Windows 上安装 Docker

  1. 从 Docker 官网 下载 Docker Desktop。
  2. 运行安装程序并按照提示完成安装。
  3. 安装完成后,启动 Docker Desktop。

2.2 在 macOS 上安装 Docker

  1. 从 Docker 官网 下载 Docker Desktop。
  2. 运行安装程序并将 Docker 图标拖到 Applications 文件夹中。
  3. 启动 Docker Desktop。

2.3 在 Linux 上安装 Docker

  1. 更新现有的软件包:

sudo apt-get update

  1. 安装必要的依赖:

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

  1. 添加 Docker 的官方 GPG 密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

  1. 添加 Docker APT 仓库:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

  1. 更新 APT 包索引:

sudo apt-get update

  1. 安装 Docker:

sudo apt-get install docker-ce

  1. 启动 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 国际许可协议