Docker 是在 Linux 容器里运行应用的开源工具,是一种轻量级的”虚拟机”。Docker 的 Logo 设计为蓝色鲸鱼,拖着许多集装箱。如下图,鲸鱼可以看作宿主机,而集装箱可以理解为相互隔离的容器。每个集装箱中都包含自己的应用程序。
特性 | Docker容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
计算能力损耗 | 几乎无 | 损耗50%左右 |
性能 | 接近原生 | 弱于 |
系统支持量(单机) | 上千个 | 几十个 |
隔离性 | 资源限制 | 完全隔离 |
打包应用程序简化部署 可脱离底层硬件任意迁移——如:服务器从腾讯云迁移到阿里云
Docker 镜像是 Docker 容器运行时的只读模板,镜像可以用来创建 Docker 容器。每一个镜像由一系列的层(layers)组成。
Docker 利用容器来运行应用,一个 Docker 容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。容器是从镜像创建的运行实例。它可以被启用,开始,停止,删除。每个容器都是互相隔离的,保证安全的平台。
Docker 仓库是用来集中保存镜像的地方,当创建了自己的镜像后,可以使用 push 命令将它上传到共有仓库(Public)或者私用仓库(Private),这样一来当下次要在另外台机器上使用这个镜像时,只需要从仓库上拉取下来就可以了。
主机名 | 操作系统 | IP地址 |
---|---|---|
Docker | CentOS7 | 192.168.1.1 |
[root@Docker ~]# ls
anaconda-ks.cfg docker-18.06.1-ce.tgz
[root@Docker ~]# tar xf docker-18.06.1-ce.tgz
[root@Docker ~]# ls
anaconda-ks.cfg docker docker-18.06.1-ce.tgz
[root@Docker ~]# cp docker/* /usr/bin/
[root@Docker ~]# dockerd & #启用docker
查看 Docker 版本
[root@localhost ~]# docker version
1)搜索镜像
2)获取镜像
把刚才提供链接里的 centos7,拖到虚拟机中
[root@Docker ~]# ls
anaconda-ks.cfg centos7 docker docker-18.06.1-ce.tgz
[root@Docker ~]#
[root@Docker ~]# docker load < centos7 #load命令加载成镜像
f972d139738d: Loading layer 208.8MB/208.8MB
Loaded image: centos:latest
docker images
[root@localhost ~]# docker images #查看本地所有镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 75835a67d134 2 years ago 200MB
注解:
还可以根据镜像的唯一标识 ID 号,获取镜像详细信息
[root@localhost ~]# docker inspect 75835a67d134
docker tag
原名称:原标签 新名称:新标签只是一个标签,而不是新建一个镜像,只是为了方便:
[root@Docker ~]# docker tag centos:latest centos7:centos7
[root@Docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 75835a67d134 2 years ago 200MB
centos7 centos7 75835a67d134 2 years ago 200MB
再添加一个标签,方便后面实验:
[root@Docker ~]# docker tag centos:latest centos8:centos8
使用 docker rmi
命令可以删除多余镜像
有两种方式:
[root@Docker ~]# docker rmi centos7:centos7
Untagged: centos7:centos7
[root@Docker ~]# docker images
[root@Docker ~]# docker rmi -f 75835a67d134
[root@Docker ~]# docker images
再重新加载一下镜像
[root@Docker ~]# docker load < centos7
[root@Docker ~]# docker save -o test centos:latest
[root@Docker ~]# docker rmi centos:latest
[root@Docker ~]# docker load < test
[root@Docker ~]# docker images
本地存储的镜像越来越多,就需要指定一个专门的地方存放这些镜像—仓库。
docker push
名称:标签容器的创建必须在镜像的基础上,不可以单独创建,是镜像的可写层。
docker create
[选项] 镜像 运行的程序常用选项:
--name
:指定名字创建容器:
[root@Docker ~]# docker create -it --name test centos:latest /bin/bash
[root@Docker ~]# docker ps -a
启用容器:
[root@Docker ~]# docker start test
[root@Docker ~]# docker ps
如果用户想创建并启动容器,可以执行 docker run 命令
docker run
[选项] 镜像 运行的程序[root@Docker ~]# docker run --name zhangsan centos:latest /bin/bash -c ls
但是通过查看容器运行状态,发现,运行完命令就停止了,start 启动也没有用
[root@Docker ~]# docker ps -a
有时候需要在后台持续运行这个容器,就需要添加 -d 选项
[root@localhost ~]# docker run -d --name lisi centos:latest /bin/bash -c "while true;do echo ok;done"
[root@localhost ~]# docker ps -a
docker stop
容器名称或 ID 简写docker rm
容器名称或 ID 简写[root@localhost ~]# docker stop lisi #关闭容器
[root@localhost ~]# docker rm lisi #删除容器
容器的暂停运行
[root@localhost ~]# docker pause test #暂停运行
[root@localhost ~]# docker unpause test #继续运行
[root@Docker ~]# docker exec -it test /bin/bash
[root@7e74f2e6a025 /]# ls
[root@7e74f2e6a025 /]# exit
导出容器:将已经创建好的容器导出为文件,无论这个容器是处于运行状态还是停止状态均可导出。
docker export
容器ID/名称 > 文件名[root@Docker ~]# docker export test > centos-test
[root@Docker ~]# ls -lh centos-test
-rw-r--r-- 1 root root 199M 12月 6 23:04 centos-test
导入容器:将容器文件生成镜像。
[root@Docker ~]# cat centos-test | docker import - centos:test
[root@Docker ~]# docker images
Cgroup 是 Control group 的简写,是 Linux 内核提供的一种限制所使用物理资源的机制,这些资源主要包括 CPU、内存、blkio。
只有在容器运行时才会在系统 CPU 路径下生成目录。
[root@Docker ~]# docker create -it --name aaa centos:latest /bin/bash
[root@Docker ~]# docker start aaa
当多个容器任务运行时,很难计算 CPU 的使用率,为了使容器合理使用 CPU 资源,可以通过 --cpu-shares
选项设置 CPU 按比例共享 CPU 资源,这种方式还可以实现 CPU 使用率的动态调整。
[root@Docker ~]# docker run -itd --name bbb --cpu-shares 1024 centos:latest
在 Docker 中可以使用 --cpuset-cpus
选项来使某些程序独享 CPU 内核,以便提高其处理速度。真实的服务器 CPU 有多个内核;而虚拟机里,默认只有一个,内核0。
[root@Docker ~]# cat /proc/cpuinfo
processor : 0 #这行就是CPU的编号的意思,如果有多个CPU ,会有多个这个段
vendor_id : GenuineIntel
cpu family : 6
model : 158
model name : Intel(R) Core(TM) i5-9300HF CPU @ 2.40GHz
stepping : 13
microcode : 0xc6
cpu MHz : 2400.002
cache size : 8192 KB
---------------------------------
创建一个新的容器 ccc,使该容器上的进程,只可以在内核 0 上运行:
[root@Docker ~]# docker run -itd --name ccc --cpuset-cpus 0 centos:latest
[root@Docker ~]# docker ps | grep ccc
[root@Docker ~]# cat /sys/fs/cgroup/cpuset/docker/根据容器ID号来写/cpuset.cpus
0
在 Docker 中可以通过 docker run -m 命令来限制容器内存使用量,当内存超过了限制的容量,Linux 内核将会尝试收回这些内存,如果仍旧没法控制使用内存在限制范围之内,进程就会被杀死。
创建一个新的容器 ddd ,内存限制为 512 MB:
[root@Docker ~]# docker run -itd -m 512MB --name ddd centos:latest
[root@Docker ~]# docker ps | grep ddd
[root@Docker ~]# cat /sys/fs/cgroup/memory/docker/根据容器ID号来写/memory.limit_in_bytes
如果在一台服务器上进行容器的混合部署,那么会存在同时几个程序写入磁盘数据的情况,这时可以通过--device-write-bps
选项来限制每秒写 io 次数来限制指定设备的写速度。相应的还有--device-read-bps
选项可以限制读取的速度,但这种方式只能限制设备,不能限制分区。
限制新建容器的 /dev/sda 的写入速度为 1MB:
[root@Docker ~]# docker run -itd --name eee --device-write-bps /dev/sda:1M centos:latest
[root@Docker ~]# docker ps | grep eee
[root@Docker ~]# cat/sys/fs/cgroup/blkio/docker/根据容器ID号来写/blkio.throttle.write_bps_device
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/189258.html原文链接:https://javaforall.cn