1. Docker概述
Docker是一个开源的容器化平台,允许开发者打包应用程序及其依赖项到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上。Docker的核心思想是隔离应用程序的运行环境,确保应用在不同环境中一致运行。更多学习教程www.fgedu.net.cn
Docker的主要特点包括:
- 轻量级:容器共享主机内核,比虚拟机更轻量
- 可移植性:容器可以在任何支持Docker的环境中运行
- 隔离性:容器之间相互隔离,避免冲突
- 可扩展性:可以快速部署和扩展应用
- 版本控制:可以对容器镜像进行版本管理
2. Docker安装
在不同的操作系统上安装Docker的方法不同,下面介绍在Ubuntu和CentOS上的安装方法。
2.1 在Ubuntu上安装Docker
$ sudo apt-get update
# 安装依赖包
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
# 添加Docker官方GPG密钥
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
# 添加Docker稳定版仓库
$ 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 docker-ce-cli containerd.io
# 验证Docker安装
$ sudo docker run hello-world
# 将当前用户添加到docker组
$ sudo usermod -aG docker $USER
# 重新登录以应用更改
$ logout
2.2 在CentOS上安装Docker
$ 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-ce-cli containerd.io
# 启动Docker服务
$ sudo systemctl start docker
# 设置Docker开机自启
$ sudo systemctl enable docker
# 验证Docker安装
$ sudo docker run hello-world
# 将当前用户添加到docker组
$ sudo usermod -aG docker $USER
# 重新登录以应用更改
$ logout
3. Docker基础知识
Docker的核心概念包括镜像(Image)、容器(Container)、仓库(Repository)等。学习交流加群风哥微信: itpux-com
3.1 核心概念
- 镜像(Image):容器的基础,包含应用程序及其依赖项
- 容器(Container):镜像的运行实例
- 仓库(Repository):存储镜像的地方,如Docker Hub
- Dockerfile:定义如何构建镜像的文本文件
- Docker Compose:用于定义和运行多容器Docker应用的工具
3.2 常用命令
$ docker –version
# 查看Docker信息
$ docker info
# 列出本地镜像
$ docker images
# 列出运行中的容器
$ docker ps
# 列出所有容器(包括停止的)
$ docker ps -a
# 查看Docker日志
$ docker logs [container_id]
# 查看容器详细信息
$ docker inspect [container_id]
4. 镜像管理
镜像是Docker的核心概念之一,用于创建容器。
4.1 拉取镜像
$ docker pull ubuntu:latest
$ docker pull nginx:alpine
$ docker pull mysql:5.7
# 拉取指定版本的镜像
$ docker pull ubuntu:20.04
$ docker pull node:14-alpine
4.2 构建镜像
$ docker build -t myapp:1.0 .
# 构建时指定Dockerfile路径
$ docker build -t myapp:1.0 -f ./Dockerfile.dev .
# 查看镜像历史
$ docker history myapp:1.0
# 导出镜像
$ docker save -o myapp.tar myapp:1.0
# 导入镜像
$ docker load -i myapp.tar
4.3 管理镜像
$ docker tag myapp:1.0 username/myapp:1.0
# 推送镜像到仓库
$ docker push username/myapp:1.0
# 删除镜像
$ docker rmi myapp:1.0
# 清理未使用的镜像
$ docker image prune
# 清理所有未使用的镜像
$ docker image prune -a
5. 容器管理
容器是镜像的运行实例,用于运行应用程序。
5.1 创建和运行容器
$ docker run -d –name mycontainer nginx:latest
# 运行容器并映射端口
$ docker run -d –name mynginx -p 8080:80 nginx:latest
# 运行容器并挂载卷
$ docker run -d –name myapp -v /host/path:/container/path myapp:1.0
# 运行容器并设置环境变量
$ docker run -d –name mydb -e MYSQL_ROOT_PASSWORD=password mysql:5.7
# 运行容器并进入交互模式
$ docker run -it ubuntu:latest /bin/bash
5.2 管理容器
$ docker start mycontainer
# 停止容器
$ docker stop mycontainer
# 重启容器
$ docker restart mycontainer
# 进入运行中的容器
$ docker exec -it mycontainer /bin/bash
# 查看容器日志
$ docker logs -f mycontainer
# 查看容器资源使用情况
$ docker stats mycontainer
# 删除容器
$ docker rm mycontainer
# 清理停止的容器
$ docker container prune
6. 网络管理
Docker提供了多种网络模式,用于容器之间的通信。学习交流加群风哥QQ113257174
6.1 网络模式
- bridge:默认网络模式,容器通过网桥连接
- host:容器使用主机网络栈
- none:容器没有网络连接
- container:容器共享另一个容器的网络栈
- overlay:用于跨主机的容器通信
6.2 网络操作
$ docker network ls
# 创建网络
$ docker network create mynetwork
# 查看网络详情
$ docker network inspect mynetwork
# 运行容器并加入网络
$ docker run -d –name mycontainer –network mynetwork nginx:latest
# 连接容器到网络
$ docker network connect mynetwork mycontainer
# 断开容器与网络的连接
$ docker network disconnect mynetwork mycontainer
# 删除网络
$ docker network rm mynetwork
7. 数据卷管理
数据卷用于持久化容器数据,以及在容器之间共享数据。
7.1 数据卷操作
$ docker volume create myvolume
# 列出数据卷
$ docker volume ls
# 查看数据卷详情
$ docker volume inspect myvolume
# 运行容器并挂载数据卷
$ docker run -d –name mycontainer -v myvolume:/app/data nginx:latest
# 运行容器并挂载主机目录
$ docker run -d –name mycontainer -v /host/path:/container/path nginx:latest
# 删除数据卷
$ docker volume rm myvolume
# 清理未使用的数据卷
$ docker volume prune
7.2 数据卷备份
$ docker run –rm -v myvolume:/source -v $(pwd):/backup ubuntu:latest tar cvf /backup/volume-backup.tar /source
# 恢复数据卷
$ docker run –rm -v myvolume:/target -v $(pwd):/backup ubuntu:latest tar xvf /backup/volume-backup.tar -C /target –strip 1
8. Dockerfile
Dockerfile是用于构建Docker镜像的文本文件,包含了构建镜像所需的指令。
8.1 基本指令
FROM ubuntu:20.04
# 设置维护者信息
MAINTAINER Your Name
# 运行命令
RUN apt-get update && apt-get install -y nginx
# 设置工作目录
WORKDIR /app
# 复制文件
COPY . /app
# 暴露端口
EXPOSE 80
# 设置环境变量
ENV NGINX_HOME /etc/nginx
# 运行容器时执行的命令
CMD [“nginx”, “-g”, “daemon off;”]
8.2 构建示例
FROM node:14-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [“npm”, “start”]
# 构建镜像
$ docker build -t mynodeapp:1.0 .
# 运行容器
$ docker run -d –name mynodeapp -p 3000:3000 mynodeapp:1.0
9. Docker Compose
Docker Compose是一个用于定义和运行多容器Docker应用的工具,使用YAML文件来配置应用的服务。
9.1 安装Docker Compose
$ 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
# 验证安装
$ docker-compose –version
9.2 使用Docker Compose
version: ‘3’
services:
web:
build: .
ports:
– “8080:80”
volumes:
– ./app:/app
depends_on:
– db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: mydb
volumes:
– db_data:/var/lib/mysql
volumes:
db_data:
# 启动服务
$ docker-compose up -d
# 查看服务状态
$ docker-compose ps
# 查看服务日志
$ docker-compose logs
# 停止服务
$ docker-compose down
# 停止并删除 volumes
$ docker-compose down -v
10. Docker最佳实践
遵循Docker最佳实践可以提高容器的性能、安全性和可维护性。更多学习教程公众号风哥教程itpux_com
10.1 镜像最佳实践
- 使用官方基础镜像
- 使用 Alpine 等轻量级基础镜像
- 最小化镜像层数
- 使用 .dockerignore 文件排除不必要的文件
- 使用多阶段构建减少镜像大小
10.2 容器最佳实践
- 容器应该是无状态的
- 使用数据卷持久化数据
- 限制容器的资源使用
- 使用健康检查
- 避免在容器中运行多个进程
10.3 安全性最佳实践
- 使用最新的基础镜像
- 定期更新镜像
- 避免在容器中以 root 用户运行
- 限制容器的网络权限
- 使用 secrets 管理敏感信息
10.4 性能最佳实践
$ docker run -d –name mycontainer –cpus 1 –memory 1g nginx:latest
# 使用tmpfs挂载临时目录
$ docker run -d –name mycontainer –tmpfs /tmp nginx:latest
# 启用日志轮转
$ docker run -d –name mycontainer –log-opt max-size=10m –log-opt max-file=3 nginx:latest
# 使用本地存储驱动
$ docker run -d –name mycontainer –storage-opt size=10G nginx:latest
Docker是一种强大的容器化技术,通过隔离应用程序的运行环境,使得应用的部署和管理变得更加简单和高效。掌握Docker的基础知识,结合现代容器编排工具,可以构建出更加可靠、可扩展的应用系统。author:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
