Skip to content

Docker

Docker是一个开源的应用容器引擎,它可以让开发者打包应用及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

基本概念

  • 容器:Docker的核心概念,它是轻量级、可移植的执行环境,用来运行应用程序及其依赖。
  • 镜像:Docker镜像是创建容器的基础,类似虚拟机的快照,包含需要运行的程序、库、工具、配置文件等。
  • 仓库:集中存放镜像的地方,可以理解为代码仓库,Docker Hub是最常用的公共仓库。

安装Docker

以Ubuntu系统为例,安装Docker可以通过以下命令:

bash
sudo apt-get update
sudo apt-get install docker.io

运行Docker

确保Docker服务正在运行:

bash
# 启动docker
sudo systemctl start docker
# 开启开机启动docker
sudo systemctl enable docker

镜像操作示例

  • 拉取镜像:从Docker Hub获取Ubuntu镜像
bash
docker pull ubuntu
  • 查看本地镜像
bash
docker images
  • 运行镜像:基于Ubuntu镜像启动一个容器,并进入交互式bash shell
bash
docker run -it ubuntu /bin/bash

Docker容器操作

  • 列出运行中的容器
bash
docker ps
  • 退出容器:在容器的命令行中,输入exit或按Ctrl+D

  • 后台运行容器:不进入容器直接启动

bash
docker run -d ubuntu sleep 3600

Dockerfile

Dockerfile是一个文本文件,用于自动化构建镜像过程。示例:

dockerfile
# 使用官方 Ubuntu 镜像作为基础镜像
FROM ubuntu:latest

# 设置作者信息
LABEL maintainer="yourname@example.com"

# 更新apt源并安装Apache
RUN apt-get update && apt-get install -y apache2

# 将本地文件复制到容器中
COPY index.html /var/www/html/index.html

# 开放80端口
EXPOSE 80

# 启动Apache服务
CMD ["apachectl", "-DFOREGROUND"]

构建镜像:

bash
docker build -t my-apache2 .

运行基于此镜像的容器:

bash
docker run -d -p 8080:80 my-apache2

Docker网络

Docker提供了几种网络模式,如bridge(默认)、host、none和自定义网络。创建自定义网络示例:

bash
docker network create my-net

在创建容器时指定网络:

bash
docker run -d --network=my-net --name container1 nginx

数据管理

为了持久化数据,推荐使用数据卷(volume)或绑定宿主机目录。

  • 创建并使用数据卷
bash
docker volume create my-volume
docker run -d -v my-volume:/data --name container2 nginx
  • 绑定宿主机目录
bash
docker run -d -v $(pwd)/html:/usr/share/nginx/html --name container3 nginx

镜像加速配置

在 CentOS 7 中设置 Docker 镜像源加速,编辑 /etc/docker/daemon.json

bash
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
sudo systemctl restart docker

Docker Compose

Docker Compose 是 Docker 官方推出的一个工具,用于定义和运行多容器 Docker 应用程序。它通过一个 YAML 文件(默认为 docker-compose.yml)来配置所有的服务。

基本示例:

yaml
version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  mysql:
    image: mysql:latest

常用命令:

  • 启动服务docker compose up
  • 停止并删除服务docker compose down
  • 查看服务状态docker compose ps

Docker Swarm

Docker Swarm 是 Docker 官方提供的容器编排工具,它允许用户轻松地管理和扩展容器化应用到多台主机上。

主要特性:

  • 管理模式:由管理节点(Manager Nodes)和工作节点(Worker Nodes)组成
  • 服务发现与负载均衡
  • 安全性:支持 TLS 加密和安全集群接入令牌
  • 网络:支持覆盖网络(Overlay Networks)
  • 滚动更新与回滚
  • 声明式配置

常用命令:

bash
# 初始化 Swarm 集群
docker swarm init

# 部署服务栈
docker stack deploy -c docker-compose.yml myweb

常用命令

bash
# 构建镜像
docker build -t myapp .

# 运行容器
docker run -p 3000:3000 myapp

# 查看容器
docker ps

# 查看日志
docker logs container_id

# 进入容器
docker exec -it container_id /bin/bash

最佳实践

  1. 使用多阶段构建
  2. 最小化镜像大小
  3. 合理使用缓存
  4. 安全扫描
  5. 使用 .dockerignore 文件
  6. 避免在容器中运行不必要的进程