当前位置: 首页 > news >正文

Docker快速入门手册

文章目录

    • 一、安装
      • 验证是否安装成功
    • 二、Docker命令
      • 镜像
      • 容器
      • 数据卷管理
      • 网络模式
    • 三、Dockerfile
      • 推送至镜像仓库
      • 阿里云ECI弹性容器部署
      • 阿里云Serverless应用引擎SAE部署
      • 阿里云FC函数部署容器
    • 四、Docker Compose

::: tip 简介
Docker是一种开源的应用容器引擎,让开发者能够打包应用及其依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。这种技术可以保证包的快速、可靠、一致的交付,无论环境如何。
:::

一、安装

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

验证是否安装成功

sudo docker run hello-world

图片
如上所示代表安装成功。
如果出现网络原因问题如下:
图片
这个错误表明 Docker 无法从 Docker Hub (registry-1.docker.io) 拉取 hello-world 镜像,原因是 网络连接超时(context deadline exceeded)。这通常是由于 国内访问 Docker Hub 受限 或 服务器网络配置问题 导致的。
可选择阿里云加速镜像源https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,或直接开启科学上网。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://registry.docker-cn.com","https://mirror.baidubce.com"]
}
EOF

二、Docker命令

镜像

  • docker pull:拉取镜像
# 下载官方Nginx镜像,默认下载最新版
docker pull nginx
  • docker images:查看所有镜像
  • docker rmi xxx: 删除镜像(跟上镜像名、镜像ID前两位等均可)

容器

  • docker ps -a:查看所有容器
  • docker logs -f xxx:查看容器日志
docker run -d --name 创建的容器名 镜像名(一般镜像名放最后)
# 创建Nginx容器,把本机的80端口绑定到容器的80端口
docker run -d --name nginx -p 80:80 nginx
# `-d`:表示以后台运行的方式创建容器
  • 配置环境变量
    • -e:设置MySQL连接密码、时区
docker run --name mysql -e MYSQL_ROOT_PASSWORD=admin111 -e TZ=Asia/Shanghai -d -p 3307:3306 mysql
  • 配置restart重启策略
    • always: 只要docker重启那么容器就重启
    • unless-stopped: 除了手动停止容器后,不会重启外,其他情况docker重启,容器重启
docker run -d --restart unless-stopped nginx
  • 进入容器
# 以交互模式进入创建的Nginx容器
docker exec -it nginx bash
  • 停止容器
docker stop nginx
  • 启动容器
docker start nginx
# 重启容器
docker restart nginx
  • 基于容器创建新的镜像
docker commit -m '说明' 容器ID 新镜像名

数据卷管理

  • 创建容器时挂载数据卷,如果实在Windows上用的Docker Desktop,请注意挂载路径写法
# 将宿主机上的`/root/shared_file`目录挂载到容器的`/home/shred_file`下
docker run -d --name ubuntu -v /root/shared_file:/home/shred_file ubuntu

网络模式

默认三种模式:

  1. bridge: 网桥模式。即每个容器都会有一个独立的IP,容器之间,容器与宿主机之间可通过网桥实现通信。默认创建的容器都是网桥模式
  2. host: 主机模式。容器没有独立的IP地址,直接使用宿主机的IP地址,该容器就相当于宿主机的一个进程
  3. none: none模式,通常不用,代表该容器没有网络,宿主机和容器,容器和容器之间没法通过网络通信
    图片
    通过docker inspect xxx查看容器配置信息如下
    图片
  • 创建子网
# 创建一个自定义网络network1
docker network create network1

三、Dockerfile

  • 以在Docker中运行一个Flask项目为例
    图片
  • Dockerfile构建代码如下:
# 拉取镜像
FROM python:3.13-slim# 切换到即将创建容器中的app目录下
WORKDIR /app/# 将当前目录下文件拷贝到容器所在目录下(即上面的app目录)
COPY . .# 下载依赖包
RUN pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt# 定义环境变量
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
ENV TZ=Asia/Shanghai# 声明会使用的端口
EXPOSE 5000# 运行的命令
CMD ["flask","run"]
  • 然后构建镜像
docker build -t flask-demo .
  • 启动容器
docker run -d --name flask-web -p 5000:5000 flask-demo

推送至镜像仓库

以阿里云镜像仓库为例,如果使用的是阿里云系列产品,可选择切换内网地址,速度会快些。

docker login --username=子午技术组 crpi-xxx.cn-hangzhou.personal.cr.aliyuncs.com
docker tag [ImageId] crpi-xxx.cn-hangzhou.personal.cr.aliyuncs.com/ziwu/ziwu-docker:[镜像版本号]
docker push crpi-xxx.cn-hangzhou.personal.cr.aliyuncs.com/ziwu/ziwu-docker:[镜像版本号]

阿里云ECI弹性容器部署

如果需要把容器运行时,公网可以访问到,那么可以借助阿里云ECI容器部署https://www.aliyun.com/product/eci, 然后通过生成的IP地址就可以访问到了。
图片
图片

阿里云Serverless应用引擎SAE部署

参考:https://saenext.console.aliyun.com/
注意:需要提前配置好弹性IP,安全组
这个相比于ECI部署,可以动态进行弹性扩容,多实例运行,直接通过compose文件生成容器等。

阿里云FC函数部署容器

这个相比于其他两个价格最低,但是功能受限,仅适合部署API服务等接口。并且经过实践FC3.0的版本好像一直部署不成功,2.0版本可以。

四、Docker Compose

在实际的部署工作中,需要使用到多种服务,比如mysql、nginx等,那这么多镜像如何进行组合编排呢,这就是Docker-Compose需要解决的问题。

使用+典型案例:

使用Docker-Compose编排容器时,可以将编排指令放到compose.yaml文件中。这里以构建一个构建Flask+Redis的服务的过程为例来讲解Docker-Compose的使用。

创建一个文件夹,叫做app文件夹,并在里面创建一个app.py文件,目录结构如下:

flask-redis-demo/
│── app/
│   ├── app.py
│   ├── requirements.txt
│   └── Dockerfile
│── docker-compose.yml
  • Flask 应用 (app/app.py)
from flask import Flask
import redis
import osapp = Flask(__name__)# 连接 Redis
redis_host = os.getenv("REDIS_HOST")
r = redis.Redis(host=redis_host, port=6379, decode_responses=True)@app.route("/")
def hello():# 自增计数器count = r.incr("hits")return f"Hello! This page has been visited {count} times."if __name__ == "__main__":app.run(host="0.0.0.0", port=5000)
  • 依赖文件 (app/requirements.txt)
flask
redis
  • Flask 的 Dockerfile (app/Dockerfile)
# 拉取镜像
FROM python:3.13-slim# 切换到即将创建容器中的app目录下
WORKDIR /app/# 将当前目录下文件拷贝到容器所在目录下(即上面的app目录)
COPY . .# 下载依赖包
RUN pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt# 定义环境变量
ENV TZ=Asia/Shanghai# 声明会使用的端口
EXPOSE 5000# 运行的命令
CMD ["python3","app.py"]
  • Docker Compose 配置 (docker-compose.yml)
# 名称
name: demo
# 服务列表
services:# web服务配置web:# web服务的Dockerfile文件路径build: ./app# 端口映射ports:- "5000:5000"# 容器名称container_name: "web"# 环境变量传递 Redis 服务名environment:- REDIS_HOST=redis  # 在遇到意外情况退出后是否重启restart: unless-stopped# 本服务依赖的服务,必须redis服务启动后,web服务才会启动depends_on:- redis# redis服务redis:# 使用的镜像,如本地没有,则会从docker官网上拉取image: "redis:alpine"# 容器名称container_name: "web_redis"# 是否重启restart: unless-stopped

compose相关命令

  1. 检查配置是否有错
docker compose config
  1. 创建和启动容器
docker compose up -d
  1. 停止和移除容器(尽量不要用这个停止,因为会删除容器)
docker compose down
  1. 停止compose
docker compose stop 【service name】
  1. 启动compose
docker compose start 【service name】
  1. 查看运行中的compose
# 加上 -a可以查看所有compose
docker compose ls 

文章转载自:

http://4LBnUJVA.pLchL.cn
http://hig0vDxP.pLchL.cn
http://zxvy7xHD.pLchL.cn
http://G15u3QY1.pLchL.cn
http://wDGeqpdu.pLchL.cn
http://zXI0YIni.pLchL.cn
http://8rrwsb7b.pLchL.cn
http://W7ut9bSo.pLchL.cn
http://gIg6lnqX.pLchL.cn
http://qVycxMSh.pLchL.cn
http://1Z4qXQdt.pLchL.cn
http://yjG3d1FT.pLchL.cn
http://eVVZTCIZ.pLchL.cn
http://MKWxESm9.pLchL.cn
http://VFynua3w.pLchL.cn
http://bPWFJNJL.pLchL.cn
http://mZFwM4hw.pLchL.cn
http://JB7dhWlI.pLchL.cn
http://9DuQjong.pLchL.cn
http://DbjKxNaQ.pLchL.cn
http://9sYNeBFe.pLchL.cn
http://sbV3lZ2w.pLchL.cn
http://HtjHXq8B.pLchL.cn
http://oq1ixiek.pLchL.cn
http://2NzycKwB.pLchL.cn
http://wq7GM8vj.pLchL.cn
http://XceNn3Te.pLchL.cn
http://PcO2fkH3.pLchL.cn
http://2oIKBHf2.pLchL.cn
http://B6gmtiXw.pLchL.cn
http://www.dtcms.com/a/381855.html

相关文章:

  • 【C++设计模式】第五篇:装饰器模式
  • linux C 语言开发 (十) 进程间通讯--信号
  • 绿色环保活动平台(AI问答、WebSocket即时通讯、协同过滤算法、Echarts图形化分析)
  • 飞算JavaAI实战高效构建电商系统核心功能模块全解析
  • CSS 技巧使页脚始终位于网页的底部
  • Vue3》》eslint Prettier husky
  • 基因组多组学(第七篇空间HD文章)--基于蛋白质组学的分类揭示IDH突变型星形细胞瘤中存在免疫热亚型且预后较差
  • 【无人机】无人机用户体验测试策略详细介绍
  • Bev 感知模型量化 有哪些问题
  • 深入探索React渲染原理与性能优化策略
  • 域名SSL证书免费申请lcjmSSL
  • 贪心算法应用:投资组合再平衡问题详解
  • 整体设计 之 绪 思维导图引擎 之 引 认知系统 之 引 认知系统 之 序 认知元架构 之 元宇宙:三种“即是”逻辑与数据安全措施的适配(豆包助手 之10)
  • 推荐使用 pnpm 而不是 npm
  • 19.路径
  • ESP32-C3 入门09:基于 ESP-IDF + LVGL + ST7789 的 1.54寸 WiFi 时钟(SquareLine Studio 移植)
  • 大数据毕业设计选题推荐-基于大数据的健康与生活方式数据可视化分析系统-Spark-Hadoop-Bigdata
  • 可配日志输出
  • 学习笔记:Python的起源
  • vcpkg:面向C/C++的跨平台库管理工具软件配置笔记经验教程
  • Claude Code的交互方式
  • 使用atop工具监控Linux系统指标
  • 工具链部署实用技巧 7|模型设计帧率推理时耗时与带宽分析
  • 《SRE 系列(八)| 高效组织协作经验》
  • 数据结构---链式队列
  • 【C++实战⑦】C++函数实战:从基础到项目应用
  • 通过语义AI管道检测文本数据中的潜在异常值
  • 这是第二篇
  • Mamba模型介绍
  • rock linux 9 安装mysql 5.7.44