Docker使用
视频参考:https://www.bilibili.com/video/BV1THKyzBER6/
文章参考:https://www.runoob.com/docker/docker-tutorial.html
Docker的核心概念
Docker就是用容器化技术给应用程序封装独立的运行环境,而每一个运行环境就是一个容器
- 优点:
- 更轻,更小,启动快:Docker容器之间共用同一个系统内核,区别于虚拟机每一个系统都包含一个自己的操作系统的完整内核
- 核心概念:
- 宿主机:运行容器的计算机被称为宿主机
- 镜像:镜像就是软件安装包,而容器就是安装出来的软件
- 镜像仓库(Docker Registry):就是用来存放分享的镜像的地方,分享上来的镜像其他人就可以下载使用Docker的官方仓库:Docker Hub
安装Docker
Ubuntu下安装docker
- 第一步:
1
curl -fsSL https://get.docker.com -o install-docker.sh
- 第二步:
1
sudo sh install-docker.sh
Windows下安装docker
- 搜索Window功能:
- 勾选上Virtual Machine Platform(虚拟机平台)
- 勾选上适用于Linux的Windows子系统(WSL)
- 确定,重启电脑
- 安装WSL
- 以管理员身份打开cmd
- 设置wsl默认版本
wsl --set-default-version 2 - 安装
wsl --uupdate --web-download–web-download看自身电脑下载情况加
- 下载docker desktop
- 在cmd输入
docker --version,有版本号说明安装成功了(注意要打开软件)
Mac下安装docker
对应下载docker desktop就行了🥲
配置镜像站
摘自轩辕镜像
一键配置(liunx)
1 | bash <(wget -qO- https://xuanyuan.cloud/docker.sh) |
Docker命令
docker pull:用来从仓库下载镜像--platform=xxxxxx作为可选项,只有在小部分特殊情况需要填写对应宿主机的cpu架构,正常docker会自动选择对应的
示例:
1
docker pull docker.io/library/nginx:latest
- 注册表地址:Docker仓库的注册表地址,docker.io这里是官方的地址,可以省略不写
- 命名空间:避免重复,library这里属于官方命名空间,可以省略不写
- 标签(版本号):latest这里,可以指定下载特定版本,不写就是获取最新版本
docker images:列出所有下载过的Docker镜像docker rmi 镜像:删除镜像docker rm -f 容器ID/名字:删除容器-f表示强制删除,如果容器不是正在运行可以不用
docker volume create 卷名:新创建一个挂载卷docker volume inspect 卷名:查看卷在宿主机的真实目录docker volume list:列出所有创建过的卷docker volume rm 卷名:删除卷docker volume prune -a:删除所有没有任何容器在使用的卷docker ps:用来查看在运行的容器-a可以查看所有的容器,包括停止的
docker start 容器ID/名字:启动已有容器docker stop 容器ID/名字:停止容器运行docker inspect 容器ID:查看容器的配置信息docker create:与docker run类似,但是只创建不启动docker logs 容器ID/名字:查看容器的日志- 末尾加上
-f可以追踪输出
- 末尾加上
docker exec 容器ID/名字 linux命令:进入容器内部使用Linux指令docker exec -it 容器ID/名字 /bin/bash:进入容器内部交互执行这里注意,因为docker为了压缩大小,内部操作系统往往缺少很多必要工具,在自行安装之前,记得使用
cat /etc/os-release查看发行版本,使用对应命令安装docker network list:展示所有网络
docker run
因为参数太多了所以单独列出docker run 镜像:✨创建并运行容器
pull其实有时可以省略,直接运行发现本地不存在会自动获取多个参数之间用
\分开一般用
-d:分离模式,表示让容器在后台执行使用
-p进行端口映射-p 80:80前面是宿主机端口,后面是容器内的端口使用
-v挂载卷-v 宿主机目录:容器内目录,宿主机目录覆盖容器内目录,也叫绑定挂载-v 卷的名字:容器内目录命名卷挂载,这种方式第一次使用会进行初始化,区别于绑定挂载
-e添加环境变量,例如mongodb这样的数据库需要账号密码,就可以通过-e后面添加要传递的环境变量(不知道就去仓库查)--name [自定义名字]:给容器自定义名字,但是必须在宿主机上唯一it:使我的控制台进入容器可以交互--rm:当容器停止时就删除--restart:重启策略--restart always:只要容器停止就立即重启--restart unless-stopped:与always类似,但是手动停止的容器不会尝试重启
--network 子网名称:容器放入哪个子网--network host:启用host模式
Dockerfile
- Dockerfile一句话来讲就是用来制作镜像的文件
- Dockerfile就是这个文件的文件名,D要大写,没有后缀
常见参数:
FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
WORKDIR:切换到镜像内的一个目录
COPY . .:第一个点代表电脑文件当前目录,第二个点代表镜像内的当前工作目录
EXPOESE:声明端口,给其他使用镜像的人做的声明,非强制
RUN:用于执行后面跟着的命令行命令。有以下俩种格式:
- pip install下载依赖
CMD []:容器启动时的默认启动命令,[]是建议写成数组的形式,中间最好不要用空格,一个Dockfile只有一个CMD
ENTRYPONINT:与CMD类似,优先级更高,更不容易被覆盖
创建镜像
当前目录打开控制台
输入docker build -t 用户名/镜像名 [:版本号] .:版本号可以不写,.指在当前文件夹构建,用户名如果要推送到docker hub上就一定要写
推送到docker hub上
- 登录:
控制台输入docker login
打开给的网站输入出现的英文验证码
回来显示Login Succeeded就成功了 - 输入
docker push 用户名/镜像名
Docker网络
展示所有网络见Docker指令部分
桥接模式
- Docker默认的网络是桥接模式,而Docker内部容器可以相互连接,但与宿主机是不互通的
- 通过
docker network create network1创建子网- 不同子网之间互不通信
- 相同子网可以通过名称通信而不需要内部ip地址
- 通过
docker network rm 子网名删除自定义的子网-默认的三种连接方式是不能删除的
Host模式
host模式可以解决一些棘手的网络问题,其核心是容器使用宿主机ip和端口,就无需再做端口映射,参数见docker run
None模式
就是不连接网络
Docker Compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
同一个Compose创建下的容器都会自动加入同一个子网
Compose 使用的三个步骤:
- 使用 Dockerfile 定义应用程序的环境。
- 使用
docker-compose.yml定义构成应用程序的服务,这样它们可以在隔离环境中一起运行.这里文件名要严格一致才可以执行,非标准文件名或者不在当前目录就需要
compose后面加上-f 文件地址执行 - 最后,执行
docker compose up命令来启动并运行整个应用程序。- 同样可以使用
-d让其在后台运行 docker compose down会停止并删除容器docker compose stop只停止不删除docker compose start启动容器
- 同样可以使用
docker-compose.yml 的配置案例如下(配置参数参考下文):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# yaml 配置实例
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}




