docker学习进阶(一)

  1. Docker常用命令
    查看已经下载的镜像:docker images
    宿主机和容器的端口映射:docker run -p 8000:8080 tomcat(镜像名)—前台运行
    宿主机和容器的端口映射:docker run -p 8000:8080 -d tomcat(镜像名)—后台运行

查看网络情况:netstat -tu|pn
在这里插入图片描述

列出当前正在运行的容器和它的相关信息:docker ps
停止容器:docker stop 容器ID
删除容器:docker rm 容器ID(注意删除容器前需先将容器停止)
在这里插入图片描述

简便删除容器:docker rm -f 容器ID(无需先停止容器,线上不推荐)
删除镜像:docker rmi 镜像名:标签

  1. 在容器中执行命令
    格式:docker exec [-it] 容器id 命令
    -it采用交互方式执行命令
    实例:docker exec -it xxx /bin/bash(进入tomcat容器bin目录)

查看linux版本:cat /proc/version
推出当前容器命令:exit
3. 容器的生命周期
在这里插入图片描述

  1. Dockersfile
    FROM 设置基准镜像
    MAINTAINER 设置维护人
    WORKDIR 切换工作目录
    ADD 复制目录下的所有文件到容器目录
    例子:
    在这里插入图片描述

  2. 比较了 Docker 和传统虚拟化方式的不同之处:

  3. 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用 进程;

  4. 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。 因此容器要比传统虚拟机更为轻便。

  5. 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资 源

  6. 镜像和容器的关系
    Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建 很多容器。

7. docker常用命令
(1)帮助命令
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

rmi是删除镜像,rm是删除容器命令;

(2)查看docker日志命令
docker logs -t -f --tail 3 容器ID

(3)查看容器中运行的进程
docker top 容器ID

(4)查看容器的细节可以通过inspect命令
docker inspect 容器ID

(5)进入运行的容器
在这里插入图片描述

docker attach 容器id

(6)文件复制
从容器中拷贝内容到宿主机中
docker cp 容器ID:容器内路径 目的地路径

(7)镜像制作命令
docker commit -m=“要提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]

(8)容器挂载数据卷读写权限
在这里插入图片描述

设置只读权限例子:
docker run -it -v /root/dockerfile1:/root/dockerfile1:ro centos

(9)数据卷使用
①添加数据卷:
运行一个centos容器
docker run -it -v /宿主机绝对路径:/容器内目录 镜像名

②dockerfile添加
宿主机根目录下创建一个mydocker,并在该目录下创建一个文件,内容如下
在这里插入图片描述

根据这个DockerFile构建我们的镜像文件(注意最后的点号)
docker build -f dockerFile1 -t bobo/centos .

说明:点号(.)是指镜像构建时打包上传到Docker引擎中的文件的目录,不是本机目录;

(10)创建数据卷容器
命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据的容器,称之为数据卷容器。
① 启动一个父容器
docker run -it --name dc01 bobo/centos

② 创建两个子容器
docker run -it --name dc02 --volumes-from dc01 bobo/centos
docker run -it --name dc03 --volumes-from dc01 bobo/centos

8. DockerFile
DockerFile是用来构建Docker镜像的 构建文件 ,是由一系列 命令 和 参数 构成的 脚本 。
指令集:
在这里插入图片描述

CMD命令存在多个时,后面的会把前面的覆盖掉;
ENTRYPOINNT存在多个时,会顺序执行,不会被覆盖掉;
应用实例:

FROM java:8 #基础镜像
MAINTAINER zhangsan #维护人
ADD demo-0.0.1-SNAPSHOT.jar demo.jar #宿主机文件放入基础镜像,并命名为demo
EXPOSE 8080
ENTRYPOINT ["java","-jar","demo.jar"] #容器启动时运行命令

创建镜像:docker build -f ./DockerFile -t demo:1.0 .
启动镜像:docker run --name demo -d -p 8080:8080 -t demo:1.0

9. 网卡信息
通过ip a 可以看到当前的centos中有的4个网卡信息作用分别是
在这里插入图片描述

网卡信息解析
状态:UP/DOWN/UNKOWN等
link/ether:MAC地址
inet:绑定的IP地址

(1) 网卡操作
为网卡eth0增加ip地址
ip addr add 192.168.100.120/24 dev eth0
为网卡删除ip地址
ip addr del 192.168.100.120/24 dev eth0

  1. Network Namespace
    Network Namespace 是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自 的网络栈信息。不管是虚拟机还是容器,运行的时候仿佛自己就在独立的网络中。

操作命令:
(1) 添加一个namespace
ip netns add ns1
(2) 查看当前具有的namespace
ip netns list
(3) 删除namespace
ip netns delete ns1
(4) 查看namespace【ns1】的网卡情况
ip netns exec ns1 ip a
(5) 启动网络状态
ip netns exec ns1 ifup lo
(6) 关掉网络
ip netns exec ns1 ifdown lo
(7) 通过Link设置状态
ip netns exec ns1 ip link set lo up
ip netns exec ns1 ip link set lo down

  1. 两个network namespace的通信
    要实现两个network namespace的通信,我们需要实现到的技术是:
    veth pair:Virtual Ethernet Pair,是一个成对的端口,可以实现上述功能。
    在这里插入图片描述

(1) 创建一对link,也就是接下来要通过veth pair连接的link
ip link add veth-ns1 type veth peer name veth-ns2
(2) 然后在宿主机中就会多出一对网卡信息
在这里插入图片描述

(3)然后将创建好的 veth-ns1交给namespace1,把veth-ns2交给namespace2
ip link set veth-ns1 netns ns1
ip link set veth-ns2 netns ns2
在这里插入图片描述

(4)再查看ns1和ns2中的link情况
在这里插入图片描述

(5)此时veth-ns1和veth-ns2还没有ip地址,显然通信还缺少点条件,需配置ip地址
ip netns exec ns1 ip addr add 192.168.0.11/24 dev veth-ns1
ip netns exec ns2 ip addr add 192.168.0.12/24 dev veth-ns2
在这里插入图片描述

(6)再次查看,发现state是DOWN.所以我们需要启用对应的网卡
[root@localhost ~]# ip netns exec ns1 ip link set veth-ns1 up
[root@localhost ~]# ip netns exec ns2 ip link set veth-ns2 up
在这里插入图片描述

(7)然后就可以相互之间ping通了
ip netns exec ns1 ping 192.168.0.12
ip netns exec ns2 ping 192.168.0.11
在这里插入图片描述

(8) Container的NameSpace
每个container,都会有自己的network namespace,并且是独立的。
(9) docker中使用ping命令
docker exec -it tomcat01 ping 172.0.0.1
(10) 查看 tomcat01中的网络
docker exec -it tomcat01 ip a
(11) 查看tomcat01容器中ip桥接网络
brctl show
在这里插入图片描述
在这里插入图片描述

(12) 查看docker中的网络模式
docker network ls
bridge也是docker中默认的网络模式
在这里插入图片描述

(13) 检查brige命令
docker network inspect bridge

(14) tomcat01容器中是可以访问互联网的,顺便把这张图画一下咯,NAT是通过iptables实现的。
在这里插入图片描述

  1. 自定义NetWork
    (1)创建一个network,类型为 Bridge
    docker network create tomcat-net
    或者
    docker network create tomcat-net --subnet=172.18.0.0/24 tomcat-net
    (2) 查看已有的NetWork:
    docker network ls
    在这里插入图片描述

(3) 查看tomcat-net详情信息
docker network inspect tomcat-net
(4) 删除network
docker network rm tomcat-net
(5) 创建tomcat容器,并指定使用tomcat-net
docker run -d --name custom-net-tomcat --network tomcat-net tomcat-ip:1.0
(6) tomcat01容器连接上tomcat-net
docker network connect tomcat-net tomcat01

  1. 深入分析 Container网络-Host&None
    Host模式下,容器将共享主机的网络堆栈,并且主机的所有接口都可供容器使用.容器的主机名将与主机 系统上的主机名匹配。
    (1) 创建一个容器,并指定网络为host
    docker run -d --name my-tomcat-host --network host tomcat-ip:1.0
    (2) 查看ip地址
    docker exec -it my-tomcat-host ip a
    (3) 检查host网络
    docker network inspect host

None模式
None模式不会为容器配置任何IP,也不能访问外部网络以及其他容器.它具有环回地址,可用于运行批 处理作业.
(1) 创建一个tomcat容器,并指定网络为none
docker run -d --name my-tomcat-none --network none tomcat-ip:1.0
(2) 查看ip地址
docker exec -it my-tomcat-none
(3) 检查none网络
docker network inspect none

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值