一目了然系列--docker

一、docker使用

linux

了解镜像、容器和卷

1、docker镜像可以想象成一个已经打包好服务的iso
2、容器可以想象成一个虚拟出来的主机
3、卷可以想象成一个虚拟出来外接硬盘
4、有了容器那么想要通信肯定少不了网络

使用建议

1、第一次接触docker,建议在联网环境使用。
2、首次使用建议更换成国内镜像源。

1、基础操作

1.1查看docker版本

docker version

1.2 更换成国内镜像源

https://registry.docker-cn.com #中国官方镜像加速网址
http://hub-mirror.c.163.com #网易的镜像网址

vim /etc/docker/daemon.json

{
“registry-mirrors”: [
“https://registry.docker-cn.com”,
“http://hub-mirror.c.163.com” ]
}

保存后重新加载配置并重启docker

systemctl daemon-reload
systemctl restart docker

1.3 查询所有镜像

docker search 镜像名

举例

docker search centos #查找centos相关的镜像

1.4 拉取镜像

这里说明一下会默认拉取标签也就是tag为latest标签的镜像。
latest标签:最新版镜像的标签
建议拉取latest标签镜像

docker pull 镜像名
或者
docker pull 镜像名:标签

举例
以下两条命令结果一样

docker pull centos
docker pull centos:latest

2、操作命令

2.1 对镜像的操作

2.1.1 查看所有镜像

docker images #查看所有镜像
docker images -q #查看所有镜像的ID


2.1.2 查看某一个镜像详细信息

docker image inspect 镜像名:标签

举例

1、docker image inspect centos:latest #查看镜像的所有信息
2、docker image inspect centos:latest | grep -i version #查看镜像版本


2.1.3 镜像运行,生成容器

docker run

必要参数
–name 容器名称

常用参数
-d #后台运行生成容器
-h #主机名称
-p #端口映射 本机端口:docker容器端口
-v #卷
-ti 的意思是在镜像创建容器时生成一个可交互终端,t 终端,i 交互
–net= #配置docker 的网络,在2.4章节会详细说明
–net=bridge 这个是默认值,连接到默认的网桥。host,container,none,bridge

注意镜像名称一定要放最后

docker run 参数 镜像名称

举例

docker run --name mynginx -h testhost -p 81:80 -d nginx


2.1.4 删除镜像

docker rmi 镜像ID

强制删除

docker rmi -f 镜像ID

删除注意事项:
1、不能有该镜像的容器在,应先删除容器


2.1.5 镜像的导出和导入

导出
docker save -o 自定义名称.tar 镜像ID
导入
docker load --input 自定义名称.tar

举例
导出

docker save -o mycent.tar 镜像ID号

导入

docker load --input mycent.tar


2.2 对容器的操作

2.2.1 查看容器信息

docker ps -a


2.2.2 停止容器

docker stop 容器id


2.2.3 运行容器,重启容器

docker start 容器id

重启容器

docker restart 容器id


2.2.4删除容器

docker rm 容器ID

强制删除

docker rm -f 容器id


2.2.5 对所有容器操作

举例:停止所有容器

docker stop $(docker ps -a |awk ‘{print $1}’)


2.2.6 进入容器

docker exec -it 容器ID bash

2.2.7 将容器打包成镜像

docker commit

参数:
-a :提交镜像的作者;-a “baizi”
-m :提交描述;
-p :在commit时,将容器暂停;
-c :使用Dockerfile指令来创建镜像。

docker commit -a “作者” -m “描述” 容器ID 新的镜像名:镜像标签(默认:latest)

举例

docker commit -a “baizi” -m “this baiziya test” 容器ID mynginx:latest
docker commit -a “baizi” -m “this baiziya test” 容器名 mynginx:latest

用docker images 命令就可以看到了,也可以导出


2.3 对卷的操作

1、卷就是类似一个硬盘,一个存储设备。
2、卷会在宿主机生成一个卷文件夹默认是在 /var/lib/docker/volumes

为更容易理解卷,卷的对应信息表

docker容器宿主机
卷的路径自定义容器挂载路径/var/lib/docker/volumes/卷ID文件夹
卷的路径/opt/vo1/var/lib/docker/volumes/卷ID文件夹

卷可实现:
第一种情况:容器A可以称为父数据卷容器

挂载
挂载
挂载
挂载
宿主卷
容器A
可以是
stop状态
容器B
容器C
容器D

第二种同级关系挂载

挂载
挂载
挂载
宿主卷
容器A
容器B
容器C

卷的这部分内容注意查看加粗部分的命令


2.3.1 镜像创建容器时添加卷

docker run -v 虚拟机中的卷挂载路径 其他参数 镜像名

举例
在容器中生成一个 /opt/vo1 文件夹,并挂载卷。

docker run --name mynginx -v /opt/vo1 -h testhost -p 81:80 -d nginx


2.3.2 创建卷后,再用容器挂载卷

创建名字为 testvolume 的卷 ,限制大小为2m,设备类型为tmpfs(好像限制大小只支持tmpfs类型)

docker volume create --name testvolume -o o=size=2m -o device=tmpfs -o type=tmpfs

-o 后面接的参数

o=size= #规定卷大小
type= #规定卷类型
device= #规定设备类型

将卷testvolume挂载到容器中

docker run -v testvolume:/opt/vo1 -d --name mycentos centos


挂载容器内卷
–volumes-from 容器名
将容器centos内的挂载卷,同时挂载到容器nginx

docker run --name mynginx --volumes-from mycentos -p 81:80 -d nginx


2.3.3 删除卷

删除所有没有连接容器的卷

docker volume prnue

删除某个卷
注意:删除容器的时候并不会删除卷,有容器连接的时候,不能删除卷
docker volume rm 卷名

docker volume rm testVolume

删除容器顺便删除所附带的卷

docker rm -v 容器ID


2.3.4 查看卷

查看卷列表

docker volume ls

查看不再使用的卷

docker volume ls --filter dangling=true

2.3.5 卷的备份与恢复

卷既然是存放和共享数据的,那肯定少不了备份与恢复操作

个人感觉有点鸡肋,可以手动去存放卷的宿主机目录下进行压缩备份,等下次创好新卷再解压进去就行了。


容器数据的备份
原理:创建一个新的容器并挂载卷,然后把数据备份到卷中。然后把容器删除即可

命令

docker run --rm --volumes-from testv1 --name test nginx tar cvf /opt/vo1/data1.tar home

命令解释
用nginx镜像创建一个test容器,挂载 testv1挂载的卷,执行tar压缩命令将test容器内的/home目录压缩成data1.tar 并存放在/opt/vo1目录下。然后删除test容器。命令结束。
进入宿主机的卷文件夹中就可以看到多了data1.tar压缩文件,就可以将此移动到其他地方存放。

docker run
–rm #删除容器
–volumes-from testv1 #选择testv1数据卷容器 --name test nginx #用nginx镜像来创建一个test容器 tar cvf /opt/vo1/data1.tar /opt/vo1 #将容器中的/opt/vo1目录,压缩到挂载卷(/opt/vo1/)目录下的data1.tar


恢复操作
原理:创建一个镜像并挂载一个新的卷,把备份的数据解压进去即可
创建并挂载载前面已经说明,这里就进行恢复就好

docker run --v testv1 --name test nginx tar xvf /opt/vo1/data1.tar


2.4 对网络的管理

docker network

参数:
connect :将容器连接到网络
create :创建一个网络
disconnect: 取消容器连接网络
ls:查看网络列表
inspect:查看详细信息
prune:删除没有使用的网络
rm:删除某一个网络

网络模式对应关系

模式解释优点缺点
host共用宿主机的网卡,利用端口映射的方式速度较快占用宿主机的端口
containe类似建立一个共享网卡,使多个容器共用一个网卡看起来比较简约ip和端口映射
none仅有lo网卡,容器相当于没接网线的电脑安全性高不能联网
bridge桥接网卡,默认使用方便自动创建ifconfig命令显示

网络模式配置命令
在创建容器的时候添加的参数

–net=host
–net=container:容器ID
–net=none
–net=bridge

命令使用举例

#创建一个test容器网卡模式为host
docker run --net=host --name=test nginx

#创建一个test1容器与test容器共用一网卡
docker run --net=container:test --name=test1 nginx

#创建test2容器网卡模式为none
docker run --net=none --name=test2 nginx

#创建test3容器,网卡模式为bridge
docker run --name=test3

思考:

多台宿主机的docker容器如何相互通信

方法1:

1、将两个宿主机的docker0修改为两个网段
2、两台宿主机之间分别写入静态路由

修改docker网段:

vim /etc/docker/daemon.json

192.168.0.1指的是给docker0的ip,/24指的是子网掩码255.255.255.0

{
“bip”:“192.168.0.1/24”
}

重启docker

systemtl restart docker

验证
ifconfig |grep -i docker -A 5

写静态路由:
主机A:

route add -net 主机B的docker网段 netmask 主机B的docker子网掩码 gw 主机B的IP地址

主机B:

route add -net 主机A的docker网段 netmask 主机A的docker子网掩码 gw 主机A的IP地址

两边互ping docker0网卡即可


3、dockerfile与docker-compose的区别

dockerfile:用来构建镜像。
举例:安装java服务,并打包成镜像。

dockerfile工作过程:
1、用一个初始镜像来生成一个新的容器,
2、将java压缩包解压到容器中相应文件夹,
3、配置java环境变量
4、测试java是否安装成功
5、将容器打包成新的镜像。
6、docker images 可看到新的镜像存在。

docker-compose:编排服务

4、dockerfile与docker-compose的使用

建议跳转

欢迎提出建议和疑问。白子原创,请勿随意盗用。谢谢大家支持。有什么需要快速了解的技术可联系我

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值