DOCKER 简单教程
win
1.设置win版本默认wsl为2,docker需要版本2.1.5以后
wsl --set-default-version-2
安装wsl
wsl --update --web--download
一般笔记本默认没有开启虚拟化,可以通过设置bios或者命令,然后重启电脑
bcdedit /set hypervisorlaunchtype Auto
下载gui dockerDesktop
www.docker.com
指定Desktop安装位置
start /w"" "Docker Desktop Installer.exe" install --installation-dir=D:\Docker
最简单的命令
从docker官方仓库拉取
docker pull docker.io/library/nginx.latest
docker.io表示官方仓库,可以省略,其他仓库如minio.io
library 表示命名空间 (作者名字)如果是官方也可以不写
搜索官方仓库内容
hub.docker.com
设置镜像站:通过engine设置
把下面内容追加粘贴
{"registry-mirrors":[
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"https://hub.rat.dev"]}
linux
国内无法使用的问题
使用镜像站,脚本(来源于网络)
sudo vi /etc/docker/daemon.json
输入
{"registry-mirrors":[
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"https://hub.rat.dev"]}
重启docker
sudo service docker restart
容器常见命令
|
| 启动一个新的容器并运行命令 |
|
|
| 列出当前正在运行的容器 |
|
|
| 列出所有容器(包括已停止的容器) |
|
|
| 使用 Dockerfile 构建镜像 |
|
|
| 列出本地存储的所有镜像 |
|
|
| 从 Docker 仓库拉取镜像 |
|
|
| 将镜像推送到 Docker 仓库 |
|
|
| 在运行的容器中执行命令 |
|
|
| 停止一个或多个容器 |
|
|
| 启动已停止的容器 |
|
|
| 重启一个容器 |
|
|
| 删除一个或多个容器 |
|
|
| 删除一个或多个镜像 |
|
|
| 查看容器的日志 |
|
|
| 获取容器或镜像的详细信息 |
|
|
| 进入容器的交互式终端 |
|
|
| 列出所有 Docker 网络 |
|
|
| 列出所有 Docker 卷 |
|
|
| 启动多容器应用(从 文件) |
|
|
| 停止并删除由 启动的容器、网络等 |
|
|
| 显示 Docker 系统的详细信息 |
|
|
| 显示 Docker 客户端和守护进程的版本信息 |
|
|
| 显示容器的实时资源使用情况 |
|
|
| 登录 Docker 仓库 |
|
|
| 登出 Docker 仓库 |
|
镜像命令
列出所有的运行的镜像
docker images
使用镜像创建容器,名字或者id -d 表示后台启动,不占用控制台 -p端口映射 80:80 前者为宿主机端口
如果本地没有镜像,自动拉取
-v 挂载卷(绑定挂载) ,宿主机目前:容器目录。把宿主的文件映射到容器里面 常用于数据持久化,删除一个容器但是容器数据不被删除
-v(命名卷挂载) 卷的名字:容器目录。第一次使用的使用docker自动帮你把容器的内容同步到宿主机上面
-e 传递环境变量 通过hub网站查询镜像的环境变量
--name 名字
-it 让控制台进入容器进行交互
--rm 容器停止的时候就把容器删掉
--restart unless-stopped 手动停止的容器不会尝试重启,unless替换成always 一直尝试重启
docker run nginx
删除容器 -f 强制删除
dockr rm -f id
查看挂载卷
docker volume inspect 卷名
docker volume rm 卷名
docker volume list
docker volume prune 删除没有任何容器正在使用的卷
提交容器
删除镜像 名字或者id
docker rmi nginx
查看容器启动时候的参数 一般stop/resart 自动记住参数
docker inspect id
创建容器但不启动,通过start启动
docker create
在容器里面进行操作(容器本质为一个进程,但是资源互相独立,进入一个容器相当进入一个子操作系统,想子在子操作系统执行命令如下)
docker exec id 命令
调式容器内系统,一般容器系统过于精简,缺少系统级命令
cat /etc/os-release 查看发行系统
apt install vi (Debian安装命令为apt)
docker file
# 1. 指定基础镜像(必须放在第一行)去hub查找比如需要python环境的linux版本
FROM ubuntu:22.04
# 2. 设置作者信息(非必须)
LABEL maintainer="yourname@example.com"
# 3. 执行系统命令(更新软件源、安装依赖)
RUN apt-get update && apt-get install -y python3
RUN PIP INSTALL -R REQUIREMENT.TXT
# 4. 拷贝本地文件到镜像内 或者直接2个.表示把当前电脑工作目录拷贝到镜像目录
COPY ./app.py /app/app.py
# 5. 设置工作目录(后续命令都在此目录下执行) 指明进行镜像内的工作目录
WORKDIR /app
# 6. 声明容器运行时监听的端口(仅用于文档说明,实际映射需在 run 时指定)
EXPOSE 8080
# 7. 设置容器启动时默认执行的命令
CMD ["python3", "app.py"]
dockr build -t 名字:版本号 .(.表示当前文件下构建)
推送到hub,需要注册账号等,build 的时候需要带上自己的用户名
docker push 用户名/镜像名
docker 网络
默认桥接
每个容器分配到一个ip地址,容器之间可以通过内部ip访问,但是无法访问宿主网络
创建子网(默认桥接)
docker network create network1
指定容器在不同的子网里(在同一个内网可以通过name访问,而不是ip,内部有一个dns机制)
docker run -d --name my_nginx --network network1 nginx
host模式,docker容器直接共享宿主机网络,直接使用宿主机的ip,无需端口映射
dockercompose
把每一个模块打包成独立的容器,前端,后端,数据库等等。用一个compose文件自动创建一个子网。
指定容器启动顺序:depends_on:
# Docker Compose 文件版本(目前常用 3.8 或 3.9)
version: '3.8'
# 定义所有要启动的服务容器
services:
# 服务名称(自定义,比如 web-app)
web-app:
# 指定构建镜像的 Dockerfile 路径
build:
context: . # 构建上下文路径(Dockerfile 所在目录)
dockerfile: Dockerfile # Dockerfile 文件名(默认就是 Dockerfile)
# 或者直接使用现成的镜像
# image: nginx:latest
# 容器名称(可选,不指定则自动生成)
container_name: my-web-container
# 端口映射:宿主机端口:容器端口
ports:
- "8080:8080" # 可以多个
- "3000:3000"
# 环境变量
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://user:pass@db:5432/mydb
# 或者从 env_file 加载
# env_file:
# - .env
# 挂载卷:持久化数据或同步代码
volumes:
- ./data:/app/data # 宿主机目录:容器目录
- ./logs:/var/log/app
# 依赖的其他服务(启动顺序)
depends_on:
- db
- redis
# 容器启动后执行的命令(覆盖 Dockerfile 的 CMD)
# command: ["npm", "run", "start"]
# 网络配置
networks:
- app-network
# 重启策略
restart: unless-stopped
# 第二个服务:数据库
db:
image: postgres:15
container_name: postgres-db
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- app-network
restart: unless-stopped
# 第三个服务:Redis 缓存
redis:
image: redis:7-alpine
container_name: redis-cache
ports:
- "6379:6379"
networks:
- app-network
restart: unless-stopped
# 定义持久化卷(全局)
volumes:
postgres_data: # 声明后上面 db 服务才能使用
# 定义网络(全局)
networks:
app-network:
driver: bridge
启动目录下的yaml文件(docker-compose.yaml)严格名字
docker compose up
docker compose stop
docker compose down
docker compose -f 文件命令 up
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)