116181534601949611
前言
Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。(维基百科)
安装Docker
传送门
镜像操作
拉取镜像到本地
<image_name>:镜像名
<tag>:标签,通常是版本号,缺省值为latest
1
| docker pull <image_name>:<tag>
|
查看本地镜像的详细信息
<image_id>:镜像的唯一标识(可以简写,只写前缀),所有可以使用<image_id>的地方都可以改为使用<image_name>:<tag>
1
| docker image inspect <image_id>
|
1
| docker inspect <image_id>
|
查看所有本地镜像
删除本地镜像
-f:强制删除本地镜像,即便是已经启动了容器的镜像
1
| docker image rm <image_id>
|
查看镜像中设置的默认命令
1
| docker history <image_id>
|
镜像的导入导出
导出
<file>:导出后的文件
1
| docker save <image_id> -o <file>.tar
|
1
| docker save <image_id> > <file>.tar
|
导入
1
| docker load -i <file>.tar
|
1
| docker load < <file>.tar
|
修改导入后的空名称
1
| docker tag <image_id> <name_new>:<tag>
|
清理镜像
--force、-f:强制
容器的操作
通过镜像启动新的容器
<image_name>:镜像名
<tag>:标签,通常是版本号,缺省值为latest
--name <name>:指定容器名称
-i:交互,通常和-t组合使用
-t:提供终端
--detach、-d:后台运行容器
--network <network_name>:指定虚拟网络,缺省值为bridge桥接网络
--ip <ip>:指定IP地址
--publish <port_outer>:<port_inner>、-p <port_outer>:<port_inner>:端口映射,当网络为bridge模式时需要指定端口映射
<port_outer>:宿主机的端口
<port_inner>:容器内的端口
--volume <src_outer>:<src_inner>、-v <src_outer>:<src_inner>:映射数据卷
<src_outer>:宿主机的文件或目录路径
<src_inner>:容器内的文件或目录路径
--env <key>=<value>、-e <key>=<value>:在容器中添加环境变量
--rm:容器关闭时,自动删除容器
--restart no:容器自动重启策略
no:缺省值,不自动重启
on-failure:在容器非正常退出时自动重启
on-failure:<num>:在容器非正常退出时自动重启,只会重启指定次数
always:无论容器何种原因退出都会自动重启,Docker服务启动时就会自动启动
unless-stopped:无论容器何种原因退出都会自动重启,如果Docker服务上一次关闭前是启动状态,则下一次启动时会自动启动,如果Docker服务上一次关闭前是停止状态,则下一次启动时不会自动启动
1
| docker run -d -p <port_out>:<port_in> <image_name>:<tag>
|
<image_id>:镜像的唯一标识(可以简写,只写前缀),所有可以使用<image_id>的地方都可以改为使用<image_name>:<tag>
1
| docker run -d -p <port_out>:<port_in> <image_id>
|
1
| docker run -it <image_id> /bin/bash
|
查看容器的详细信息
1
| docker container inspect <name>
|
查看所有正在运行的容器
-a:查看所有容器,包括未运行的容器
-q:只查看标识,不查看别的内容
启动已经停止的容器
<container_name>:容器的名称
1
| docker container start <container_name>
|
<container_id>:容器的唯一标识,所有可以使用<container_id>的地方都可以改为使用<container_name>
1
| docker container start <container_id>
|
1
| docker start <container_id>
|
停止容器
1
| docker container stop <container_id>
|
1
| docker stop <container_id>
|
停止全部容器
1
| docker container stop $(docker container ls -aq)
|
1
| docker stop $(docker ps -aq)
|
重启容器
1
| docker container restart <container_id>
|
1
| docker restart <container_id>
|
删除容器
-f:强制删除,即便是正在运行的容器
1
| docker container rm <container_id>
|
1
| docker rm <container_id>
|
删除全部容器
1
| docker container rm $(docker container ls -aq)
|
1
| docker rm $(docker ps -aq)
|
进入到容器内部
1
| docker exec -it <container_id> <command>
|
查看容器的日志
-f:滚动查看
1
| docker container logs <container_id>
|
1
| docker logs <container_id>
|
清理容器
复制宿主机内容到容器内部
<file_outer>:宿主机文件的路径及文件名
<file_inner>:容器内部文件想要存放的路径名
1
| docker cp <file_outer> <container_id>:<file_inner>
|
数据卷
- 将宿主机的一个目录映射到容器的一个目录中
- 可以在宿主机中操作目录中的内容,那么容器内部映射的文件,也会跟着一起改变
创建数据卷
- 创建数据卷后,宿主机会产生一个新目录
/var/lib/docker/volumes/<name>/_data,作为数据卷交换数据的目录
<volume_name>:数据卷的名称
1
| docker volume create <volume_name>
|
查看数据卷的详细信息
<volume_id>:数据卷的唯一标识,所有可以使用<volume_name>的地方都可以改为使用<volume_id>
1
| docker volume inspect <volume_id>
|
1
| docker inspect <volume_id>
|
查看所有数据卷
删除数据卷
1
| docker volume rm <volume_id>
|
虚拟网络
网络类型
bridge桥接网络,使用桥接网络创建容器时,如果没有指定主机名,也可以使用容器名当做主机名进行访问
- 可以创建多个桥接网络
- 桥接网络的网段不可以是宿主机的网段
- 使用桥接网络创建的容器在单独的网络环境,网络内的所有容器都可以相互通信,网络内的所有容器都可以与宿主机相互通信
- Docker默认创建的bridge网络不能使用主机名进行访问,手动创建的bridge可以使用主机名进行访问
- Docker首次安装完成,宿主机会创建一个用于桥接的虚拟网卡,每当使用bridge网络创建一个容器,宿主机都会创建两个虚拟网卡,但是只有一个虚拟网卡会显示,这两个网卡会将宿主机的网络与容器的网络进行连接
host主机网络,使用主机网络网络创建容器时,容器与宿主机共享IP地址,容器的所有开放端口都会映射到宿主机
none无网络,使用无网络创建时容器,无网络连接
- 无网络只能有一个,不能再次创建
- Docker首次安装完成,内置的无网络的名称是
null
macvlanMAC虚拟局域网,使用MAC虚拟局域网创建容器时,容器与宿主机在同一个网段
创建虚拟网络
创建桥接网络
<network_name>:虚拟网络的名称
--subnet <ip>/24:指定新的网段和子网掩码
--gateway <ip>:指定新的网段的网关
1
| docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 <network_name>
|
创建MAC虚拟局域网
- 宿主机网卡开启混杂模式
1
| ip link set lan1 promisc on
|
- 创建MAC虚拟局域网
--subnet <ip>/24:指定和宿主机相同的网段和子网掩码
--gateway <ip>:指定和宿主机相同的网段的网关
-o parent <net>:指定已经开启混杂模式的网卡名称
1
| docker network create -d macvlan -o parent=lan1 --subnet 192.168.0.0/24 --gateway 192.168.0.1 <network_name>
|
查看虚拟网络的详细信息
<network_id>:虚拟网路的唯一标识,所有可以使用<network_name>的地方都可以改为使用<network_id>
1
| docker network inspect <network_id>
|
1
| docker inspect <network_id>
|
查看所有虚拟网络
1 2 3
| xxxxxxxxxxxx bridge bridge local xxxxxxxxxxxx host host local xxxxxxxxxxxx none null local
|
默认网络
bridge:缺省值,桥接网络,默认虚拟网络的网段为172.17.0.0/16,默认虚拟网络的网关(宿主机)为172.17.0.1
host:主机网络,与宿主机共用相同的网络
none:无网络
在宿主机上查看虚拟网卡
删除虚拟网络
1
| docker network rm <network_id>
|
完成
参考文献
哔哩哔哩——千锋Java学习营
菜鸟笔记
哔哩哔哩——云原生技术架构
哔哩哔哩——锤子V君
CSDN——云川之下
易百教程
Docker官方文档
哔哩哔哩——小黑智能
哔哩哔哩——技术蛋老师