day79 应用容器Docker安装配置运用

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

一个完整的Docker有以下几个部分组成:
1. Docker Client客户端
2. Docker Daemon守护进程
3. Docker Image镜像
4. Docker Container容器

docker容器

1:什么是容器?

容器就是在隔离的环境中运行的一个进程,如果进程停止,容器就会退出。隔离的环境拥有自己的系统文件,ip地址,主机名等

kvm虚拟机,linux,系统文件

image

程序:代码,命令
进程:正在运行的程序

2:容器和虚拟化的区别

linux容器技术,容器虚拟化和kvm虚拟化的区别
kvm虚拟化: 需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)

linux开机启动流程: bios开机硬件自检 basic input output system 根据bios设置的优先启动项boot 网卡 硬盘 u盘 光驱 读取grub(mbr)引导 2T UEFI(gpt分区) mbr硬盘分区信息,内核加载路径,加载内核 启动第一个进程/sbin/init systemd 系统初始化完成 运行服务(nginx,httpd,mysql) 。。。

容器启动流程: 共用宿主机内核: 第一个进程直接启动服务(nginx,httpd,mysql)

容器:共用宿主机内核,轻量级,损耗少,启动快,性能高,只能运行在linux系统上

虚拟机:需要硬件的支持,需要模拟硬件,需要走开机启动流程,可以运行不同的操作系统

3:容器技术的发展过程:

1):chroot技术,新建一个子系统(拥有自己完整的系统文件)

参考资料:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/ chang root

2):linux容器(lxc) linux container(namespaces 命名空间 隔离环境 及cgroups 进程资源限制)

cgroups 限制一个进程能够使用的资源。cpu,内存,硬盘io

kvm虚拟机:资源限制(1c 1G 20G)

需要使用epel源

yum install epel-release -y

编译epel源配置文件

vi  /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel 7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch/debug
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/SRPMS
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

安装lxc

yum install lxc-* -y yum install libcgroup* -y yum install bridge-utils.x86_64 -y

桥接网卡

[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
echo 'TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=virbr0' >/etc/sysconfig/network-scripts/ifcfg-eth0
[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-virbr0 
echo 'TYPE=Bridge
BOOTPROTO=static
NAME=virbr0
DEVICE=virbr0
ONBOOT=yes
IPADDR=10.0.0.11
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
DNS1=180.76.76.76' >/etc/sysconfig/network-scripts/ifcfg-virbr0

启动cgroup

systemctl start cgconfig.service

启动lxc

systemctl start lxc.service

创建lxc容器

方法1: lxc-create -t download -n centos6 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images -d centos -r 6 -a amd64 
方法2: lxc-create -t centos -n test

为lxc容器设置root密码:

[root@controller ~]# chroot /var/lib/lxc/test/rootfs passwd Changing password for user root. New password: BAD PASSWORD: it is too simplistic/systematic BAD PASSWORD: is too simple Retype new password: passwd: all authentication tokens updated successfully.

为容器指定ip和网关

vi /var/lib/lxc/centos7/config
lxc.network.name = eth0
lxc.network.ipv4 = 10.0.0.111/24
lxc.network.ipv4.gateway = 10.0.0.254

启动容器

lxc-start -n centos7

3):docker容器

centos7.6 2G 10.0.0.11 docker01 host解析
centos7.6 2G 10.0.0.12 docker02 host解析

Docker是通过进程虚拟化技术(namespaces及cgroups cpu、内存、磁盘io等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。 namespace 资源隔离 cgroups 进程的资源限制 kvm 虚拟磁盘文件,资源隔离 kvm 资源限制,--cpus --memory

docker 初期把lxc二次开发,libcontainer

4:docker的安装

10.0.0.11:修改主机名和host解析

rm -fr /etc/yum.repos.d/local.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo

yum install docker-ce -y

5:docker的主要组成部分

docker是传统的CS架构分为docker client和docker server,像mysql一样

命令:docker version

[root@controller ~]# docker version Client: Version: 17.12.0-ce API version: 1.35 Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:10:14 2017 OS/Arch: linux/amd64

Server: Engine: Version: 17.12.0-ce API version: 1.35 (minimum version 1.12) Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:12:46 2017 OS/Arch: linux/amd64 Experimental: false

docker主要组件有:镜像、容器、仓库, 网络,存储

启动容器必须需要一个镜像,仓库存储镜像 容器---镜像---仓库

6:启动第一个容器

docker的主要目标是"Build,Ship and Run any App,Angwhere",构建,运输,处处运行 部署服务,环境问题

一次构建,处处运行

docker是一种软件的打包技术

docker初次体验:
安装Nginx步骤:
官网下载Nginx源码包wget
tar 创建Nginx用户
编译安装 ./config.... 修改配置文件, 启动

配置docker镜像加速

vi  /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}   

docker run -d -p 80:80 nginx
run(创建并启动一个容器)
-d 放在后台
-p 端口映射
nginx docker镜像的名字

7:docker的镜像管理

搜索镜像​ docker search 选镜像的建议:
1,优先考虑官方
2,stars数量多

官方镜像仓库地址:hub.docker.com

获取镜像​ docker pull(push)​
镜像加速器:
阿里云加速器,
daocloud加速器,
中科大加速器,
Docker 中国官方镜像加速:https://registry.docker-cn.com​官方pull docker pull centos:6.8(没有指定版本,默认会下载最新版)
私有仓库pull docker pull daocloud.io/huangzhichong/alpine-cn:latest

配置docker镜像加速
vi /etc/docker/daemon.json { "registry-mirrors": ["[https://registry.docker-cn.com](https://registry.docker-cn.com)"] }​

查看镜像列表​

docker images or docker image ls 

删除镜像​ docker rmi

例子:docker image rm centos:latest 

导出镜像​ docker save

例子:docker image save centos -o docker-centos7.4.tar.gz 

导入镜像​ docker load

例子:docker image load -i docker-centos7.4.tar.gz​

8:docker的容器管理

docker run -d -p 80:80 nginx:latest  
run(创建并运行一个容器)
-d 放在后台
-p 端口映射
-v  源地址(宿主机):目标地址(容器)
nginx docker镜像的名字
docker run -it --name centos6 centos:6.9 /bin/bash
-it   分配交互式的终端interactive tty
--name 指定容器的名字
/bin/sh覆盖容器的初始命令
运行容器
docker run image_name   
docker run ==== docker create  + docker start
启动容器
docker start
停止容器
docker stop CONTAINER_ID
杀死容器
docker kill container_name
查看容器列表
docker ps(-a -l  -q)

进入正在运行的容器(目的,调试,排错)

docker exec  (会分配一个新的终端tty)
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec -it  容器id或容器名字 /bin/bash(/bin/sh)   
docker attach(使用同一个终端)  偷偷离开的快捷键ctrl+p,ctrl+q
docker attach [OPTIONS] CONTAINER
nsenter(安装yum install -y util-linux 弃用)
​删除容器
docker rm
批量删除容器
docker rm -f `docker ps -a -q`

总结:docker容器内的第一个进程(初始命令)必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!
业务在容器中运行:
初始命令一定要夯住并且启动服务

nginx -g 'daemon off;'
/usr/sbin/zabbix_agentd -f -c /etc/zabbix/zabbix_agentd.conf

9:docker容器的网络访问(端口映射)

指定映射(docker 会自动添加一条iptables规则来实现端口映射)​ -p hostPort:containerPort​ -p ip:hostPort:containerPort 多个容器都想使用80端口​ -p ip::containerPort(随机端口)​ -p hostPort:containerPort/udp​ -p 10.0.0.100::53/udp 使用宿主机的10.0.0.100这个ip地址的随机端口的udp协议映射容器的udp53端口​ -p 81:80 –p 443:443 可以指定多个-p

随机映射​ docker run -P (随机端口)

通过iptables来实现的端口映射

10:docker的数据卷管理

nginx 站点 /usr/share/nginx/html

-v /opt/xiaoniao:/usr/share/nginx/html

持久化 数据卷

(文件或目录)​ -v 卷名:/data (第一次卷是空,会容器的数据复制到卷中,如果卷里面有数据,把卷数据的挂载到容器中)​ -v src
(宿主机的目录):dst(容器的目录) 数据卷容器​ --volumes-from(跟某一个已经存在的容器挂载相同的卷)​
基于nginx启动一个容器,监听80和81,访问80,出现nginx默认欢迎首页,访问81,出现小鸟。
-p 80:80 -p 81:81 -v xxx:xxx -v xxx:xxxx 基于nginx多端口的多站点。

11:手动将容器保存为镜像

docker commit 容器id或者容器的名字 新的镜像名字[:版本号可选]

1):基于容器制作镜像

docker run -it -p 80:80 centos:6.9
####
echo "192.168.37.200 mirrors.aliyun.com" >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum install nginx -y
yum install unzip -y
cd /usr/share/nginx/html/
rm -fr *
curl -o yiliao.zip http://192.168.37.200/191127/everyxiaoqiang-yiliao-master.zip
unzip yiliao.zip
mv yiliao/* .
####

2)把安装好服务的容器,提交成镜像

docker commit 9f366f3988cd yiliao:v1

3)测试镜像功能是否可用

docker run -d -p 81:80 yiliao:v1 nginx -g 'daemon off;'

手动制作的镜像,传输时间长 镜像初始命令
制作一个kodexplorer网盘docker镜像。nginx + php-fpm(httpd + php)

内容总结

1.什么是容器

容器就是在隔离的环境中运行的一个进程.如果进程结束,容器退出. 这个隔离的环境,有自己的系统文件,ip地址,主机名,进程管理

2:容器和虚拟机的区别

容器: 不依赖硬件cpu支持共用宿主机内核,轻量级,启动快,性能高,损坏少
虚拟化: 依赖硬件cpu支持,拥有自己的内核,

docker用的多: 节省成本

3:docker-ce的安装

centos base源 docker engine 1.13
docker.repo
yum install docker-ce 17.03 1903

4:docker主要内容

容器 镜像 仓库 网络 存储 监控

5:docker镜像常用命令

docker image:
docker image ls 查看镜像列表
docker image rm 删除镜像
docker image load 导入镜像
docker image save 导出镜像
docker image pull 下载镜像(拉取镜像)
docker image push 上传镜像

6:docker容器的常用命令

docker run 创建并启动容器
docker kill 强制关闭容器
docker rm 删除容器
docker ps 查看容器列表
docker start 启动容器
docker stop 关闭容器
docker restart 重启容器
docker exec 进入正在运行的容器(分配一个新的端口)(排查错误)
docker attach 进入正在运行的容器(同一个终端)
docker logs 查看容器的终端输出(排查错误)

7:docker端口映射

docker run -p
宿主机端口:容器端口 最常见
ip1:宿主机端口:容器端口 ip2:宿主机端口:容器端口
ip1::容器端口 随机端口
ip1::容器端口/udp

-p 宿主机端口1:容器端口1 -p 宿主机端口2:容器端口2

docker run -P 自动随机端口映射

8:docker数据卷

docker run -v 宿主机目录:容器目录 -v 宿主机文件:容器文件

9:手动制作镜像

a:启动一个基础容器,在容器安装自己的服务
b:把安装好服务的容器提交为镜像
c:测试镜像是否可用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339