Docker安装,容器管理,数据卷管理

82 篇文章 3 订阅

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器主要利用 linux 内核 namespace 实现沙盒隔离,用cgroup 实现资源限制。相互之间不会有任何接口。Docker 支持三种不同的镜像层次存储的 drivers:
                              (1)aufs;

                              (2)device mapper;

                              (3)btrfs ;
Aufs:
AUFS (AnotherUnionFS) 是一种 Union FS, 简单来说就是支持将不同目录挂载到同一个虚拟 文 件 系 统 下 的 文 件 系 统 。

Aufs driver 是 docker 最早支持的 driver,但是 aufs 只是 linux 内核的一个补丁集而且不太可以会
被合并加入到 linux 内核中。但是由于 aufs 是唯一一个 storage driver 可以实现容器间共享可
执行及可共享的运行库, 所以当你跑成千上百个拥有相同程序代码或者运行库时时候,aufs
是个相当不错的选择。


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


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

一个完整的Docker由以下几个部分组成:

dockerClient客户端
Docker Daemon守护进程
Docker Image镜像
DockerContainer容器                     docker仓库存放镜像,镜像中存放容器。


docker安装

官网上下载docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm
(1)安装:

yum install -y docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm
systemctl start docker.service
docker version

(2)查看docker信息及版本:

root@foundation7 Desktop]# docker version
root@foundation7 Desktop]# docker info

docker容器管理

# docker run -it --name vm1 ubuntu bash            创建容器
# docker ps -a                                                        查看容器进程
# docker attach vm1                                              连接容器
# docker top vm1                                                  查看容器状态
# docker logs vm1                                                查看容器指令输出 -f 参数可以实时查看
# docker inspect vm1                                           查看容器详情(gateway,ipaddr等)
# docker stats vm1                                               查看容器资源使用率
# docker diff vm1                                                  查看容器修改

# docker run -d --name vm1 ubuntu bash -c "while true; do echo westos; sleep 1; done"         后台运行
# docker stop vm1                                                                                                              停止容器
# docker start vm1                                                                                                    启动容器
# docker kill vm1                                                                                             强制干掉容器
# docker restart vm1                                                                             重启容器
# docker pause/unpause vm1                                                      暂停/恢复容器
# docker rm vm1                                                                    删除容器
# docker export vm1 > vm1.tar                                        导出容器
# docker import vm1.tar image                                    导入容器为镜像 image
示例:docker安装2048小游戏

(1)从网上下载2048的镜像,并导入镜像

root@foundation7 Desktop]#docker load -i game2048.tar
011b303988d2: Loading layer  5.05 MB/5.05 MB
36e9226e74f8: Loading layer 51.46 MB/51.46 MB
192e9fad2abc: Loading layer 3.584 kB/3.584 kB
6d7504772167: Loading layer 4.608 kB/4.608 kB
88fca8ae768a: Loading layer 629.8 kB/629.8 kB
Loaded image: game2048:latest

(2)查看镜像

(3)通过镜像创建容器 (-d打入后台,-it前台运行)

ctrl+d退出并停止容器

ctrl+pq  退出不停

[root@foundation7 Desktop]# docker  run  -d  --name  vm1  game2048
91be26d778ee743824536d266df492756c7c0e8d26e9a0400b81d0035299394a
[root@foundation7 Desktop]# docker  ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
91be26d778ee        game2048            "/bin/sh -c 'sed -..."   10 minutes ago      Up 10 minutes       80/tcp, 443/tcp     vm1

(4)查看容器vm1的IP

[root@foundation7 Desktop]# docker  inspect  vm1

(5)浏览器中输入IP:172.17.0.2,进入2048游戏界面

可以自己随便玩下,休闲。

端口映射

root@foundation7 Desktop]# docker  load  -i   /home/kiosk/Desktop/nginx.tar
root@foundation7 Desktop]# docker  images nginx
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              af4b3d7d5401        2 years ago         190 MB
root@foundation7 Desktop]# docker  run -d  --name vm2  -p 8080:80 nginx  #外部端口8080,内部监听端口为80
57f3982fb3192e530808f4b4845b1d0ad84e4c0389b20456366de81b41ef7a7c
root@foundation7 Desktop]# docker  inspect vm2

镜像管理

镜像用来创建容器,是容器的只读模板,默认可以从 docker hub 上下载。docker 的镜像是
增量修改,每次创建新的镜像都会在父镜像上构建一个增量的层,基于 AUFS 技术。
# docker search                        查询镜像
# docker pull                              拉取镜像
# docker push                           推送镜像
镜像默认可以从 docker hub 上下载,这是 docker 官方的公共仓库,为我们免费提供了大量
已经容器化的应用镜像,避免我们重复的去造轮子。但是官方并没有在国内部署服务器,
如果你不走 vpn 的话真的是太慢了,报错和超时让人非常的郁闷。

示例:nginx镜像的搭建

(1)阿里云上注册下载容器镜像

具体步骤:1.输入:www.aliyun.com,点击注册–>注册帐号–>登陆---->管理控制台--->点击产品与服务–>容器镜像服务,点击镜像加速器查看配置文件

(2)查看自己独一无二的镜像加速器地址

(3)按官网提示编写配置文件

vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://6hwuufzo.mirror.aliyuncs.com"]
}
systemctl daemon-reload
systemctl restart docker

(4)编写完毕后,拉取nginx的镜像

[root@foundation7 docker]# docker  pull nginx
Using default tag: latest
latest: Pulling from library/nginx
be8881be8156: Pull complete 
32d9726baeef: Pull complete 
87e5e6f71297: Pull complete 
Digest: sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
Status: Downloaded newer image for nginx:latest
[root@foundation7 docker]# docker images  nginx
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              c82521676580        3 weeks ago         109 MB

(5)移除所有停止的容器

root@foundation7 docker]# docker container  prune       移除停止的容器
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
91be26d778ee743824536d266df492756c7c0e8d26e9a0400b81d0035299394a
Total reclaimed space: 4.074 kB
root@foundation7 docker]# docker run -d --name vm1 nginx      在nginx镜像里创建容器vm1
e11349ca6abe8c3e19d691c49a593607da1064cc7bd4007f967bbf14a5799251

(6)给vm1进行推送发布界面

方法一:

[root@foundation29 docker]# vim index.html

[root@foundation29 docker]# docker cp index.html vm1:/usr/share/nginx/html

[root@foundation29 docker]# docker inspect vm1    查看IP

测试:

这样每次对发布页面进行修改都需要再次执行docker cp 这条命令。

下面这种方法就非常简便了

root@foundation7 ~]# cd  /tmp/docker/web/
[root@foundation7 web]# cat  index.html 
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>

 

[root@foundation7 ~]# docker  run  -d  --name vm1 -v  /tmp/docker/web:/usr/share/nginx/html  nginx
b15fd4de1bcc151e548d9161d145794decc11377d0511b721e7f842e80b3811b
[root@foundation7 docker]# docker inspect vm1    查看IP

运行应用和运行系统不同,ubuntu和rhel7属于系统,而nginx属于应用

rhel7和ubuntu区别:

rhel7十分简便,在打开的时候需要在命令最后加上bash,而ubuntu是在命令后面加上ubuntu

[root@foundation29 ~]# docker load -i rhel7.tar

[root@foundation29 ~]# docker run -it --name vm2 rhel7 bash

[root@foundation29 ~]# docker load -i ubuntu.tar

[root@foundation29 ~]# docker run -it --name vm3 ubuntu

数据卷挂载(数据备份)

物理机如果有该目录就不会创建了,如果没有该目录就会自动创建

cd /etc/docker
docker run -it --name vm1 -v /tmp/data1:/data1 -v /tmp/data2:/data2:ro -v /etc/yum.repos.d/redhat.repo:/etc/yum.repos.d/redhat.repo:ro  rhel7 bash

data1为默认的读写挂载,而data2是只读挂载,所以不能创建文件,在物理机上touch文件,容器中可以看到。

创建一个公用的容器,以后直接调用即可

[root@foundation29 ~]# docker create  --name dtavol -v /tmp/data1:/data1 -v /tmp/data2:/data2:ro -v /etc/yum.repos.d/redhat.repo:/etc/yum.repos.d/redhat.repo:ro rhel7 bash

[root@foundation29 ~]# docker run  -it   --name vm1 --volumes-from dtavol rhel7 bash

[root@foundation29 ~]# docker container attach vm1   ##进入开启的容器

[root@foundation29 ~]# docker run --rm -v /tmp/backup:/backup ubuntu tar cf /backup/etc.tar /etc

[root@foundation29 etc]# cd /tmp/backup/

[root@foundation29 backup]# ls

容器关联

docker run -d --name vm1 -p 8080:80 nginx

 

火墙可以看出,添加了端口转换的规则

docker run -it --name vm2 --link vm1:nginx ubuntu

 

关联的容器可以ping服务的名字

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值