Docker环境安装以及基本使用

12 篇文章 0 订阅

认识Docker

Docker 是一个开源的应用容器引擎,主要利用 linux 内核 namespace 实现沙盒隔离,用cgroup 实现资源限制。

Docker 支持三种不同的镜像层次存储的 drivers: aufs devicemapper、btrfs ;

AUFS (AnotherUnionFS) 是一种 Union FS, 简单来说就是支持将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)的文件系统。 Aufsdriver 是 docker 最早支持的 driver,但是 aufs 只是 linux 内核的一个补丁集而且不太可以会被合并加入到 linux内核中。但是由于 aufs 是唯一一个 storage driver 可以实现容器间共享可执行及可共享的运行库, 所以当你跑成千上百个拥有相同程序代码或者运行库时时候,aufs是个相当不错的选择。

Device mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略。Device mapper driver 会创建一个 100G 的简单文件包含你的镜像和容器。每一个容器被限制 在 10G 大 小 的 卷 内 。 

Btufs driver 在 docker build 可以很高效。但是跟 devicemapper 一样不支持设备间共享存储(文档里是 does not share executable memory between devices)。在没有 aufs 支持的 linux 发行版本上 (CentOS,opensuse 等 )安装 docker 可能就使用了devicemapper driver。

实验环境:

Redhat enterprise release 7.2 x86_64bit

1、 安装Docker

百度盘地址https://pan.baidu.com/s/1slqgGjF,安装前请先配置好yum源,因为需要安装许多依赖

yum install docker-engine-1.10.3-1.el7.centos.x86_64.rpm -y

这里写图片描述

Docker 在启动时会创建一个虚拟网桥 docker0,默认地址为 172.17.0.1/16, 容器启动后都会被桥接到 docker0 上,并自动分配到一个 IP 地址,如果想要修改默认的地址可以进行以下操作:

这里写图片描述

[root@lockey6 ~]# cp /usr/lib/systemd/system/docker.service /etc/systemd/system/
[root@lockey6 ~]# vim /etc/systemd/system/docker.service 

添加以下红线画出内容,只要是符合规范且不和你的物理机处于同一网段的ip都可以
这里写图片描述

当然以上是永久修改,如果只是想要暂时生效的话可以执行以下操作:

# systemctl stop docker
# ip link set dev docker0 down
# ip addr del 172.17.42.1/24 dev docker0
# ip addr add 192.168.0.1/24 dev dcoker0
# ip link set dev docker0 up

然后应用最新设置:

[root@lockey6 ~]# systemctl daemon-reload 
[root@lockey6 ~]# systemctl restart docker

这里写图片描述

2、容器使用

镜像用来创建容器,是容器的只读模板,默认可以从 docker hub 上下载。docker 的镜像是增量修改,每次创建新的镜像都会在父镜像上构建一个增量的层,基于 AUFS 技术。

# docker search 查询镜像
# docker pull 拉取镜像
# docker push 推送镜像

假设我们已经有一个名为nginx.tar的镜像

[root@lockey6 ~]# docker load -i nginx.tar #导入镜像
[root@lockey6 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              af4b3d7d5401        19 months ago       190.5 MB

以下为一些常用命令解释,不做操作演示:

# docker run -it --name vm1 ubuntu bash创建容器
# docker ps -a查看容器进程
# docker attach vm1连接容器
# docker top vm1查看容器进程

# docker logs vm1 查看容器指令输出 -f 参数可以实时查看
# docker inspect vm1 查看容器详情
# docker stats vm1 查看容器资源使用率
# docker diff vm1 查看容器修改




开启容器
[root@foundation5 ~]# docker start vm1#restart/stop/
vm1

[root@foundation5 ~]# docker attach vm1

# docker pause/unpause vm1暂停/恢复容器


倒入镜像
docker load -i ubuntu.tar
导出镜像
docker save ubuntu > ubuntu.tar
保存对镜像的更改
[root@foundation5 ~]# docker commit -m 'add files' -p vm1 newubuntu
删除镜像
[root@foundation5 ~]# docker rm vm1
vm1
[root@foundation5 ~]# docker rmi newubuntu

查看镜像
docker inspect ubuntu

ctrl+p+q退出镜像
再次进入镜像


[root@foundation5 ~]# docker attach vm1


docker exec vm1 ls /
docker cp /test.py ./#从docker往镜像中拷贝数据
[root@foundation5 ~]# docker cp vm1:/halo.log ./#从镜像中往docker中导出数据
docker history ubuntu查看镜像

[root@foundation5 ~]# docker export vm1 > halo.tar
[root@foundation5 ~]# docker import  halo.tar halo

[root@foundation5 ~]# docker load -i game2048.tar 
[root@foundation5 ~]# docker run -d -p 8080:80 --name 2048 game2048
1c8d01d0a1baca0e655b4ac41b73c70cb75fc7a51e0bba2fdc0fd22a6d3a905d

3、数据卷管理

[root@foundation5 data2]# docker rm `docker ps -aq`
4eadabad7d9a
ffec847ffc40
Failed to remove container (1c8d01d0a1ba): Error response from daemon: Conflict, You cannot remove a running container. Stop the container before attempting removal or use -f


[root@foundation5 data2]# docker create --name datadir -v /tmp/data1:/data1 -v /tmp/data2:/data2 ubuntu
9fbece05806cda542151ead5d588b47066a80a55a66fee60d6c663da2256dc45
[root@foundation5 data2]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
9fbece05806c        ubuntu              "/bin/bash"         9 seconds ago       Created                                 datadir
[root@foundation5 data2]# 
[root@foundation5 data2]# docker run -it --name vm1 --volumes-from=datadir ubuntu
root@2abd2ace7f15:/# ls
bin  boot  data1  data2  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@2abd2ace7f15:/# cd data2
root@2abd2ace7f15:/data2# ls
passwd
root@2abd2ace7f15:/data2# 


[root@foundation5 data2]# docker run --rm --volumes-from=datadir -v /tmp/backup:/backup ubuntu tar -zcf /backup/test.tgz /data2/
tar: Removing leading `/' from member names

[root@foundation5 tmp]# cd /tmp/backup/
[root@foundation5 backup]# ls
test.tgz
[root@foundation5 backup]# 
[root@foundation5 backup]# docker run --rm --volumes-from=datadir -v /tmp/backup:/backup ubuntu rm -f /backup/test.tgz#继续在docker中调用命令删除刚才创建的压缩文件

Docker容器中进程号为1的进程是bash,而不是init,一个运行的Linux竟然没有init进程,简直太不思议了。这其实得益于强大的Linux提供的LXC功能。
[root@foundation5 ~]# docker run -it --name vm1 --net host ubuntu#修改docker的网络模式
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值