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
相关推荐
小疙瘩2 小时前
VirtualBox 下 CentOS-10 下 Docker 安装 Mysql57 (包括 使用 Docker Compose 部署)
linux·docker·centos
画堂秋2 小时前
云原生-Mysql
运维·mysql·云原生
江畔何人初8 小时前
iptables 和 IPVS 代理模式 Service 的区别
linux·运维·服务器·网络·云原生·kubernetes·代理模式
2601_9492210310 小时前
Splashtop赋能企业级远程办公全场景安全连接成选型优选
运维·人工智能·安全
七度黑光10 小时前
用 openclaw 给故障复盘打分:质量审核自动化实践
运维·服务器·前端·数据库·自动化
xuefeiniao11 小时前
docker.desktop无法启动,导出镜像后
服务器·docker
last demo12 小时前
mysql
运维·数据库·mysql·oracle
灰阳阳12 小时前
Dockerfile实践-构建Nginx镜像
运维·nginx·docker·dockerfile
Johnstons13 小时前
网络流量监控工具怎么选
运维·网络·网络故障排除·网络流量分析·网络性能监控