1. 首页 > IT综合教程 > 正文

it教程FG135-Docker容器技术

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版本
$ 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 Hub拉取镜像
$ 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 构建镜像

# 使用Dockerfile构建镜像
$ 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

风哥风哥提示:在生产环境中,建议使用Docker Compose或Kubernetes来管理容器,以提高管理效率和可靠性。

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 构建示例

# Dockerfile
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

# 下载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

# docker-compose.yml
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 性能最佳实践

# 限制容器的CPU和内存使用
$ 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

生产环境风哥建议:在生产环境中,建议使用容器编排工具如Kubernetes来管理容器,以提高系统的可靠性、可扩展性和安全性。同时,要建立完善的镜像构建和部署流程,确保容器的一致性和可追溯性。

Docker是一种强大的容器化技术,通过隔离应用程序的运行环境,使得应用的部署和管理变得更加简单和高效。掌握Docker的基础知识,结合现代容器编排工具,可以构建出更加可靠、可扩展的应用系统。author:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息