Docker学习笔记

8 阅读4分钟

安装

注定位置:

start /w "" "Docker Desktop Installer.exe" install --installation-dir=D:\Docker

镜像

下载

docker pull docer.io/library/nginx:latest

  • docer.io:registry:docker仓库地址注册表地址。官方仓库可省略仓库地址

  • library:namespace:命名空间。library官方仓库命名空间,官方命名空间可省略

  • latest:tag:标签(版本号)。latest最新,最新版本可省略

  • docer.io/library/nginx:repository:镜像库。存放一个镜像的不同版本

参数

--platform=:下载特定CPU架构镜像

  • linux/amd64

  • linux/arm64

  • linux/arm/v7

镜像站

修改配置文件并重启:/etc/docker/daemon.json


{

"registry-mirrors": [

]

}

管理

  • docker images:查看已下载镜像

  • docker rmi 镜像名或id:删除镜像

运行

  • dokcer run 镜像名或id:使用镜像创建容器

  • docker ps 查看正在运行的容器

  • -a:查看全部包括运行与停止的

  • docker rm id:删除容器

  • -f或--force:强制删除

运行docker run时如果docker发现没有对应容器会自动拉取

参数

docker run

  • -d:detached mode,分离模型,表示后台运行

  • -p:port,宿主机端口:容器端口:端口映射:创建与宿主机的网络映射

  • -v:volume,宿主机目录:容器目录:挂载卷映射:数据持久化保存到宿主机

  • -e:environment,传递环境变量

  • --name:定义名字:必须是唯一的

  • -it:可以让控制台进入容器来交互

  • --rm:容器停止时就删除容器

  • --restart:配置容器停止时的重启策略

  • --restart always:容器停止时就重启

  • --restart unless-stopped:除手动停止外均重启

  • --network 子网名字:加入子网

  • --network host:以host模式启动容器

端口映射

每个容器都运行在一个独立的虚拟环境里,默认情况下与宿主机的网络是隔离的,通过创建端口映射,可以从外部网络访问到容器内(比如从浏览器访问容器的nginx)

挂载映射

命名卷挂载:可创建挂载卷名字,挂载时使用卷名字代替宿主机目录

挂载

  • docker volume create 卷名字:创建命名卷

  • dokcer volume inspect 卷名字:查看命名卷相关信息(实际挂载目录)

  • docker volume list:列举命名卷

  • docker volume rm 卷名字:删除命名卷

  • docker volume prune -a:删除所有没有任何容器正在使用的卷

命名卷创建时,docker会把挂载的容器目录下的文件同步到挂载卷下初始化,绑定挂载没有

启停

  • docker stop 容器id或名字:停止容器

  • docker start 容器id或名字:启动容器

  • docker inspect 容器id或名字:启动时的配置

  • docker create 镜像名或id:只创建容器而不启动

  • docker logs 容器id或名字:查看容器日志

  • -f或--follow:滚动查看日志

交互

  • docker exec 容器id或名字 linux命令:进入容器并执行linux命令

  • docker exec -it 容器id或名字 /bin/sh(或/bin/bash):进入容器并获得交互式环境

构建

  • docker build -t 镜像名称:版本号 . :版本号可省略,.表示在当前目录下构建

Dockerfile

  1. 选择镜像:FROM 镜像名:版本:需要构建的镜像从哪个镜像基础上构建而来

  2. 工作空间:WORKDIR:切换到镜像内的目录作为工作目录,作为所有命令的执行位置(作用像cd)

  3. 文件拷贝:COPY 需要拷贝的文件目录 工作目录:COPY . . :拷贝当前目录文件到工作目录下

  4. 命令执行:RUN:在镜像内执行其他命令,比如安装依赖等

  5. 声明端口:EXPOSE 端口:声明镜像服务端口(仅作提示,实际使用以docker run -p为准)

  6. 默认启动:CMD或ENTRYPOINT ["", "", ...]:容器运行时的默认启动命令,写成数组格式,中间不要有空格

构建python


FROM python:3.13-slim

WORKDIR /app

COPY . .

RUN pip install -r requirements.txt

EXPOSE 8000

CMD ["python3","main.py"]

网络

docker网络默认是桥接模式,所有容器默认都连接到同一个网络,可互相访问,主机隔离

  • docker network create 子网名称:创建子网,纳入该子网下的容器可直接通过容器名称互相访问而不用IP,子网与子网之间网络隔离

  • docker network list:列出所有容器使用的网络模式

  • docker network rm:删除自定义子网

通过host模式启动容器,容器直接使用宿主机的IP,而且无需-p进行端口映射

编排

通过yml文件:docker-compose.yml管理多个docker容器,同时docker-compose会自动创建子网并将所有容器纳入同一个子网下


services:

容器名1:

image: 镜像

environment: 环境变量

volumes: 挂载映射

ports: 端口映射

容器名2:

depends_on: 定义容器启动顺序

- 容器名1

  • docker compose up:通过docker-compose.yml启动编排容器,如果容器已经在运行重复执行命令没有效果

  • -d:后台运行

  • -f:file,指定名称不叫docker-compose.yml的非标准配置文件

  • docker compose down:停止并删除容器

  • docker compose stop:停止容器

  • docker compose start:启动容器