学习笔记

Learn Docker

by 猪皮怪, 2025-08-12


Docker是一个比VMWare、KVM等“大型虚拟机”更节省资源的创建“虚拟操作系统”的方法。

  • 传统部署:在统一硬件条件下拥有一个全新的操作系统,在该操作系统下部署各个APP。
  • 虚拟化部署:在统一硬件条件下拥有一个全新的操作系统,在该操作系统下执行虚拟化操作,虚拟出两个全新虚拟机,在各个虚拟机中虚拟出全新的操作系统,再在这个虚拟出来的操作系统中部署APP。对于各个虚拟环境来说,他是一个完全隔离的环境,包括操作系统的内核等。
  • 容器化部署:在统一的硬件条件下拥有一个全新的操作系统,在该操作系统中运行了容器服务,在容器中直接虚拟化多个子容器,各个容器中运行各个APP,“省去了操作系统的步骤”。对于容器来说,没有内核说法,用的是宿主机的内核。相较于虚拟化部署来说更节省资源。

一些常用命令

命令作用
docker images查看所有本地镜像
docker search *在DockerHub中搜索某个镜像
docker pull *向DockerHub拉取(下载)某个镜像
docker pull *:1.0.0向DockerHub拉取(下载)某个镜像的1.0.0版本
docker ps查看目前正在运行的所有容器
docker ps -a查看各种状态下的本机容器
docker stop [CONTAINER ID(前三位即可)]停止当前CONTAINER ID对应的镜像
docker rm [CONTAINER ID(前三位即可)]删除对应容器(没有删镜像)
  1. 获取镜像
    docker pull ubuntu:18.04
  2. 构建镜像
    2.1 通过Dockerfile文件构建镜像。在运行docker容器的宿主机ubuntu内创建两个文件,Dockerfile和app.py。

    # Dockerfile
    # Base images 基础镜像
    FROM ubuntu:18.04
    
    # MAINTAINER 维护者信息
    MAINTAINER yourname admin@163.com
    
    # RUN 执行以下命令
    RUN apt update
    RUN apt install python3 python3-pip -y
    RUN pip3 install flask
    
    RUN mkdir -p /data/www/
    
    # 拷贝代码实现文件至工作目录
    COPY app.py /data/www/app.py
    
    # 设定工作目录
    WORKDIR /data/www/
    
    # EXPOST 映射端口
    EXPOSE 8000
    
    # 容器启动时执行命令(用Python3运行刚才的代码文件)
    CMD ["python3","app.py"]

    2.2 通过该自定义镜像构建整个程序运行的进行文件
    docker build -t demo:0.1 . -f Dockerfile
    2.3 通过镜像创建容器及运行

    docker run demo:0.1 常规运行
    docker run -p 80:8000 demo:0.1 将宿主机的80端口映射到docker中的8000端口,运行
    docker run -d -p 80:8000 demo:0.1 以后台模式启动并映射端口,几乎所有情况下都要加 -d 参数项,不然会卡住控制端,无法继续输入命令

    可以基于同一个镜像文件构建多个运行的容器,比如将不同的宿主机端口映射到docker中的8000端口上

    docker run -d -p 80:8000 demo:0.1
    docker run -d -p 81:8000 demo:0.1
    docker run -d -p 82:8000 demo:0.1

    基于同一个镜像文件构建了三个不同的容器,可在宿主机上访问不同端口,映射到不同容器内的8000端口上

Dockerfile指令

  • 创建镜像阶段的指令

    # Dockerfile
    # Base images 基础镜像
    FROM ubuntu:18.04
    
    # MAINTAINER 维护者信息
    MAINTAINER <yourname> <admin@163.com>
    
    # ENV 环境配置相关
    ENV <key> <value>
    比如:ENV env_name=/data/www/
    
    # RUN 执行以下命令
    RUN apt update
    RUN apt install python3 python3-pip -y
    RUN pip3 install flask
    
    RUN mkdir -p $env_name
    
    # 拷贝代码实现文件至工作目录
    COPY <src> <destination>
    # (这里指的是将本地文件app.py添加到镜像中,有两个命令,一个是COPY,另一个是ADD,两个命令都是做相同工作,只不过假如要将本地压缩包添加到镜像中,使用ADD会自动将该压缩文件解压后添加到镜像内)
    
    # 设定工作目录(所有后续命令的执行依据该目录进行)
    WORKDIR /data/www/
    
    # EXPOST 映射端口(不重要,可以不添加,后续最通用的是通过docker命令使用-p参数进行端口映射)
    EXPOSE 8000
  • 容器运行阶段的指令

    # 容器启动时执行命令(用Python3运行刚才的代码文件)
    CMD ["python3","app.py"]

    在使用Dockerfile构建镜像的时候,可以使用 --no-cache 参数,避免使用缓存文件构建,代码不是最新的情况。

    docker build -t demo:0.1 . -f Dockerfile --no-cache

    进入正在运行的容器内部docker exec -ti <容器id> bash

none
猪皮怪

作者: 猪皮怪

2025 © typecho & esia.asia