docker容器安装和基本使用(离线)

概念理解

Docker是在Linux容器里运行应用的开源工具,是一种轻量级”虚拟机

Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱,鲸鱼可以看作宿主机,而集装箱可以理解为相``互隔离的容器,每个集装箱都包含自己的应用程序

Docker是一种轻量级的虚拟化方式,Docker容器很快,启动和停止可以在秒级实现

Docker的三个核心,镜像,容器,仓库,我后面会依次解释

安装Docker

本例是系统为centos7主机,一台就够了

这里介绍的是,做好的安装包,类似绿色版,可以直接使用命令,

这个包的百度云,如下

如果你要yum安装,需要配置相关的软件源,并配置,这里不阐述

把包拖入linux虚拟机
[root@CentOS7-02 ~]# tar zxf docker-18.03.1-ce.tgz
[root@CentOS7-02 ~]# ls
anaconda-ks.cfg docker docker-18.03.1-ce.tgz
[root@CentOS7-02 ~]# cp docker/* /usr/bin/
(/usr/bin是linux默认读取命令的地方,现在已经可以使用docker命令了)

[root@CentOS7-02 ~]# dockerd &
(会输出一堆东西,直接按回车就行)
(这个绿色版本,是这样启动的,如果你是yum可以systemcl方式)

[root@CentOS7-02 ~]# docker version (查看版本)

Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.2
Git commit: 9ee9f40

Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: 9ee9f40

Docker镜像操作

搜索并获取镜像,有网方式

[root@CentOS7-02 ~]# docker search dhcp
(搜索 有关 dhcp的镜像,后面介绍离线方式)

例如下载镜像,gns3/dchp (这刚刚的NAME)
[root@CentOS7-02 ~]# docker pull /gns3/dhcp

构建离线方式,这个是重点,后面都是基于这个

把提供的文件,拖到虚拟机中,我这里是centos7 拖入虚拟机

load命令加载成镜像
[root@CentOS7-02 ~]# docker load < centos7
f972d139738d: Loading layer [==================================================>] 208.8MB/208.8MB
Loaded image: centos:latest

1.查看镜像信息

查看本地所有镜像,命令如下
[root@CentOS7-02 ~]# docker images
在这里插入图片描述
[root@CentOS7-02 ~]# docker inspect 75835a67d134
( inspect 后面是镜像的ID,可以查看详细的信息)

添加新的标签,

只是一个标签,而不是新建一个镜像,只是为了方便

[root@CentOS7-02 ~]# docker tag centos:latest centos7:centos7
(centos:latest是原来的,后面的是要添加的标签)
[root@CentOS7-02 ~]# docker images
在这里插入图片描述
可以看到,唯一的ID还是一样
[root@CentOS7-02 ~]# docker tag centos:latest centos5:centos5
(再添加一个标签,方便后面实验)

2.删除镜像

使用docker rmi 命令可以删除多余镜像
两种方式,根据1.镜像标签,2.使用镜像ID

1.镜像标签

这种方式不会删掉其原来的,因为这是一个标签,原来是
cenots:latest

例如,要删除刚刚做的标签,
[root@CentOS7-02 ~]# docker rmi centos7:centos7
Untagged: centos7:centos7
[root@CentOS7-02 ~]# docker images (centos7:centos7应该已经没了)

2.镜像ID

就算是标签,它们的ID都是一样的,如果删除的是ID,会删除包括
ID所有的,

[root@CentOS7-02 ~]# docker images
(查看镜像,因为都是标签的原因,ID都是一样的)
[root@CentOS7-02 ~]# docker rmi -f 75835a67d134
(你们的ID肯定和我不一样,按照你们的来)
在这里插入图片描述
[root@CentOS7-02 ~]# docker images (已经没了任何镜像了)
REPOSITORY TAG IMAGE ID CREATED SIZE

[root@CentOS7-02 ~]# docker load < centos7 (重新加载一下)

3.存出镜像和载入镜像

当需要把镜像进行迁移的时候,需要保存为本地文件,这样过程叫存出

将刚刚载入好的centos:latest,存出叫"ajbn"
[root@CentOS7-02 ~]# docker save -o ajbn centos:latest
[root@CentOS7-02 ~]# ls -l ajbn
-rw------- 1 root root 208822272 11月 21 21:29 ajbn

将文件导出,成为镜像,这一过程叫做载入
[root@CentOS7-02 ~]# docker rmi centos:latest
(删除这个,不然一会导入会冲突)

[root@CentOS7-02 ~]# docker load < ajbn
[root@CentOS7-02 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 75835a67d134 13 months ago 200MB
(查看,应该是centos:latest 就对了,因为是这个镜像导出的)

4.上传镜像需要网络,这里不涉及

Docker容器操作

容器是Docker的另一个核心操作,容器是镜像的一个运行实例,是镜像运行的所必须的环境,包括文件系统,shell,库等,

镜像只是只读模板,而容器会给这个只读模板一个可写层

1.容器的创建与启动

容器的创建必须在镜像的基础上,不可以单独创建,是镜像的可写层

[root@CentOS7-02 ~]# docker create -it --name ajbn centos:latest /bin/bash
c429b0fd3f02df402e97f7808def1f85f1473ae13e1d0f8be31937fabcff9cce
(-i表示让容器的输出保持打开,–name 指定名字
-t表示给容器分配一个伪终端,让我们可以操作,之后创建的容器,)

(返回的字符串是一个唯一ID)

如下命令查看所有存在的容器,
[root@CentOS7-02 ~]# docker ps -a
在这里插入图片描述
[root@CentOS7-02 ~]# docker start ajbn
(启动容器)
在这里插入图片描述
后面的 “ajbn” 是name ,可以换成容器ID

容器启动后,可以看到容器状态栏已经变为UP
在这里插入图片描述

如果用户想创建并启动容器,可以执行docker run 命令

[root@CentOS7-02 ~]# docker run centos:latest /bin/bash -c ls
(-c 要执行的命令,centos:latest是要基于的镜像)
在这里插入图片描述
但是通过查看容器运行状态,发现,运行完命令就停止了,start启动也没用有
在这里插入图片描述

有时候需要在后台持续运行这个容器,就需要添加 -d 选项
[root@CentOS7-02 ~]# docker run -d centos:latest /bin/bash -c "while true;do echo ok;done"
(如果不加后面的 -c 中的命令,加了-d参数也没有,因为运行的程序不可以结束,要不容器就会关闭,start 也没用有 解释一下-c 中命令的意思,就是一直循环输出 “echo ok” , 但是不会在容器的命令行输出 所以不影响,但是一定要加这个命令)
在这里插入图片描述

2.容器的运行与停止

在这里插入图片描述
停止这个,容器,可以使用 ID 或名称
[root@CentOS7-02 ~]# docker stop c4
(这个c4,是上面的简写容器ID的简写,也可以使用 名字)

[root@CentOS7-02 ~]# docker ps -a | ajbn
查看容器,已经停止了
在这里插入图片描述

3.容器的进入

新创建一个容器 www
[root@CentOS7-02 ~]# docker create -it --name www centos:latest /bin/bash
3156a4e53c91e6d1fb5ab23e6c472017a3846ea5b305fa1d51ee91b59e553971
[root@CentOS7-02 ~]# docker start www

[root@CentOS7-02 ~]# docker exec -it www /bin/bash
(www可以换成容器ID ,而且ID也可以简写)
在这里插入图片描述
exit命令(退出容器)

4.容器的导出与导入

容器也可以迁移,停止与运行状态均可导出
导出容器“www”
[root@CentOS7-02 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3156a4e53c91 centos:latest "/bin/bash" 30 hours ago Up 30 hours www

[root@CentOS7-02 ~]# docker export www>www1
(把www容器导出为 “www1”文件,“www”可以换成www容器的ID)
[root@CentOS7-02 ~]# ls -l www1
-rw-r--r-- 1 root root 208815104 11月 23 11:22 www1

将导出的文件,之后使用docker import命令导入,成为镜像才可以
[root@CentOS7-02 ~]# cat www1 | docker import - ww1:ww1
sha256:7005051d950335dc6d5d05534fb3dc70dad3b39b1dbf72f91bb4c7d5e7caec31
( 后面的,- www1:www1 是镜像名:标签 ,可以自定义)

[root@CentOS7-02 ~]# docker images | grep ww1
ww1 ww1 7005051d9503 10 minutes ago 200MB

[root@CentOS7-02 ~]# docker create -it --name ww1 ww1:ww1 /bin/bash
cad648e08d689ba4038b0e94aae098a2e51b8e64a1d955dfa7cdd9326a683f85
(ww1:ww1是刚刚的镜像,ww1是新的容器名)

[root@CentOS7-02 ~]# docker start ww1
ww1

5.容器的删除

[root@CentOS7-02 ~]# docker ps | grep ww
cad648e08d68 ww1:ww1 "/bin/bash" 5 minutes ago Up 4 minutes ww1

52f84a108a73 centos:latest "/bin/bash" 11 minutes ago Up 9 minutes www

现在有两个打开的容器,方便我后面演示

首先停止,然后删除
[root@CentOS7-02 ~]# docker stop ww1
ww1
[root@CentOS7-02 ~]# docker rm ww1
ww1
(已经删除了,后面的 ww1可以换成容器的ID,可以简写)

直接删除一个运行的容器
[root@CentOS7-02 ~]# docker rm -f www
www
[root@CentOS7-02 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
(已经没有容器了)

Docker资源控制

[root@CentOS7-02 ~]# docker create -it --name www1 centos:latest /bin/bash
2f04b512f41ff3e7ffe7275ade2ede5788b968e0b2747a48c4f648e407481aae
[root@CentOS7-02 ~]# docker create -it --name www2 centos:latest /bin/bash
632fc0f56b693f097e61d4739a28e384840ee65f676ff1bb9a5a034e1af56ba5
[root@CentOS7-02 docker]# docker start www1
www1
[root@CentOS7-02 docker]# docker start www2
www2
(必须打开容器,对CPU的限制才可以做)

对CPU的限制

1.限制CPU使用速率

按我图下操作如下,操作
(echo 2000 表示使用CPU资源使用率为%20,这里2000不是一个具体的数据值,
就是一个类似百分比,不用管原有资源有多大)

在这里插入图片描述

2.多任务按比例分享CPU

[root@CentOS7-02 ~]# docker run -tid --name www3 --cpu-shares 1024 centos:latest
40e1080727bfc7ef7eaf006ae1b9e6be5f79addfe2ac5217afd8f3bd3296f441
[root@CentOS7-02 ~]# docker run -tid --name www4 --cpu-shares 1024 centos:latest
f9283d38140f42c150049b0af4139bec786f33caf401d744fdb919ddfda55835
(这个 1024也不是一个具体的数值,而是一个比例)
(新建了两个容器,开启的时候CPU资源占比为1:1,就是把总CPU分成平均一人一半)

(如果1:1:2就是把CPU资源分成4份, 1024 1024 2048 按比例分配)

[root@CentOS7-02 ~]# docker ps | grep www3
40e1080727bf centos:latest "/bin/bash" About a minute ago Up About a minute www3
[root@CentOS7-02 ~]# docker ps | grep www4
f9283d38140f centos:latest "/bin/bash" About a minute ago Up About a minute www4

3.限制CPU内核使用

可以限制容器只使用指定的内核,真实的服务器CPU有多个内核

而虚拟机里,默认只有一个,内核0,

[root@CentOS7-02 ~]# cat /proc/cpuinfo
processor : 0 #这行就是CPU的编号的意思,如果有多个CPU ,会有多个这个段
vendor_id : GenuineIntel
cpu family : 6
model : 142
model name : Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
stepping : 10
microcode : 0x96
cpu MHz : 1799.496
cache size : 6144 KB

例如,创建一个新的容器www5,使该容器上的进程,只可以在内核0,上运行

[root@CentOS7-02 ~]# docker run -tid --cpuset-cpus 0 --name www5 centos:latest
80d5ad2088c0df3b48069fc47ade8afc41dc00fff65a9d4aac3ed0ad8d23d035

[root@CentOS7-02 ~]# docker ps | grep www5
80d5ad2088c0 centos:latest "/bin/bash" 3 minutes ago Up 3 minutes www5

[root@CentOS7-02 ~]# cat /sys/fs/cgroup/cpuset/docker/80d5ad2088c0df3b48069fc47ade8afc41dc00fff65a9d4aac3ed0ad8d23d035/cpuset.cpus
0
(查看,刚刚的创建的容器使用的CPU内核,已经改了)
(后面的 长的 80d5 目录 是和容器 www5容器ID是一样的,才对)
(你们的www5容器ID肯定和我不一样,按照你们来)

对内存使用的限制

[root@CentOS7-02 ~]# docker run -tid -m 512MB --name www6 centos:latest
8f42ce9bff52b52316fa3059c44f17737eef9e2a62460f1b34199de82eb9fb72
(创建一个新的容器www6 ,内存限制为 512 MB)

[root@CentOS7-02 ~]# docker ps -a | grep www6
8f42ce9bff52 centos:latest "/bin/bash" 13 minutes ago Up 13 minutes www6

[root@CentOS7-02 ~]# cat /sys/fs/cgroup/memory/docker/8f42ce9bff52b52316fa3059c44f17737eef9e2a62460f1b34199de82eb9fb72/memory.limit_in_bytes
536870912 #已经改过来了,只是计量单位不一样

(查看容器的配置文件,已经改过来了,这里要和上面的www6容器ID一样,那个长的目录8f42,要对应上容器www6容器ID进入相应的目录)
(你们的ID肯定和我不一样,按你们自己的来)

实验完毕 !

发布了54 篇原创文章 · 获赞 57 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_45308292/article/details/103177112