什么是容器?
- 容器技术是一种应用程序封装和交付的核心技术
- 容器技术的核心由以下几个内核技术组成:
(1)Cgroups(Control Groups):资源管理
(2)NameSpace:进程隔离
a. 主机名称隔离
b. 网络隔离
c. 文件系统隔离
d. 用户隔离
e. 进程隔离
f. 进程信号向量隔离
(3)SeLinux安全 - 由于是在物理机上实施隔离,启动一个容器,可以像启动一个进程一样快速
什么是Docker
- Docker是完整的一套容器管理系统
- Docker提供了一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术
Docker与传统虚拟化方式:
两者的不同之处如下面2张图所示,传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190528162858424.png?x-oss-process=image## 什么是容器?
- 容器技术是一种应用程序封装和交付的核心技术
- 容器技术的核心由以下几个内核技术组成:
(1)Cgroups(Control Groups):资源管理
(2)NameSpace:进程隔离
a. 主机名称隔离
b. 网络隔离
c. 文件系统隔离
d. 用户隔离
e. 进程隔离
f. 进程信号向量隔离
(3)SeLinux安全 - 由于是在物理机上实施隔离,启动一个容器,可以像启动一个进程一样快速
什么是Docker
- Docker是完整的一套容器管理系统
- Docker提供了一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术
Docker与传统虚拟化方式:
两者的不同之处如下面2张图所示,传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
Docker对比传统虚拟机总结
Docker优点
- 更高效利用系统资源
- 更快速的启动时间
- 一致的运行环境
- 持续交付和部署
- 更轻松的应用迁移
- 更轻松的维护和扩展
Docker缺点
- 容器隔离性没有虚拟化强
- 共用Linux内核,安全性有先天缺陷
- SELinux难以驾驭
- 监控容器和容器排错是挑战
Docker部署
准备两台虚拟机(docker01:192.168.8.11,docker02:192.168.8.12),能访问外网
1、安装前准备
[root@docker01 ~]# vim /etc/hosts //以docker01为例。下同
#添加以下两行
192.168.8.11 docker01
192.168.8.12 docker02
[root@docker01 ~]# vim /etc/yum.repos.d/dvd.repo
Centos]
name=Centos7.4
baseurl=ftp://192.168.8.254/rhel7/
enabled=1
gpgcheck=0
[Docker]
name=Centos7.4
baseurl=ftp://192.168.8.254/docker/
enabled=1
gpgcheck=0
2、安装并启动docker
[root@docker01 ~]# yum list |grep docker
docker-engine.x86_64 1.12.1-1.el7.centos @Docker
docker-engine-selinux.noarch 1.12.1-1.el7.centos @Docker
[root@docker01 ~]# yum -y install docker-engine
[root@docker01 ~]# systemctl start docker
[root@docker01 ~]# systemctl enable docker
[root@docker01 ~]# ifconfig docker0 //docker启动后会生成一个虚拟交换机docker0
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
镜像
- 在Docker中容器是基于镜像启动的
- 镜像是启动容器的核心
- 镜像采用分层技术
- 使用快照的cow技术,确保底层数据不丢失
镜像常用命令
[root@docker01 ~]# docker images //查看镜像
[root@docker01 ~]# docker history busybox //查看镜像制作历史(层次结构)
[root@docker01 ~]# docker inspect centos:latest //查看镜像底层信息
[root@docker01 ~]# docker pull centos //下载镜像
[root@docker01 ~]# docker push centos //上传镜像
[root@docker01 ~]# docker save busybox:latest > busybox.tar //镜像另存为tar包
[root@docker02 ~]# docker load < busybox.tar //使用tar包导入镜像
[root@docker01 ~]# docker search busybox //搜索镜像
[root@docker01 ~]# docker tag centos:latest centos:lx //修改镜像名称和标签
[root@docker01 ~]# docker rmi centos:lx //删除本地镜像
镜像命令实践
############################################################################
[root@docker01 ~]# man docker search //查看docker相应命令帮助文件
############################################################################
[root@docker01 ~]# docker images //查看docker镜像,初始镜像为空
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@docker01 ~]# docker search mysql //搜索mysql网络镜像
NAME DESCRIPTION STARS OFFICIAL AUTOMATED //OFFICIAL值为ok时表示为官方镜像
mysql MySQL is a widely used, open-source relati... 8196 [OK]
mariadb MariaDB is a community-developed fork of M... 2791 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Crea... 610 [OK]
percona Percona Server is a fork of the MySQL rela... 434 [OK]
centurylink/mysql Image containing mysql. Optimized to be li... 60 [OK]
[root@docker01 ~]# docker search busybox //搜索busybox网络镜像
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
busybox Busybox base image. 1589 [OK]
progrium/busybox 69 [OK]
radial/busyboxplus Full-chain, Internet enabled, busybox made... 24 [OK]
[root@docker01 ~]# docker pull busybox //下载busybox网络镜像
Using default tag: latest
latest: Pulling from library/busybox
53071b97a884: Pull complete
Digest: sha256:4b6ad3a68d34da29bf7c8ccb5d355ba8b4babcad1f99798204e7abb43e54ee3d
Status: Downloaded newer image for busybox:latest
[root@docker01 ~]# docker images //查看下载镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 64f5d945efcc 2 weeks ago 1.199 MB
[root@docker01 ~]# ls
[root@docker01 ~]# docker save busybox:latest > busybox.tar //备份docker镜像
[root@docker01 ~]# ls
busybox.tar
[root@docker01 ~]# scp busybox.tar 192.168.8.12:/root
[root@docker02 ~]# docker load < busybox.tar //恢复镜像
d1156b98822d: Loading layer [==================================================>] 1.416 MB/1.416 MB
Loaded image: busybox:latest
[root@docker02 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 64f5d945efcc 2 weeks ago 1.199 MB
[root@docker01 ~]# cd docker_images/
[root@docker01 docker_images]# ls
centos.tar nginx.tar redis.tar registry.tar ubuntu.tar
[root@docker01 docker_images]# for i in *;do docker load -i ${i};done //导入已下载镜像,docker02主机同样操作
[root@docker01 docker_images]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 64f5d945efcc 2 weeks ago 1.199 MB
ubuntu latest 452a96d81c30 13 months ago 79.62 MB
centos latest e934aafc2206 13 months ago 198.6 MB
registry latest d1fd7d86a825 16 months ago 33.26 MB
nginx latest a5311a310510 2 years ago 181.4 MB
redis latest 1aa84b1b434e 2 years ago 182.8 MB
容器常用命令
[root@docker01 ~]# docker run -itd nginx:latest //运行容器,-itd(选项分别表示交互式、运行后开启终端、后台运行)
[root@docker01 ~]# docker run -it centos //运行容器后进入容器
[root@f26819924bcf /]# exit //退出容器,容器自动关闭(注:ctrl+p+q可以实现退出时不关闭容器)
[root@docker01 ~]# docker attach 4fcdae128d1e //进入运行中的容器(前提是容器默认启动命令支持交互如/bin/bash,exit时关闭容器,常用容器排错)
[root@docker01 ~]# docker exec -it 4888e01da6b1 /bin/bash //进入运行中的容器(exit不会关闭容器,常用于容器维护)
[root@docker01 ~]# docker ps //查看启动容器
[root@docker01 ~]# docker ps -a //查看启动过的容器
[root@docker01 ~]# docker ps -aq //查看启动过的容器ID
[root@docker01 ~]# docker stop 1cf8349b9de0 //关闭容器
[root@docker01 ~]# docker start 1cf8349b9de0 //启动容器
[root@docker01 ~]# docker restart 1cf8349b9de0 //重启容器
[root@docker01 ~]# docker inspect 1cf8349b9de0 //查看容器底层信息
[root@docker01 ~]# docker top 1cf8349b9de0 //查看容器进程列表
[root@docker01 ~]# docker rm 1cf8349b9de0 //删除容器(需在关闭容器后执行,否则会报错)
[root@docker01 ~]# docker rm $(docker stop eec00f87a111) //删除正在运行的容器
[root@docker01 ~]# for i in `docker ps -aq`; do docker rm $i;done //批量删除启动过的容器
[root@docker01 ~]# docker rm $(docker ps -aq) //批量删除启动过的容器
启动容器
[root@docker01 ~]# docker run -it centos:latest /bin/bash //启动容器centos
[root@eac031d4b130 /]# hostname //启动容器后主机名隔离
eac031d4b130
[root@eac031d4b130 yum.repos.d]# ifconfig //容器中无config命令,配置yum安装
bash: ifconfig: command not found
[root@eac031d4b130 /]# cd /etc/yum.repos.d/
[root@eac031d4b130 yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo CentOS-fasttrack.repo
CentOS-CR.repo CentOS-Media.repo CentOS-Vault.repo
[root@eac031d4b130 yum.repos.d]# rm -rf *
[root@eac031d4b130 yum.repos.d]# vi /etc/yum.repos.d/dvd.repo
[Centos]
name=Centos7.4
baseurl=ftp://192.168.8.254/rhel7/
enabled=1
gpgcheck=0
[root@eac031d4b130 yum.repos.d]# yum provides ifconfig //查看ifconfig命令安装包
Loaded plugins: fastestmirror, ovl
Centos | 4.1 kB 00:00:00
(1/2): Centos/group_gz | 137 kB 00:00:00
(2/2): Centos/primary_db | 4.0 MB 00:00:00
Determining fastest mirrors
Centos/filelists_db | 3.4 MB 00:00:00
net-tools-2.0-0.22.20131004git.el7.x86_64 : Basic networking tools
Repo : Centos
Matched from:
Filename : /sbin