【笔记】Docker学习笔记

前言

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>

查看所有本地镜像

1
docker images

删除本地镜像

  • 已经启动容器的镜像要先删除容器再删除镜像

-f:强制删除本地镜像,即便是已经启动了容器的镜像

1
docker image rm <image_id>
  • 简写
1
docker rmi <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
修改导入后的空名称
  • 修改导入后默认的名称null
1
docker tag <image_id> <name_new>:<tag>

清理镜像

  • 清理所有名称为空的镜像

--force-f:强制

1
docker image prune -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>
  • 简写
1
docker inspect <name>

查看所有正在运行的容器

-a:查看所有容器,包括未运行的容器
-q:只查看标识,不查看别的内容

1
docker container ls
  • 简写
1
docker ps

启动已经停止的容器

<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>

清理容器

  • 清理所有停止状态的容器
1
docker container prune

复制宿主机内容到容器内部

<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 ls

删除数据卷

1
docker volume rm <volume_id>

虚拟网络

网络类型

  • bridge桥接网络,使用桥接网络创建容器时,如果没有指定主机名,也可以使用容器名当做主机名进行访问

    • 可以创建多个桥接网络
    • 桥接网络的网段不可以是宿主机的网段
    • 使用桥接网络创建的容器在单独的网络环境,网络内的所有容器都可以相互通信,网络内的所有容器都可以与宿主机相互通信
    • Docker默认创建的bridge网络不能使用主机名进行访问,手动创建的bridge可以使用主机名进行访问
    • Docker首次安装完成,宿主机会创建一个用于桥接的虚拟网卡,每当使用bridge网络创建一个容器,宿主机都会创建两个虚拟网卡,但是只有一个虚拟网卡会显示,这两个网卡会将宿主机的网络与容器的网络进行连接
  • host主机网络,使用主机网络网络创建容器时,容器与宿主机共享IP地址,容器的所有开放端口都会映射到宿主机

    • 主机网络只能有一个,不能再次创建
  • none无网络,使用无网络创建时容器,无网络连接

    • 无网络只能有一个,不能再次创建
    • Docker首次安装完成,内置的无网络的名称是null
  • macvlanMAC虚拟局域网,使用MAC虚拟局域网创建容器时,容器与宿主机在同一个网段

    • 可以创建多个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. 宿主机网卡开启混杂模式
1
ip link set lan1 promisc on
  1. 创建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
docker network ls
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
ifconfig

删除虚拟网络

1
docker network rm <network_id>

完成

参考文献

哔哩哔哩——千锋Java学习营
菜鸟笔记
哔哩哔哩——云原生技术架构
哔哩哔哩——锤子V君
CSDN——云川之下
易百教程
Docker官方文档
哔哩哔哩——小黑智能
哔哩哔哩——技术蛋老师