Docker部署

本文详细介绍Docker的基础操作,包括镜像的拉取、构建、推送,容器的创建、运行、管理,以及Docker Compose的使用。通过实例,演示如何构建Python Flask应用和Django+PostgreSQL的分布式应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、拉取镜像

  • 搜索镜像:docker search centos
  • 拉取镜像:docker pull centos
  • 推送镜像:
    • docker login
    • docker tag new_boxing_image zhangninglei/new_boxing_image(将本地镜像命名为docker用户名/镜像名)
    • docker push zhangninglei/new_boxing_image

二、构建Docker容器

step1

  • 编写Dockerfile文件:
    • 指令
      • FROME 指定基础镜像:FROM <image>[:<tag>] [AS <name>]
      • RUN 执行命令:①RUN <command>;②RUN ["可执行文件", "参数1", "参数2"]
      • COPY 复制文件到镜像中:COPY [--chown=<user>:<group>] <src>... <dest>
      • EXPOSE 对主机暴露端口:EXPOSE 8000(要将 EXPOSE 和在运行时使用 -p <宿主端口>:<容器端口> 区分开来。-p,是映射宿主端口和容器端口,换句话说,就是将容器的对应端口服务公开给外界访问,而 EXPOSE 仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射。)
      • CMD 指定docker运行的程序及参数:启动容器的时候,需要指定所运行的程序及参数。CMD 指令就是用于指定默认的容器主进程的启动命令的。(em:CMD ["nginx", "-g", "daemon off;"])
      • ENV 设置环境变量:ENV <key> <value> (em:ENV NODE_VERSION 7.2.0)
      • WORKDIR 指定工作目录:WORKDIR <工作目录路径>
      • USER 指定当前用户:
        • RUN groupadd -r redis && useradd -r -g redis redis
        • USER redis
        • RUN [ "redis-server" ]

step2

  • 执行构建命令:
    • $ docker build cont.ext(项目文件夹路径/git仓库地址)
      • 默认在当前目录下读取Dockerfile
      • -f: 指定Dockerfile的文件地址
      • -t: 指定生成的镜像名称

三、操作Docker容器

  • 运行容器:docker run (em:docker run -t -i ubuntu:14.04 /bin/bash)

    • -t: 让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
    • -i: 让容器的标准输入保持打开
    • -v或者–mount: 挂载主机目录到容器(加载主机的 /src/webapp 目录到容器的 /opt/webapp目录):
      • -v /src/webapp:/opt/webapp
      • --mount type=bind,source=/src/webapp,target=/opt/webapp
    • -p或-P:
      • -P:Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。
      • -p:可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。
        • 格式:ip:hostPort:containerPort | ip::containerPort |hostPort:containerPort

docker run 来创建容器时,Docker 在后台运行的标准操作包括:

检查本地是否存在指定的镜像,不存在就从公有仓库下载
利用镜像创建并启动一个容器
分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
从地址池配置一个 ip 地址给容器
执行用户指定的应用程序
执行完毕后容器被终止
  • 启动已终止容器
    • docker container start
  • 终止容器
    • docker container stop
  • 进入容器
    • `exec: docker exec -it docker_id bash
  • 删除容器
    • docker container rm
  • 清理所有处于终止状态的容器
    • docker container prune

Docker Compose部署分布式

一、下载

  • Mac、windows自带docker-compose不需要安装
  • Linux下安装:
    • 二进制安装
 $ sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
 $ sudo chmod +x /usr/local/bin/docker-compose

二、使用

  • 创建项目:/project/app.py
from flask import Flask
from redis import Redis

app = Flask(__name__)
redis = Redis(host='redis', port=6379)

@app.route('/')
def hello():
    count = redis.incr('hits')
    return 'Hello World! 该页面已被访问 {} 次。\n'.format(count)

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)
  • 编写Dockerfile
FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]
  • 编写模板文件:docker-compose.yml
version: '3'
services:

  web:
    build: .
    ports:
     - "5000:5000"

  redis:
    image: "redis:alpine"
  • 运行compose项目

docker-compose up

三、compose命令

  • 格式:docker-compose [-f=…] [options] [COMMAND] [ARGS…]
    • -f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
    • -p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名。
    • –x-networking 使用 Docker 的可拔插网络后端特性
    • –x-network-driver DRIVER 指定网络后端的驱动,默认为 bridge
    • –verbose 输出更多调试信息。
    • -v, --version 打印版本并退出。

四、完整示例(Django+PostgreSQL)

step1: 配置数据库(django_example/settings.py)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}

step2: 编写Dockerfile

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

step3: 编写docker-compose.yml

version: "3"
services:

  db:
    image: postgres

  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    links:
      - db

step4: 启动

docker-compose up

### 使用 Docker部署教程 #### 一、Docker 基础操作 为了更好地理解如何使用 Docker 进行部署,首先需要掌握一些基础的操作命令。以下是常用的 Docker 命令及其功能: - **启动 Docker 服务** 可以通过 `sudo systemctl start docker` 来启动 Docker 服务[^1]。 - **停止 Docker 服务** 如果需要停止 Docker 服务,则可以运行 `systemctl stop docker`[^1]。 - **重启 Docker 服务** 当配置发生变化或者需要重新加载服务时,可执行 `sudo systemctl restart docker`[^1]。 这些基本命令能够帮助管理员控制 Docker 守护进程的状态。 --- #### 二、Docker 版本检查 在实际部署之前,建议先确认当前安装Docker 是否为最新版本或满足需求。这一步可通过输入以下命令完成: ```bash docker --version ``` 该命令用于显示已安装Docker 版本号[^1]。确保环境中的 Docker 是兼容目标应用所需的最低版本。 --- #### 三、具体场景下的 Docker 部署案例 ##### 1. StackStorm 的 Docker 部署 对于自动化运维工具 StackStorm 而言,官方提供了一种基于 Docker Compose 的快速部署方式。用户可以从指定仓库拉取镜像并按照文档指引设置好必要的参数文件即可实现一键化搭建流程[^2]。 具体的步骤包括但不限于克隆 Git 存储库以及调整 compose 文件内的变量定义等内容。更多细节请参阅项目主页链接:<https://gitcode.com/gh_mirrors/st/st2-docker>。 ##### 2. Nginx 的 Docker 部署与管理 针对 Web 服务器软件 Nginx,在生产环境中通常推荐采用容器技术来简化维护工作量。例如更新配置后无需手动进入宿主机内部修改而是直接利用外部挂载路径同步更改至实例内;另外还支持动态扩展规模等功能特性[^3]。 值得注意的是,不同于传统方法通过信号机制触发热更替动作(`nginx -s reload`) ,此时应改用如下形式发送请求给对应的目标实体对象: ```bash docker exec -it [容器ID|NAME] nginx -s reload ``` 此语法结构允许开发者轻松达成一致性的效果同时保留原有优势特点不变的前提下进一步增强了灵活性表现力等方面的优势所在之处值得肯定推广开来加以运用实践当中去检验其价值意义何在等问题都需要我们深入思考探索寻找答案解决办法才行啊朋友们加油吧! --- ### 总结 综上所述,无论是通用型的基础架构还是特定用途的应用程序都可以借助于 Docker 技术显著提升效率降低成本开销比例关系合理优化资源配置利用率水平等等诸多方面均有所体现出来供大家参考借鉴学习模仿复制粘贴过来就可以了嘛哈哈开玩笑啦其实还是要认真对待每一个环节步骤哦亲们记住咯😊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值