什么是容器?
现实中的容器用来装东西的
Linux里面的容器用来干嘛?
Linux中的容器是装应用的
容器就是将软件打包成标准单元,用于开发、交付和部署
容器技术已经成为应用程序封装和交付的核心技术
容器技术的核心有以下几个内核技术组成:
Cgroups(Control Groups)资源管理
SELinux 安全
NameSpace--命名空间
容器技术的优缺点
优点:
相比于传统的虚拟化技术,容器更加简洁高效
传统的虚拟机需要给每个VM安装操作系统
容器使用的共享公共库和程序
缺点:
容器的隔离性没有虚拟化强
共用Linux内核,安全性有先天缺陷
传统虚拟化VS容器技术(图)
Docker与容器
*docker和容器的关系
Docker是完整的一套容器管理系统
Docker提供一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术
DOCKER安装:
配置系统环境:
1:需要64位操作系统
2:至少rhel6.5以上的版本,建议rhel7
3:关闭防火墙(不是必须)
由于docker软件会自动管理防火墙
配置YUM仓库:
系统软件,位于centos-1804源中
扩展依赖包,位于extras源中
docker软件,位于docker目录中
安装前准备:
1、禁用 selinux [SELINUX=disabled] 2、卸载防火墙 [yum -y remove firewalld-*] 3、docker软件安装包在 云盘kubernetesdocker 目录下,将 docker 目录上传到跳板机 4、准备 2 台 2cpu,2G内存的云主机 主机名 IP地址 最低配置 docker-0001 192.168.1.31 2CPU,2G内存 docker-0002 192.168.1.32 2CPU,2G内存 跳板机yum源添加docker软件 [root@ecs-proxy ~]# cp -a docker /var/ftp/localrepo/ [root@ecs-proxy ~]# cd /var/ftp/localrepo/ [root@ecs-proxy localrepo]# createrepo --update . 在 node 节点验证软件包 [root@docker-0001 ~]# yum makecache [root@docker-0001 ~]# yum list docker-ce* 以下操作所有 node 节点都需要执行 开启路由转发 [root@docker-0001 ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 [root@docker-0001 ~]# sysctl -p [root@docker-0001 ~]# yum install -y docker-ce [root@docker-0001 ~]# systemctl enable --now docker [root@docker-0001 ~]# ifconfig # 验证,能看见 docker0 [root@docker-0001 ~]# docker version # 验证,没有报错
导入 centos nginx redis ubuntu 四个镜像到 node 节点(使用 lftp 或 scp 均可)
镜像素材在云盘的 kubernetes/docker-images/ 目录下
docker run 启动一个新的容器
-i 交互式,-t 终端, -d 在后台启动
# 在后台启动容器 [root@docker-0001 ~]# docker run -itd nginx:latest 9cae0af944d81770c90fdeacf7a632aaa749b0c9fbc0f4cb104e1d1257579e5e # 在前台启动容器 [root@docker-0001 ~]# docker run -it --name myos centos:latest /bin/bash [root@de46e6254efd /]# ctrl+p, ctrl+q # 使用快捷键退出,保证容器不关闭 # 查看容器 [root@docker-0001 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED de46e6254efd centos:latest "/bin/bash" 2 minutes ago 9cae0af944d8 nginx:latest "nginx -g 'daemon of…" 7 minutes ago # 只查看id [root@docker-0001 ~]# docker ps -q # 查看所有容器,包含未启动的 [root@docker-0001 ~]# docker ps -a # 进入容器的默认进程 [root@docker-0001 ~]# docker attach de46e6254efd [root@de46e6254efd /]# exit # 退出后容器会关闭 # 启动、停止、重启容器 [root@docker-0001 ~]# docker start de46e6254efd [root@docker-0001 ~]# docker stop 9cae0af944d8 [root@docker-0001 ~]# docker restart 9cae0af944d8 # 查看容器详细信息 [root@docker-0001 ~]# docker inspect 9cae0af944d8 ... ... "IPAddress": "172.17.0.2", ... ... [root@docker-0001 ~]# curl http://172.17.0.2/ # 进入容器,查看路径 [root@docker-0001 ~]# docker exec -it 9cae0af944d8 /bin/bash root@9cae0af944d8:/# cat /etc/nginx/conf.d/default.conf ... ... root /usr/share/nginx/html;
# 从容器内拷贝首页文件到宿主机,修改后拷贝回容器内
[root@docker-0001 ~]# docker cp 9cae0af944d8:/usr/share/nginx/html/index.html ./index.html
[root@docker-0001 ~]# vim index.html
Hello Tedu
Hello Tedu
Hello Tedu
[root@docker-0001 ~]# docker cp ./index.html 9cae0af944d8:/usr/share/nginx/html/index.html
[root@docker-0001 ~]# curl http://172.17.0.2/
# 删除容器
[root@docker-0001 ~]# docker rm -f de46e6254efd
# 删除所有容器
[root@docker-0001 ~]# docker rm -f $(docker ps -aq)
容器内部署应用
[root@docker-0001 ~]# docker rm -f $(docker ps -aq) [root@docker-0001 ~]# docker run -it --name myapache centos:latest [root@a7f9d0c3e3e2 /]# rm -f /etc/yum.repos.d/*.repo #---------------------不要退出这个终端,在另一个终端拷贝 yum 配置文件到容器-------------------- [root@docker-0001 ~]# docker cp /etc/yum.repos.d/CentOS-Base.repo myapache:/etc/yum.repos.d/ #------------------------回到创建容器的终端继续执行命令-------------------------------------- [root@a7f9d0c3e3e2 /]# yum install -y net-tools httpd [root@a7f9d0c3e3e2 /]# echo Hello world >/var/www/html/index.html [root@a7f9d0c3e3e2 /]# export LANG=C [root@a7f9d0c3e3e2 /]# ifconfig [root@a7f9d0c3e3e2 /]# /usr/sbin/httpd -DFOREGROUND # 启动服务以后 ctrl-p, ctrl-q 退出 [root@docker-0001 ~]# curl http://172.17.0.2/ Hello world