
Docker学习笔记唉有记录总比没有记录好万一有所进步了呢。只是选取一部分记录下来了B站up主技术爬爬虾视频链接40分钟的Docker实战攻略1 Docker容器和虚拟机docker容器之间共用一个系统内核每个虚拟机都包含一个操作系统的完整内核。Docker镜像——是容器的模板就像是软件安装包。Docker容器——就像是软件。Docker仓库——(Docker Registry)用来存放分享镜像的地方。Docker是基于Linux的容器化技术。2 Docker命令——拉取镜像2.1 拉取镜像docker pull docker.io/library/nginx:latestdocker.iorepository是镜像库存放一个镜像的不同版本docker.io表示这是Docker Hub的官方仓库librarynamespace是命名空间(作者名)library是官方仓库的命名空间如果命名空间属于是官方的这部分可以省略不写例如docker pull nginx如果是linux系统使用sudo docker pull nginxlatesttag是标签(版本号)latest表示最新版本。Docker官方仓库的网址https://hub.docker.com2.2 配置镜像站因为防火墙的缘故有一些技术爬爬虾老师写的一个配置镜像站的文档https://github.com/tech-shrimp/docker_installer注我平时是使用清华镜像源或者阿里镜像源这个还没有试过不知道范围修改一下配置文件sudo vi /etc/docker/daemon.json把仓库镜像网址复制过去registry-mirrors:[ https://docker.m.daocloud.io, https://docker.1panel.live, https://hub.rat.dev ]然后重启一下dockersudo service docker restart之后再使用拉取镜像的操作就不会有什么网络问题了sudo docker pull nginx因为是linux系统所以命令总是以sudo开头。如果docker是图形化的界面在 Docker Engine 这里加上去配置镜像即可。2.3 构建镜像有关的命令列出所有下载过的docker镜像docker images删除镜像docker rmi 镜像名字/镜像id例如docker rmi 1e5f3c5b981a。如果加了 -f 就是删除所有的容器。删除容器docker rm 容器名字查看所有容器docker ps创建容器docker volumn create 容器名称2.4 拉取命令参数docker pull --platformxxx nginx这里的–platformxxx表示拉取特定CPU架构的镜像。3 Docker命令——构建镜像docker run 镜像名/镜像id例如docker run nginx该命令执行后将构建镜像并将其启动。docker ps查看正在运行的容器。如果构建的时候没有指定名字系统会自动分配一个随机的名字给容器。这个构建镜像的命令会让命令窗口被占用所以一个更常见的方式是docker run -d [镜像名/镜像id]这里的d表示detached mode也就是分离模式表示让容器在后台执行。3.2 端口映射参数docker run -p 宿主机端口:容器端口 镜像名/镜像iddocker run -p 80:80 nginx执行后打开浏览器输入localhost:80就打开了容器内部署的nginx。4 挂载卷(volume)4.1 绑定挂载docker run -v 宿主机目录:容器内目录无论是修改宿主机目录下的文件夹还是修改容器内目录下的文件夹都会影响对方这种目录被称为挂载卷。它的最大作用是数据的持久化保存删除容器的时候宿主机的数据不会被删除。-v 表示把宿主机的目录跟容器内的目录做一个绑定。使用绑定挂载的时候宿主机的目录会(暂时)覆盖掉容器内的目录。如果宿主机这边的目录是空的那么容器内也没有任何的网页。创建一个文件的命令sudo vi 文件名.后缀名4.2 命名卷挂载创建一个存储空间命名卷-V 卷的名字:容器内目录例如docker run -d -p 80:80 -v nginx_html:/user/share/nginx/html nginx1b218hcjsrbjb3j3j3gj3gdj43bs8q34查看挂载卷的真实目录docker volumn inspect 挂载卷名字想要进入到挂载卷的真是目录在 linux 系统中需要先切换为root用户sudo -i删除卷docker volumn rm 卷名称删除所有没有任何容器在使用的卷docker volumn prune -a5 run其他参数docker可以使用-e给数据库加默认密码–name 可以给容器起一个自定义的名字例如:sudo docker run d --name my_nginx nginx-f 删除正在运行的容器需要接一个这个符号例如sudo docker rm -f my_nginx-it 可以让控制台进入容器进行交互例如:sudo docker run -it --rm alpine。这里的–rm表示当容器停止的时候就把容器删除掉。然后可以使用exit退出容器内部这就是连在一起使用的一套命令。–restart 用来配置容器在停止时的重启策略例如sudo docker run -d --restart always nginx表示只要容器停止了就会立即重启。如果把always换成unless-stopped这样手动停止的容器就不会尝试重启了。6 调试容器docker run 时从镜像创建并运行容器。docker stop命令可以停止指定容器的运行。dcoker ps -a查看所有的容器。docker start 容器名/容器id重新启动指定容器。docker inspect 容器id可以查看容器启动的参数。docker create命令只创建容器但不立即启动。docker logs 容器id/容器名称可以查看容器的日志。如果在logs后面加了-f表示追踪输出可以滚动查看日志。每个docker环境都是一个独立的运行环境每个独立的运行环境都表现得像是一个独立的linux系统。docker exec 容器id linux命令可以在容器内部执行linux命令。linux命令中查看进程一般是ps -ef。例如sudo docker exec 容器id ps -ef可以看到指定容器id的进程资源占用情况。docker exec -it 容器id /bin/sh可以进入一个容器内部获得一个交互式的命令行环境。不过进入以后会发现无法使用vi命令这是因为docker内部是一个极简的操作系统可能没装。可以用cat /etc/os-release查看一下容器内的linux是什么发行版的。如果是debian的使用 apt install vim 下载。7 构建镜像DockerFile是镜像制作的图纸。老师举了一个例子一个fastapi项目想要运行需要有python环境需要下载的包有fastapi、uvicorn这个项目是通过python main.py运行的端口是8000。第一步创建Dockerfile文件它没有后缀名。第二步选择一个基础镜像它会被放在第一行以FROM开头。例如FROM python:3.13-slim。第三步指定工作目录后面的命令都在这个目录下执行WORKDIR /app第四步把文件copy到工作目录中第一个点代表这台电脑的当前目录第二个点代表镜像内的当前工作目录COPY . .第五步安装依赖RUN pip install -r requirements.txt第六步声明镜像提供服务的端口是哪个不过不写也不影响EXPOSE 8000。第七步启动命令CMD [“python3”, “main.py”]。与之类似的是ENTRYPOINT这个优先级更高不容易被覆盖。FROM python:3.13-slim WORKDIR /app COPY . . RUN pip install -r requirements.txt EXPOSE 8000 CMD [python3, main.py]准备好文件之后开始构建。可以用-t给镜像起一个名字。这里的. 指的是在当前文件夹构建。docker build -t 镜像名 .docker run -d -p 端口:端口 镜像名