Docker概述:
1. 容器技术:
容器技术已经成为程序封装和交付的核心技术
容器技术是由以下几个核心技术组成:
核心技术:(资源管理)Cgroups、(进程隔离)NameSpace、(SeLinux安全)
#由于是在物理机上实施隔离,启动一个容器就像启动一个进程一样快速;
2 .Docker技术
|docker| 与传统虚拟化技术相比较 |
|-缺点-| 隔离性差、SELinux安全问题《基于Linux内核》、容器监控和排查错误难度大;只能是一种操作系统--| 传统虚拟机可以使用多个操作系统
(宿主机操作系统单一)
| 优点| 共享公共库和程序;相比传统的虚拟化技术不需要安装操作系统;更加简洁高效|
docker就像是集装箱
docker部署
环境: 4台华为云主机 #####要求四台可以访问外网;RHEL7.0版本以上、低版本bug突出;物理机64位操作系统。
2核 1G
192.168.0.100 repo(yum源主机)
192.168.0.20 (docker1)
192.168.0.21 (docker2)
192.168.0.22 registry(容器仓库)
##### *****当ifconfig 查看网卡时出现了docker0 或者查看docker版本信息时,说明docker安装成功*****
**[root@nb01 ~]# docker version #查看docker版本信息**
安装:
**[root@nb-0002 ~]# yum -y install docker** #安装docker
***[root@nb-0002 ~]# systemctl start docker #启动docker服务
[root@nb-0002 ~]# systemctl enable docker** #设置docker服务开机自启**
容器与镜像的关系:
在docker中容器是基于镜像启动的;
镜像是容器启动的核心《也就是容器的模板》 ###一个镜像可以制作多个容器并行使用
镜像采用分层设计;《最大层数是255》
镜像采用快照的**COW技术**,确保底层数据不丢失。
*COW技术(拷贝写技术) copu on write*
镜像:
1.10 [root@nb01 ~]# docker images #查看镜像列表
REPOSITORY TAG IMAGE ID CREATED SIZE #显示镜像是空
1.9* [root@nb01 ~]# docker search busybox #查找busybox镜像*
INDEX NAME (镜像地址) DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/busybox Busybox base image 1828 [OK] #ok代表官方发布的镜像
1.8 [root@nb01 ~]# docker pull docker.io/busybox #下载镜像
1.7 # # [root@nb01 ~]# docker save docker.io/busybox:latest -o busybox.tar#使用tar备份镜像****
[root@nb01 ~]# ls** #查看备份好的镜像**
busybox.tar****
**## [root@nb01 ~]# scp busybox.tar 192.168.0.21:./ #将备份镜像拷贝给21主机
1.6**# [root@nb02 ~]# docker load -i busybox.tar #使用tar恢复镜像**
镜像命令:
1.1 [root@nb01 ~]# docker inspect docker.io/centos:latest #查看镜像docker.io/centos:lates的底层信息
“Env”: [
“PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin” #容器或者镜像的环境变量;也就是要在镜像或者容器的启动后的
],
“Cmd”: [ #容器或者镜像默认启动命令
"/bin/sh",
“-c”,
“#(nop) “,
“CMD [**”/bin/bash**”]”
],
1.2 [root@nb01 ~]# docker history docker.io/centos:latest #查看镜像的制作历史
IMAGE CREATED CREATED BY SIZE COMMENT
76d6bc25b8a5 17 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B #外层;指定默认启动命令
17 months ago /bin/sh -c #(nop) LABEL org.label-schema… 0 B #中层
17 months ago /bin/sh -c #(nop) ADD file:8f4b3be0c1427b1… 200 MB #底层;添加了一个操作系统文件;该镜像一共三层
1.3 [root@nb02 ~]# docker rmi docker.io/busybox:latest #删除本地镜像
####只有容器被删除后才可以删除镜像;
######原因是:镜像是容器的底层;就像拆楼房一样,只有把上边的拆除后才可以拆除底层的
1.4 [root@nb01 ~]# docker tag docker.io/busybox:latest busybox:latest #给镜像修改名称和标签
[root@nb01 ~]# docker images #可以看到改名后的镜像是busybox;但是他们的标签和ID是没有变化的;我们可以删除原镜像docker.io/busybox :latest;使得我们调用时候方便些
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 83aa35aa1c79 2 weeks ago 1.22 MB
docker.io/busybox latest 83aa35aa1c79 2 weeks ago 1.22 MB
1.5 [root@nb02 ~]# docker push docker.io/busybox:latest #上传镜像
容器:指定容器ID对容器进行操作;所以容器ID就非常重要。
容器命令:
2.1 启动命令:
docker run 参数 镜像名称 :标签 镜像里默认的启动命令 #容器启动命令格式一
run = 创建+启动+连接
docker run -i #交互式 -t # 终端 -d #后台
[root@nb01 ~]# docker run -it docker.io/ubuntu:latest /bin/bash #启动容器
########当我们不知道镜像的启动命令是可以不写启动命令,但是我们要明白那些服务是可交互式的那些不是;
docker run 参数 镜像名称:标签 #容器启动命令格式二
####可交互式服务是没有配置服务的例如: Centos / Ubuntu/busybox ; 必须放置到前台启动;
docker run -it 服务:标签
###[root@nb02 ~]# docker run -it docker.io/centos:latest #服务起来了
[root@339c9c5dac24 /]# #进入到容器里了
######非交互式服务是有配置服务的例如:Nginx 、Redis、Tomcat、;必须放置在后台启动;
docker run -itd 服务:标签
###[root@nb02 ~]# docker run -itd docker.io/redis #服务起来了
0376eceaeb792b692df92f9168e219381e8dc0ba42bcea2506487c6f87ac2901 #返回ID退出容器
##测试是否启动 [root@nb02 ~]# ps -ef | grep redis
polkitd 27870 27857 0 Mar30 pts/0 00:00:00 redis-server *:6379
root 27911 27478 0 00:00 pts/1 00:00:00 grep --color=auto redis
2.2管理命令
2.2.1#docker ps #查看容器列表
##docker ps -a #列出所有启动容器列表
###docker ps -q #列出已启动容器ID列表
####docker ps -qa #列出所有容器ID列表
2.2.2
docker这个命令支持命令重载(前一个命令的结果可以给另一个命令做参数)
[root@nb01 ~]# docker rm $(docker stop 75bc) #关闭容器然后删除
75bc
[root@nb01 ~]# docker ps -aq #检查容器是否存在,已经没了
8a3187c1d2c4
26e03022b1eb
aa459463a45f
2.2.3 [root@nb01 ~]# docker inspect 311b #查看容器底层信息
2.2.4 [root@nb01 ~]# docker stop 311b #关闭容器
2.2.5[root@nb01 ~]# docker start 311b #开启容器
2.2.6[root@nb01 ~]# docker restart 311b #重启容器
2.2.7[root@nb01 ~]# docker rm 311b #删除容器
2.2.8[root@nb01 ~]# docker top 311b #查看容器进程列表<常用于分析容器异常使用>
2.2.9docker exec -it 容器ID 启动命令 #用新进程进入容器
2.2.10 docker attach 容器ID 启动命令 #用上帝进程进入容器
###使用attach连接容器,exit退出后,容器将会停止,因为退出时相当于退出了上帝进程,使用快捷键Ctrl+p+q保持容器运行并退出。使用exec连接,退出后容器继续运行。
仓库: