docker 的基本操作

介绍

Docker的英文本意是“搬运工”,Docker搬运的是集装箱(Container)可以成为容器,我们可以把WEB应用以及依赖库打包进一个可移植的容器里传播,解决了应用部署的平台兼容性问题,同时她也是一种轻量级的虚拟化技术可以做到秒级启动一个容器(类似小虚拟机,区别启动快、可以传播);

镜像是docker 创建、启动一个容器的文件系统,这个文件系统包含依赖包、命令工具、APP等;

安装和开启服务

yum install epel-release -y  # 如果没有扩展源,需要先安装扩展源
yum install docker   # 安装,由于Docker要求Linux内核版本必须在要在3.10,所以centos6.X版本需要 yum install docker-io
systemctl start docker.service  # 开启服务
docker info  # 查看docker信息

镜像

修改镜像源

默认源连不上,修改镜像下载源,加入以下内容

vim etc/docker/daemon.json
  •  
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

更多国内源如下:

# Docker 官方中国区
https://registry.docker-cn.com
# 网易
http://hub-mirror.c.163.com
# ustc
https://docker.mirrors.ustc.edu.cn

注意:docker版本在1.12以下需要找到docker配置文件
目录位置为/etc/default/docker,如果没有,那么就在/etc/sysconfig/docker,如果还是没有,那么就去/etc/default/下创建一个docker文件吧。

搜索镜像文件

docker search centos  # 搜索centos

拉取镜像

docker pull docker.io/centos  # 拉取 镜像名

删除镜像

docker rmi <镜像名|镜像ID>

容器

创建容器

进入交互式容器

docker run -i -t docker.io/centos /bin/bash  # -it可以连写
  • docker run 创建容器
  • -t 指定镜像
  • -i 交互式

进入交互式容器的/bin/bash后,可以输入常用的操作命令,比如ls

指定容器名

docker run --name <容器名> -it <镜像名> /bin/bash  # --name 指定容器名

端口映射

# 使用 -p 8000:80 创建端口映射(映射docker的80端口到物理机8000)
# docker run -d -p 8000:80 -p 22:22 同时映射多个端口,比如22给ssh服务用,80给Django用,即凡是需要提供给外部访问的,都需要作端口映射。
docker run --name ssh_server -it -p 8000:80 <镜像名> /bin/bash

注意:端口映射只能在docker run时操作

通过exit可以退出容器。

查看容器

docker ps  # 正在运行的容器
docker ps -a  # 所有的容器
docker ps -l  # 最近一次的容器
docker ps -q  # 最近一次的容器的id

查看容器详细信息

docker inspect <容器ID|容器名>

结果类似于json数据,可以通过| grep来过滤需要的信息

启动和关闭容器

docker start <容器名|容器ID>
docker stop <容器名|容器ID>

进入容器

进入容器前需要先启动

# 这种方式可以进入正在运行的容器,但是exit退出时容器也就停止运行了
docker attach <容器名|容器ID>
# 另一种方式进入容器,退出时容器不终止运行
docker exec -it test1 /bin/bash  # /bin/bash必须加

删除容器

# 删除一个容器
docker rm <容器名|容器ID>
# 强制删除一个正在运行的容器
docker rm -f <容器名|容器ID>
# 删除全部容器(使用 -f 可以强制删除正在运行的容器)
docker rm `docker ps -aq`

说明:飘号内的内容会作为命令来执行,并将结果交给rm命令

容器打包成镜像

docker save -o <导出的文件名.zip> <镜像名>  # 如果要指定路径,必须先创建路径中的文件夹

# 比如:
mkdir img
docker save -o /img/vimenv.zip vimenv.img

导入镜像

docker load < <镜像文件名.zip>  # < 记住别漏了重定向符号
  • 导入之后使用docker images查看镜像
  • 使用导入的镜像docker run来创建容器
  • 新的容器内含以前打包好的项目的数据,直接运行

以上内容来自博客:https://blog.csdn.net/Ayhan_huang/article/details/78953924?utm_source=copy

一下内容来自于博客:https://blog.csdn.net/ZJin_Hua/article/details/52041757

6.5 不同主机间容器通信

不同容器之间的通信可以借助于 pipework 这个工具:

$ git clone https://github.com/jpetazzo/pipework.git
$ sudo cp -rp pipework/pipework /usr/local/bin/

安装相应依赖软件

$ sudo apt-get install iputils-arping bridge-utils -y

桥接网络

桥接网络可以参考 日常问题处理 Tips 关于桥接的配置说明,这里不再赘述。

# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000c291412cd       no              eth0
docker0         8000.56847afe9799       no              vetheb48029

可以删除 docker0,直接把 docker 的桥接指定为 br0。也可以保留使用默认的配置,这样单主机容器之间的通信可以通过 docker0,而跨主机不同容器之间通过 pipework 新建 docker 容器的网卡桥接到 br0,这样跨主机容器之间就可以通信了。

  • ubuntu
$ sudo service docker stop
$ sudo ip link set dev docker0 down
$ sudo brctl delbr docker0
$ echo 'DOCKER_OPTS="-b=br0"' >> /etc/default/docker
$ sudo service docker start
  • CentOS 7/RHEL 7
$ sudo systemctl stop docker
$ sudo ip link set dev docker0 down
$ sudo brctl delbr docker0
$ cat /etc/sysconfig/docker | grep 'OPTIONS='
OPTIONS=--selinux-enabled -b=br0 -H fd://
$ sudo systemctl start docker

pipework

非常详细的 Docker 学习笔记

不同容器之间的通信可以借助于 pipework 这个工具给 docker 容器新建虚拟网卡并绑定 IP 桥接到 br0

$ git clone https://github.com/jpetazzo/pipework.git
$ sudo cp -rp pipework/pipework /usr/local/bin/
$ pipework 
Syntax:
pipework <hostinterface> [-i containerinterface] <guest> <ipaddr>/<subnet>[@default_gateway] [macaddr][@vlan]
pipework <hostinterface> [-i containerinterface] <guest> dhcp [macaddr][@vlan]
pipework --wait [-i containerinterface]

如果删除了默认的 docker0 桥接,把 docker 默认桥接指定到了 br0,则最好在创建容器的时候加上--net=none,防止自动分配的 IP 在局域网中有冲突。

$ sudo docker run --rm -ti --net=none ubuntu:14.04 /bin/bash
root@a46657528059:/#
$                  # Ctrl-P + Ctrl-Q 回到宿主机 shell,容器 detach 状态
$ sudo docker  ps
CONTAINER ID    IMAGE          COMMAND       CREATED         STATUS          PORTS      NAMES
a46657528059    ubuntu:14.04   "/bin/bash"   4 minutes ago   Up 4 minutes               hungry_lalande
$ sudo pipework br0 -i eth0 a46657528059 192.168.115.10/24@192.168.115.2 
# 默认不指定网卡设备名,则默认添加为 eth1
# 另外 pipework 不能添加静态路由,如果有需求则可以在 run 的时候加上 --privileged=true 权限在容器中手动添加,
# 但这种安全性有缺陷,可以通过 ip netns 操作
$ sudo docker attach a46657528059
root@a46657528059:/# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 86:b6:6b:e8:2e:4d  
          inet addr:192.168.115.10  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::84b6:6bff:fee8:2e4d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:648 (648.0 B)  TX bytes:690 (690.0 B)

root@a46657528059:/# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.115.2   0.0.0.0         UG    0      0        0 eth0
192.168.115.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0

使用ip netns添加静态路由,避免创建容器使用--privileged=true选项造成一些不必要的安全问题:

$ docker inspect --format="{{ .State.Pid }}" a46657528059 # 获取指定容器 pid
6350
$ sudo ln -s /proc/6350/ns/net /var/run/netns/6350
$ sudo ip netns exec 6350 ip route add 192.168.0.0/16 dev eth0 via 192.168.115.2
$ sudo ip netns exec 6350 ip route    # 添加成功
192.168.0.0/16 via 192.168.115.2 dev eth0 
... ...

在其它宿主机进行相应的配置,新建容器并使用 pipework 添加虚拟网卡桥接到 br0,测试通信情况即可。

另外,pipework 可以创建容器的 vlan 网络,这里不作过多的介绍了,官方文档已经写的很清楚了,可以查看以下两篇文章:

--------------------- 本文来自 浪_淘_沙 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/ZJin_Hua/article/details/52041757?utm_source=copy

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值