docker基本使用

安装

官网地址https://www.docker.com/

选中自己需要的版本下载

win_docker安装教程https://blog.csdn.net/weixin_52286364/article/details/150379121

配置国内docker镜像

python 复制代码
"registry-mirrors": [
    "https://ccr.ccs.tencentyun.com",
    "https://docker.rainbond.cc",
    "https://elastic.m.daocloud.io",
    "https://elastic.m.daocloud.io",
    "https://docker.m.daocloud.io",
    "https://gcr.m.daocloud.io",
    "https://ghcr.m.daocloud.io",
    "https://k8s-gcr.m.daocloud.io",
    "https://k8s.m.daocloud.io",
    "https://mcr.m.daocloud.io",
    "https://nvcr.m.daocloud.io",
    "https://quay.m.daocloud.io"
  ]

下载镜像

复制代码
# 拉取nginx :latest表示最新版本可以省略
docker pull nginx:latest

# 拉取nginx 1.28.0版本
docker pull nginx:1.28.0

# 查看已下载镜像
docker images

# 保存镜像并压缩
docker save -o nginx:1.28.0.tar nginx:1.28.0

# 删除镜像-nginx
docker rmi nginx

docker hub 官方镜像库https://hub.dockermirror.com/u/library

docker hub 镜像站https://docker.fxxk.dedyn.io/

运行停止 容器

复制代码
# 运行容器
docker run nginx 

# 后台运行容器
docker run -d nginx 

# 自定义容器名称 运行容器名称必须唯一不能重复
docker run -d --name my_nginx nginx

# 查看运行中的容器
docker ps

# 查看所有的容器
docker ps -a

# 停止容器
docker stop nginx

# 启动停止的容器
docker start nginx

# 创建容器但不启动
docker create nginx

# 删除容器 -f 强制删除
docker rm -f nginx

# 查看容器启动时的配置 会得到启动的配置文件
docker inspect nginx

#查看容器日志 并追踪输出 (-f:-follow)
docker logs nginx -f

端口映射和文件挂载

复制代码
# 端口映射后台运行镜像(前面是宿主机后面是容器)
docker run -d nginx -p 80:80

# 绑定挂载 绑定宿主机和容器目录 宿主机目录:容器目录
docker run -d -p 80:80 -v /web/html:/usr/share/nginx/html nginx 

# 命名卷挂载
# 1.创建挂载卷
docker volume create nginx_html
# 2.挂载容器目录
docker run -v nginx_html:/usr/share/nginx/html

# 3.查看挂载卷宿主机地址
docker volume inspect nginx_html
# 返回
[
    {
        "CreatedAt": "2026-03-31T08:50:14Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/nginx_html/_data",
        "Name": "nginx_html",
        "Options": null,
        "Scope": "local"
    }
]

# 删除挂载卷
docker volume rm nginx_html

# 删除所有未使用的卷
docker volume prune -a

传递环境变量

复制代码
# 启动mongo数据库并配置账号密码
docker run -d -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=tech -e MONGO_INITDB_ROOT_PASSWORD=tech mongo

产看容器可以传递的环境变量

镜像库搜索镜像在说明中找到 Environment Variables

容器内部操作

容器本身是一个特殊的进程,内部基本是一个独立的操作系统

复制代码
# 进入(-it)容器停止时删除(--rm)容器
docker run -it --rm alpine

# 在容器内执行linux命令
docker exec 容器id|容器名称 linux命令

# 查看容器进程
docker exec c67cfe5f7592 ps -ef

# 进入运行中的容器
docker exec -it c67cfe5f7592 /bin/sh

# 容器内容安装vim
# 1.查看容器内linux发行版本
cat /etc/os-release

# 2.Debian  更新安装
apt update

# 3.安装vim
apt install vim

容器重启策略

复制代码
# 每次停止都重启容器(always )
docker run -d --restart always nginx

# 手动停止后不重启
docker run -d --restart unless-stopped nginx

创建镜像并上传到镜像库

1.创建需要的文件

main.py

python 复制代码
# 导入FastAPI库和uvicorn服务器
from fastapi import FastAPI
import uvicorn

# 创建FastAPI应用实例
app = FastAPI()
# 定义一个GET请求的路由,当访问根路径时返回一个JSON响应
@app.get("/")
# 定义一个函数来处理根路径的请求,返回一个包含"Hello": "World"的字典
def read_root():
    return {"Hello": "World"}
# 当脚本作为主程序运行时,使用uvicorn服务器启动FastAPI应用
if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

requirements.txt

复制代码
fastapi
uvicorn

2.测试python程序

python 复制代码
# 下载依赖
pip install -r .\requirements.txt

# 运行程序 
python main.py

# 不行就用下面这个
uvicorn main:app --reload

3.创建DockerFile文件

文件名称 Dockerfile d必须大写,且没有后缀

python 复制代码
# 选择一个基础镜像,应为需要python环境,这里使用 Python 3.13 的精简版本
FROM python:3.13-slim

# 设置工作目录,所有后续的命令都将在这个目录下执行
WORKDIR /app

# 将当前目录下的所有文件复制到工作目录中
COPY . .

#  安装项目依赖,假设有一个 requirements.txt 文件列出了所有的依赖
RUN pip install -r requirements.txt

# 运行应用程序,假设主程序文件是 app.py
EXPOSE 8000

# 使用 uvicorn 作为 ASGI 服务器来运行 FastAPI 应用,监听所有接口并指定端口
CMD ["python3", "main.py"]

4.构建镜像

python 复制代码
# 在当前(.)目录下,构建名(-t )为docker_test的镜像 
docker build -t docker_test .

# 运行镜像
docker run -p 8000:8000 my-fastapi-app

5.浏览器验证

6.登录dockerhub

python 复制代码
# 登录docker
docker login

7.构建个人镜像

在原来的镜像前面加上dockerhub的用户名

python 复制代码
docker build -t haitaochen/my-fastapi-app .

8.推送个人镜像

python 复制代码
docker push haitaochen/my-fastapi-app

网络配置

宿主机和容器网络是隔离的

桥接

python 复制代码
# 创建子网 network1 (同一子网可以使用容器名称访问)
docker network create network1

# 通过 --network 进入指定子网
docker run -d -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=tech -e MONGO_INITDB_ROOT_PASSWORD=tech --network network1 mongo


# 查询子网列表
docker network list 

# 删除子网
docker network rm  network1

host

python 复制代码
# 通过host 桥接网络 直接使用宿主机网络
docker run -d --network host nginx

多容器管理

dockerCompose通过yaml文件管理多容器,且dockerCompose会自动创建子网保证容器之间的通信

创建yaml文件

python 复制代码
services: 
  # 定义 MongoDB 数据库服务
  my_mongodb: 
    image: mongo:latest  # 使用最新版 MongoDB 镜像
    environment:  # 设置环境变量
      MONGO_INITDB_ROOT_USERNAME: name  # 设置数据库管理员用户名
      MONGO_INITDB_ROOT_PASSWORD: pass  # 设置数据库管理员密码
    volumes:  # 挂载数据卷以持久化数据
      - ./my/data:/data/db  # 将本地 ./my/data 目录映射到容器内的 /data/db 目录
  
  # 定义 Mongo Express 服务(MongoDB 的 Web 管理界面)
  my_mongodb_express: 
    image: mongo-express:latest  # 使用最新版 Mongo Express 镜像
    ports:  # 端口映射配置
      - "8081:8081"  # 将主机的 8081 端口映射到容器的 8081 端口
    environment:  # 设置连接 MongoDB 所需的环境变量
      ME_CONFIG_MONGODB_SERVER: my_mongodb  # 指定要连接的 MongoDB 服务名称
      ME_CONFIG_MONGODB_ADMINUSERNAME: name  # MongoDB 管理员用户名
      ME_CONFIG_MONGODB_ADMINPASSWORD: pass  # MongoDB 管理员密码
    depends_on:  # 定义服务依赖关系
      - my_mongodb  # Mongo Express 依赖于 MongoDB 服务

执行docker-compose.yaml

python 复制代码
# 启动 compose 只能启动(docker-compose.yaml)的文件 
docker compose up -d 

# 启动指定名称的
docker compose -f my_compose.yaml up -d 

# 启动停止的容器
docker compose start

# 停止
docker compose stop

# 停止删除
docker compose down
相关推荐
tianyuanwo21 小时前
OS/DevOps程序员切入Harness Engineering的入门与进阶指南
运维·devops·harness
飞飞传输21 小时前
国产化FTP替代方案哪个好?选对平台让传输更安全高效
大数据·运维·安全
一生了无挂21 小时前
自己编译RustDesk,并将自建ID服务器和key信息写入客户端
运维·服务器
王飞飞不会飞1 天前
Mac 安装Hermes Agent 过程记录
运维·深度学习·机器学习
徐子元竟然被占了!!1 天前
Nginx
运维·nginx
SPC的存折1 天前
6、Docker常用配置
运维·docker·容器
图图玩ai1 天前
SSH 命令管理工具怎么选?从命令收藏到批量执行一次讲清
linux·nginx·docker·ai·程序员·ssh·可视化·gmssh·批量命令执行
星谐1 天前
AutoUploadLL:自动化上传工具开发实践
运维·自动化
NineData1 天前
NineData将亮相2026德国汉诺威工业博览会
运维·数据库·后端
CXH7281 天前
nginx——https
运维·nginx·https