Docker基本命令及容器数据卷的配置,Docker网卡的简单理解

基本组成

概念

镜像(images):好比一个模板,可通过该模板来创建多个容器服务。

容器(container):利用容器技术可以独立运行一个和一个组应用,使用镜像来创建,类似于实例化镜像。

仓库(repository):存放镜像的地方。

http://hub-mirror.c.163.com

https://registry.docker-cn.com

https://cr.console.aliyun.com/

官方文档地址:https://docs.docker.com/

  • 安装docker:
# root用户下操作
su root
# 升级包管理系统 #
# Ubuntu/Debian
apt-get update
apt-get upgrade
# CentOS,redhat
yum update
yum upgrade

# install docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
  • 配置镜像站点:
# 查看当前Linux系统版本
cat /etc/os-release 

# /etc/docker/daemon.json
{
    
    
    "registry-mirrors": [
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://dockerproxy.com",
        "https://docker.nju.edu.cn",
        "https://cr.console.aliyun.com/"
    ]
}

# 重启docker服务
systemctl daemon-reload
systemctl restart docker

# 查看当前docker的配置,会显示配置的镜像仓库地址
docker info

原理

联合文件系统

联合文件系统(UnionFS)是一种轻量级的高性能分层文件系统,它支持将文件系统中的修改信息作为一次提交,并层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,应用看到的是挂载的最终结果。

联合文件系统是实现Docker镜像的技术基础。Docker镜像可以通过分层来进行继承。例如,用户基于基础镜像(用来生成其他镜像的基础,往往没有父镜像)来制作各种不同的应用镜像。这些镜像共享同一个基础镜像层,提高了存储效率。此外,当用户改变了一个Docker镜像(比如升级程序到新的版本),则会创建一个新的层(layer)。因此,用户不用替换整个原镜像或者重新建立,只需要添加新层即可。用户分发镜像的时候,也只需要分发被改动的新层内容(增量部分)。

这让Docker的镜像管理变得十分轻量级和快速。

  • 对于个精简的 OS , rootfs 可以很小,只需要包合最基本的命令,工具和程序库就可以了
  • 因为底层直接用主机的 kernel,自己只需要提供 rootfs 就可以了
  • 由此可见对于不同的 Linux 发行版, boots 基本是一致的, rootfs 会有差別,因此不同的发行版可以公用 bootfs
  • 所以虚拟机启动是分钟级别,容器是秒级!

存储引擎:

  • Docker 通过存储引擎(新版本采用快照机制)的方式来实现镜像层堆栈,并保证多镜像层对外展示为统一的文件系统
  • Linux 上可用的存储引撃有 AUFS、 Overlay2、 Device Mapper、Btrfs 以及 ZFS
  • 每种存储引擎都基于 Linux 中对应的文件系统或者块设备技术,井且每种存储引擎都有其独有的性能特点
  • Docker 在 Windows上仅支持 windowsfilter 一种存储引擎,该引擎基于 NTFS 文件系统之上实现了分层和CoW
# 查看镜像由哪些层组成
docker history

----------------------
┌──(root㉿kali)-[/home/kali]
└─# docker history trexcisco/trex:latest 
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
360ccbda0573   5 years ago   /bin/bash                                       0B        
<missing>      5 years ago   /bin/bash                                       414B      
<missing>      5 years ago   /bin/bash                                       438kB     
<missing>      5 years ago   /bin/bash                                       521MB     
<missing>      6 years ago   /bin/bash                                       450MB     
<missing>      6 years ago   /bin/bash                                       209kB     
<missing>      6 years ago   /bin/bash                                       365B      
<missing>      6 years ago   /bin/bash                                       277kB     
<missing>      6 years ago   /bin/bash                                       1.57kB    
<missing>      6 years ago   /bin/bash                                       0B        
<missing>      6 years ago   /bin/bash                                       422MB     
<missing>      6 years ago   /bin/bash                                       22.7MB    
<missing>      6 years ago   /bin/bash                                       901MB     
<missing>      6 years ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      6 years ago   /bin/sh -c #(nop)  LABEL name=CentOS Base Im…   0B        
<missing>      6 years ago   /bin/sh -c #(nop) ADD file:d6a1da927f0b7a710…   197MB     
                                                                                                 
┌──(root㉿kali)-[/home/kali]
└─# 
镜像分层

基本命令

帮助命令

docker version
docker info
docker 命令 --help

https://docs.docker.com/reference/

https://docs.docker.com/reference/cli/docker/

镜像命令

# 查看本地主机的镜像
docker images
docker images -a  # 列出全部镜像
docker images -q  # 仅显示镜像ID
-----------------------------------
REPOSITORY  # 镜像仓库
TAG      # 镜像标签
IMAGE ID    # 镜像ID
CREATED     # 镜像创建时间
SIZE        # 镜像大小

=======================================
# 搜索镜像
docker search trex
-----------------------------------
docker search trex --filter=STARS=10
NAME             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
trexcisco/trex   Officials Cisco TRex traffic generator for   19   

========================================
# 拉取镜像
docker pull trexcisco/trex    # docker pull 镜像名:tag即版本
# 版本一定是docker hub仓库上有的
------------------------------------
# docker pull trexcisco/trex
Using default tag: latest    # image version, default latest
latest: Pulling from trexcisco/trex
1e51505fc96b: Pull complete   # 分层下载
4f4fb700ef54: Pull complete 
d15406b20a40: Pull complete 
7f09b5ac4d98: Pull complete 
41b7e4d0bd88: Pull complete 
b97754ad857e: Pull complete 
69e41ec4c5b1: Pull complete 
b7b07546871e: Pull complete 
869f3e123971: Pull complete 
a9035b3e27b8: Pull complete 
7b12b431e47a: Pull complete 
e66b750e1013: Pull complete 
f0d25c6c461c: Pull complete 
fb2d80dca5af: Pull complete 
Digest: sha256:651739b0feade4bbe1f5a6f373b1dbbe9823ffeb90507a5227897d16c20b8cbe  # 签名, sha id
Status: Downloaded newer image for trexcisco/trex:latest
docker.io/trexcisco/trex:latest  # 真实下载地址

===================================================
# 删除镜像
docker rmi -f 镜像ID/名称   # -f强制删除
docker rmi -f $(docker images -aq)  # 递归删除所有镜像

容器命令

有相关的镜像才能创建对应的容器,即有类才能创建这个类的实例。

  • 创建并启动容器
docker run [可选参数]
-------------------------
--name="name"    # 给容器指定名称
-d        # 后台方式运行容器,没有前台进程会自动停止
-td              # 后台方式启动并运行容器
-it        # 使用交互方式运行容器,启动成功后进入容器内部
-p        # 指定容器端口及映射主机端口,如 8080:8080
  -p ip:主机端口:容器端口
  -p 主机端口:容器端口
  -p 容器端口
-P         # 随机指定端口

=============================
# docker run -it centos /bin/bash   
[root@aeb996c2537a /]# ls
anaconda-post.log  dev  home  lib64       media  opt   root  sbin  sys  usr
bin                etc  lib   lost+found  mnt    proc  run   srv   tmp  var
[root@aeb996c2537a /]# whoami
root
[root@aeb996c2537a /]# exit   # 直接退出容器,容器会停止工作
[root@aeb996c2537a /]# CTRL + P + Q   # 退出容器但不停止容器
------------------------------
# 后台方式启动并运行容器
└─# docker run --name="demo_centos1" -td centos
08042a5bdc08b9a8205027d93971bdebe7c17151cfe88e9e391c41a1652b4c97

Option如下

-i 以交互模式运行容器,通常与 -t 同时使用
-t 启动容器后,为容器分配一个命令行,通常与 -i 同时使用
-v 目录映射,容器目录挂载到宿主机目录,格式: <host目录>:<容器目录>
-d 
守护进程,后台运行该容器
-p 指定端口映射,格式:主机(宿主)端口:容器端口
-P 随机端口映射,容器内部端口随机映射到主机的端口
-u 以什么用户身份创建容器
--name "nginx-lb" 容器名字
-m, --memory bytes 设置容器使用内存最大值
-h, --hostname string 指定容器的 host name
--dns 8.8.8.8 指定容器 dns 服务器
-e username="ritchie" 设置环境变量
--restart Docker 重启后,容器是否自动重启
  --restart=always
--privileged 容器内是否使用真正的 root 权限
  --privileged=true
  • 查看并进入容器
# 查看正在运行的容器
docker ps      # 列出当前正在运行的容器
docker ps -a   # 列出当前正在运行的容器及历史创建的容器
docker ps -n=?  # 显示最近创建的n个容器
docker ps -q    # 以容器ID方式显示正在运行的容器
# ls -lh /var/lib/docker/containers

# 进入容器
docker exec -it 08042a5bdc08 /bin/bash
[root@08042a5bdc08 /]# 
  • 删除容器
rm 容器ID                # 删除指定容器,不能删除正在运行的容器
docker rm -f 容器ID             # 强制删除正在运行的容器
docker rm -f $(docker ps -aq)   # 递归强制删除全部容器
docker ps -a -q | xargs docker rm  # 删除全部容器
  • 启动和停止容器
docker start 容器ID          # 启动容器
docker restart 容器ID        # 重启容器
docker stop 容器ID          # 停止当前正在运行的容器
docker kill 容器ID           # 强制停止当前容器

常用命令

  • 后台启动容器
└─# docker run -d centos     # 启动成功后使用docker ps -a查看会发现容器停止,没有提供服务        
31ebce8fcd5bd121deb8668fd7cac6a186a697175afaaffdd9c77eda5555b5ae
                                                                                                               
┌──(root㉿kali)-[/home/kali]
└─# docker ps -a        
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                     PORTS     NAMES
31ebce8fcd5b   centos    "/bin/bash"   4 seconds ago   Exited (0) 3 seconds ago             hungry_dubinsky
                                                                                                               
┌──(root㉿kali)-[/home/kali]
└─# 
----------------------------------
# 容器使用后台运行方式启动,必须有一个前台进程,否则会自动停止
  • 查看日志
└─# docker logs --help      

Usage:  docker logs [OPTIONS] CONTAINER

Fetch the logs of a container

Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for
                       42 minutes)
  -n, --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m
                       for 42 minutes)
                                                                                                               
┌──(root㉿kali)-[/home/kali]
└─# docker logs -f -t -n 10  容器ID  # 显示指定容器的指定行数的日志信息
  • 查看容器进程
└─# docker top 08042a5bdc08
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                4056                4011                0                   03:39               pts/0               00:00:00            /bin/bash
                                                                                                               
┌──(root㉿kali)-[/home/kali]
└─# 
  • 查看容器内部元数据
docker inspect 容器ID

-------------------------------
┌──(root㉿kali)-[/home/kali]
└─# docker inspect 08042a5bdc08
[
    {
    
    
        "Id": "08042a5bdc08b9a8205027d93971bdebe7c17151cfe88e9e391c41a1652b4c97",
        "Created": "2024-05-02T07:39:08.990327617Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
    
    
            ...
            }
                                                                                                               
┌──(root㉿kali)-[/home/kali]
└─# 
  • 进入容器
docker exec -it 容器ID /bin/bash      # 进入容器开启一个新的终端进程
docker attach 容器ID    # 进入容器正在运行的进程终端,会进入正在运行的一个命令行
  • 拷贝容器文件到主机
docker cp 容器ID:待拷贝容器文件路径 目的主机存放文件路径
  • 查看容器CPU占用情况
docker stats
  • portainer
docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name prtainer-test portainer/portainer
  • 提交镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
---------------------------
-a 提交镜像的作者
-c 使用 Dockerfile 指令来创建镜像
-m 提交时的说明文字
-p commit 时,将容器暂停
---------------------------
docker commit -m="commit a new images for centos" -a="Bruce" 容器ID 目标镜像名称:TAG(版本)
# 将操作过的容器使用commit提交为一个新的镜像

=========================
# 容器中安装 vim ping ifconfig
apt-get update
apt-get install vim           #安装vim
apt-get install iputils-ping  #安装ping
apt-get install net-tools     #安装ifconfig 

容器数据卷

# 启动一个centos docker镜像并挂在家目录到主机的/home/ceshi下
docker run -it -v /home/ceshi:/home centos /bin/bash
docker inspect 容器ID  # 查看指定容器的元数据
-----------------------
# Mounts下显示挂载的情况
"Mounts": [
            {
    
    
                "Type": "bind",
                "Source": "/home/ceshi",
                "Destination": "/home",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ]

容器数据卷

基本命令

# 启动一个centos docker镜像并挂在家目录到主机的/home/ceshi下
docker run -it -v /home/ceshi:/home centos /bin/bash
docker inspect 容器ID  # 查看指定容器的元数据
-----------------------
# Mounts下显示挂载的情况
"Mounts": [
            {
    
    
                "Type": "bind",
                "Source": "/home/ceshi",
                "Destination": "/home",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ]

案例:MySQL数据持久化存储

官方镜像地址:https://hub.docker.com/_/mysql?tab=description

# *获取镜像* # 
# 最新版
docker pull mysql
docker pull mysql:latest
# 8
docker pull mysql:8.0
# 5.7
docker pull mysql:5.7
# 5.6
docker pull mysql:5.6

# *启动容器* #
docker run -d -p 3306:3306 -v /home/kali/Downloads/DockerVolume/mysql/conf:/etc/mysql/conf.d -v /home/kali/Downloads/DockerVolume/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
  -d  # 后台运行
  -p  # 端口映射
  -v  # 挂在数据卷
  -e  # 指定环境变量
  --name  # 配置容器名称
---------------------------
(root㉿kali)-[/home/kali]
└─# docker run -d -p 3306:3306 -v /home/kali/Downloads/DockerVolume/mysql/conf:/etc/mysql/conf.d -v /home/kali/Downloads/DockerVolume/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
91c25a8eb9a9d498d56f9bfdaf949479625df16263c7d3c0db69b4b88f87ceb0
                                                                                                 
┌──(root㉿kali)-[/home/kali]
└─# docker ps            
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                                       NAMES
91c25a8eb9a9   mysql:5.7   "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   mysql01
                                                                                                 
┌──(root㉿kali)-[/home/kali]
└─# netstat -anp | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1789/docker-proxy   
tcp6       0      0 :::3306                 :::*                    LISTEN      1807/docker-proxy   
  • 指定数据库容器名及初始密码
docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  • 挂在MySQL容器默认配置目录
docker run --name mysql01 -v /home/kali/Downloads/DockerVolume/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  • 更改默认编码
docker run --name mysql_name -e MYSQL_ROOT_PASSWORD=my_password -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
  • MySQL常见环境变量
MYSQL_ROOT_PASSWORD
必需的,它指定将为 MySQL root 超级用户帐户设置的密码 

MYSQL_DATABASE
可选的,允许指定要在 docker run mysql 时创建的数据库的名称
如果提供了用户/密码,则该用户将被授予对该数据库的超级用户访问权限(对应于 GRANT ALL)

MYSQL_USER, MYSQL_PASSWORD
可选的,结合使用来创建新用户和密码
该用户将被授予对 MYSQL_DATABASE 变量指定的数据库的超级用户权限
创建用户需要这两个变量

MYSQL_ALLOW_EMPTY_PASSWORD
这是一个可选变量,设置为非空值,如 yes,允许使用 root 用户的空白密码启动容器

MYSQL_RANDOM_ROOT_PASSWORD
可选的,设置为非空值,如 yes,为 root 用户生成随机初始密码
生成的 root 密码将打印到 stdout

MYSQL_ONETIME_PASSWORD
初始化完成后,将 root(不是 MYSQL_USER 中指定的用户!)用户设置为过期,强制在首次登录时更改密码
任何非空值都将激活此设置

MYSQL_INITDB_SKIP_TZINFO
默认情况下,入口点脚本会自动加载 CONVERT_TZ() 函数所需的时区数据
如果不需要,任何非空值都会禁用时区加载

匿名挂载和具名挂载

  • 匿名挂载

即不指定挂载到主机上的路径,只指定容器内部需要挂载的目录

docker volume ls  # 查看所有卷挂载情况
  • 具名挂载

给挂载位置添加名字,即具名挂载。

docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx

# 注意:这里 -v juming-nginx:  代表直接给定名字,但是没有指定路径,
# 如果在juming-nginx前面你添加/,则代表指定路径。

# 查看数据卷挂载信息
docker volume inspect 数据卷id
  • 区分挂载类型
-v 容器内部路径          # 匿名挂载
-v 卷名:器内部路径        # 具名挂载
-v /宿主机路径:容器内部路径    # 指定路径挂载
--volumes-from 容器ID    # 多重挂载其他容器的数据卷,可进行容器数据共享
-----------------------------------
# 定义容器权限
# ro权限--->只读模式, 该路径只能通过宿主机进行操作,容器内部无法操作
docker run -d -P --name ningix01 -v hello:/etc/nginx:ro nginx
docker run -d -P --name ningix01 -v hello:/etc/nginx:rw nginx

容器卷的生命周期一直持续到没有使用为止,一旦持久化到本地,那么本地数据不会伴随容器的删除而删除。

DockerFile

DockerFile是一个文本文件,其中包含了若干条指令,指令描述了构建镜像的细节。

指令 说明
FROM 指明当前的镜像基于哪个镜像构建
ARG 定义构建镜像过程中使用的变量
LABEL 标记镜像信息,添加元数据
EXPOSE 通知 Docker 容器在运行时监听指定的网络端口
ENV 指定环境变量
ENTRYPOINT 指定镜像的默认入口命令
VOLUME 创建一个数据卷挂载点
USER 指定运行容器时的用户名或 UID
WORKDIR 配置工作目录
RUN 运行指定命令
CMD 启动容器时指定默认执行的命令
ADD 添加内容到镜像
COPY 复制内容到镜像
ONBUILD 创建子镜像时指定自动执行的操作指令
STOPSIGNAL 指定退出的信号值
HEALTHCHECK 配置启动容器如何进行健康检查
SHELL 指定默认 shell 类型

Docker File:构建文件,定义一切步骤,源代码。

Docker Images:通过DockerFile构建生成镜像。

Docker Container:镜像运行,提供对应的服务的服务器。

FROM    # 基础镜像,一切从这里开始构建
MAINTAINER    # 镜像作者
RUN    # 镜像构建时需要运行的命令
ADD    # 步骤,添加内容
WORKDIR    # 镜像工作目录,启动后默认进入的目录
VOLUME    # 挂在目录
EXPOSE    # 暴露端口配置
CMD    # 指定容器启动的时候要运行的命令,但是只有最后一条命令生效
ENTRYPOINT    # 定容器启动的时候要运行的命令,可以追加命令
ONBUILD    # 当构建一个被继承的镜像,Docker File就会运行ONBUILD指令
COPY    # 将文件拷贝到镜像中
ENV    # 构建镜像的时候设置环境变量

CMD,指定容器启动的时候要运行的命令,但是只有最后一条命令生效。

ENTRYPOINT,定容器启动的时候要运行的命令,可以追加命令。

案例:

# 编写DockerFile文件
─$ cat mydockerfile-centos 
FROM centos
MAINTAINER bruce<[email protected]>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo ">_<Build Finished!>_<"
CMD /bin/bash

                                                                                                 
┌──(kali㉿kali)-[~/Downloads/DockerFile]

-------------------------------
# 构建镜像
docker build -f mydockerfile-centos -t mycentos:1.0 .

...
 ---> 75a7933a8baa
Step 9/10 : CMD echo ">_<Build Finished!>_<"
 ---> Running in 24c77aa84098
Removing intermediate container 24c77aa84098
 ---> d68d047cfbe4
Step 10/10 : CMD /bin/bash
 ---> Running in 2ccc6f403972
Removing intermediate container 2ccc6f403972
 ---> 77b69e77eecd
Successfully built 77b69e77eecd
Successfully tagged mycentos:1.0
---------------------
┌──(root㉿kali)-[/home/kali/Downloads/DockerFile]
└─# docker images  # 查看当前构建的镜像                                      
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
mycentos     1.0       77b69e77eecd   About a minute ago   740MB
centos       latest    328edcd84f1b   6 years ago          193MB
mysql        5.7       9e64176cd8a2   7 years ago          407MB
=====================================
(root㉿kali)-[/home/kali/Downloads/DockerFile]
└─# docker history mycentos:1.0         
IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
77b69e77eecd   7 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
d68d047cfbe4   7 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
75a7933a8baa   7 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
50a7cdc0f2c0   7 minutes ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
ad88fb98bb76   7 minutes ago   /bin/sh -c yum -y install net-tools             246MB     
68c0e83cfddf   7 minutes ago   /bin/sh -c yum -y install vim                   301MB     
c11b7dee7543   7 minutes ago   /bin/sh -c #(nop) WORKDIR /MYPATH               0B        
00dab235bdb2   7 minutes ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B        
066eeecab682   7 minutes ago   /bin/sh -c #(nop)  MAINTAINER bruce<bruce@ha…   0B        
328edcd84f1b   6 years ago     /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      6 years ago     /bin/sh -c #(nop)  LABEL name=CentOS Base Im…   0B        
<missing>      6 years ago     /bin/sh -c #(nop) ADD file:63492ba809361c51e…   193MB 

docker build命令官方文档:https://docs.docker.com/reference/cli/docker/image/build/

docker build .
  • 指定 PATH 为 . ,因此本地目录中的所有文件都会被延迟并发送到 Docker 守护程序
  • PATH 指定在哪里可以找到 Docker 守护程序上构建的“上下文”的文件
  • 请记住,守护进程可以在远程机器上运行,并且不会在客户端(运行 docker build 的地方)解析 Dockerfile
  • 这意味着 PATH 中的所有文件都会被发送,而不仅仅是 Dockerfile 中列出的 ADD 文件
  • 当看到 Sending build context 消息时,docker 客户端的意思是将上下文从本地机器传输到 Docker 守护进程。

将一个空目录作为上下文起点,并将 Dockerfile 保存在该目录中,仅添加构建 Dockerfile 所需的文件。

Dockerfile的官方文件夹命名:****Dockerfile

┌──(root㉿kali)-[/home/kali/Downloads]
└─# ls      
Dockerfile  DockerVolume

图片

图片

Docker网络

┌──(root㉿kali)-[/home/kali/Downloads/Dockerfile]
└─# ip addr show docker0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:ae:f8:90:c9 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:aeff:fef8:90c9/64 scope link 
       valid_lft forever preferred_lft forever
                                                                                                 
┌──(root㉿kali)-[/home/kali/Downloads/Dockerfile]
└─# 
================================
  • 默认网络模式(bridge):

Docker 默认使用 bridge 网络模式,创建一个名为 docker0 的虚拟网桥,并为每个容器分配一个 IP 地址。容器间可以通过 IP 地址相互通信 。

  • 主机模式(host):

使用主机模式时,容器直接使用宿主机的网络,与宿主机共享网络接口。容器的网络配置与宿主机相同,可以通过宿主机的 IP 地址直接访问容器。

  • 容器间通信:

Docker 提供了容器间通信的功能,可以通过容器名称或 IP 地址进行通信。例如,可以使用容器名称作为主机名,在容器间建立连接。

  • 端口映射(Port Mapping):

Docker 允许将容器内的端口映射到宿主机的端口上,以便容器服务可以通过宿主机 IP 和端口访问。可以使用 -p 或 --publish 参数来指定映射规则。

  • 自定义网络(Custom Networks):

Docker 允许创建自定义网络,以便在一个自定义的网络中连接多个容器。自定义网络可以提供更好的隔离和网络管理。可以使用 docker network create 命令创建自定义网络。

  • DNS 解析:

Docker 提供了内置的 DNS 服务,容器可以使用容器名称作为主机名进行 DNS 解析。容器可以通过主机名访问其他容器或外部服务

每启动一个容器,Docker都会给容器分配一个IP,只要安装了Docker,都会新增一个网卡docker0,默认桥接模式,使用的是evth-pair技术,流量都会经过docker0网卡。

网卡都是成对的新增。

# ==================================================
bridge:桥接(docker默认)
none:不配置网络
host:和宿主机共享网络
container:容器网络连通(用的很少,不建议使用,局限性很大)
# ==================================================
┌──(root㉿kali)-[/home/kali]
└─# docker run -td --name="bruce-centos-demo01" --net bridge centos:latest
09063829f0ee2a55167df960fc58acf5ed4be5b3aad2398ead61fa82e53e04d7
  • 自定义网络 **docker network**命令用法

自定义的网络,docker帮我们维护好了对应的关系,docker0则没有这个功能。

只要在一个网络中,就能保证互联互通。

# docker network create --help
# --driver bridge
# --subnet 172.31.0.0/24    172.31.0.2--->172.31.0.255
# --gateway 172.31.0.1  
docker network create --driver bridge --subnet 172.31.0.0/24 --gateway 172.31.0.1 bruce-network
------------------
┌──(root㉿kali)-[/home/kali]
└─# docker network create --driver bridge --subnet 172.31.0.0/24 --gateway 172.31.0.1 bruce-network
3873249efb7dd0de76c453e590e3391aee8cd28849ff07da9fc9dc607bc3785c
                                                                                                 
┌──(root㉿kali)-[/home/kali]
└─# docker network ls
NETWORK ID     NAME            DRIVER    SCOPE
10bb7463d8a8   bridge          bridge    local
3873249efb7d   bruce-network   bridge    local
840550a945ee   host            host      local
f531b596f6b0   none            null      local
                                                                                                 
┌──(root㉿kali)-[/home/kali]
└─# docker network inspect bruce-network
--------------------------

容器与网络之间互联

一个容器连接绑定两个网络,那么此容器就与该网络下的容器互通,本容器将会有两个IP。

docket network connect [可选选项] 网络 容器

┌──(root㉿kali)-[/home/kali]
└─# docker network --help

Usage:  docker network COMMAND

Manage networks

Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks

Run 'docker network COMMAND --help' for more information on a command.
                                                                                                 
┌──(root㉿kali)-[/home/kali]
└─# 
┌──(root㉿kali)-[/home/kali]
└─# docker network connect -h
Flag shorthand -h has been deprecated, please use --help

Usage:  docker network connect [OPTIONS] NETWORK CONTAINER

Connect a container to a network

Options:
      --alias strings           Add network-scoped alias for the container
      --driver-opt strings      driver options for the network
      --ip string               IPv4 address (e.g., 172.30.100.104)
      --ip6 string              IPv6 address (e.g., 2001:db8::33)
      --link list               Add link to another container
      --link-local-ip strings   Add a link-local address for the container
                                                                                                 
┌──(root㉿kali)-[/home/kali]
└─# 

猜你喜欢

转载自blog.csdn.net/taxuebufeng/article/details/141063973