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<bruce@handsome.com>

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]
└─# 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值