你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker特性:
构建标准化的运行环境,现有的方案大多是在一个baseOS上运行一套puppet/chef,或者一个image文件,其缺点是前者需要base OS许多前提条件,后者几乎不可以修改(因为copy on write 的文件格式在运行时rootfs是read only的)。并且后者文件体积大,环境管理和版本控制本身也是一个问题。
PaaS环境是不言而喻的,其设计之初和dotcloud的案例都是将其作为PaaS产品的环境基础。因为其标准化构建方法(buildfile)和良好的REST API,自动化测试和持续集成/部署能够很好的集成进来。因为LXC轻量级的特点,其启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,能够在单机环境下与KVM之类的虚拟化方案相比能够更加快速和占用更少资源。
Docker并不是全能的,设计之初也不是KVM之类虚拟化手段的替代品,简单总结几点:
Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用。
LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的。
隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库。
网络管理相对简单,主要是基于namespace隔离。cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)。Docker对disk的管理比较有限。container随着用户进程的停止而销毁,container中的log等用户数据不便收集。
Docker五大优势:持续集成、版本控制、可移植性、隔离性和安全性
安装操作系统CentOS7
修改IP地址
用WINSCO连接
# mkdir -r /root/docker/Packages
(将C盘KVM文件夹里面的nginx_docker依赖包文件夹内的所有文件都复制到到/root/docker/Packages中)
配置yum源(KVM文档)
安装VSFTP服务
安装vsftpd
yum install –y vsftp
配置vsftpd
vi /etc/vsftpd/vsftpd.conf
添加一行 anon_root=/media/CentOS(配置yum源挂载光盘的目录) 匿名用户访问目录,这里需要为软件仓库所在目录
添加一行 pasv_enable=YES 被动模式
修改FTP匿名用户目录权限
chmod -R 755 /root/
启动vsftpd服务
systemctl start vsftpd
systemctl enable vsftpd
关闭防火墙:
临时关闭防火墙
setenforce 0
Systemctl stop firewalld
永久关闭防火墙
vi /etc/selinux/config
SELINUX=disabled
这里测试windows主机是否能够访问Ftp服务
mkdir -r /root/docker/Packages(将以上所需安装包放到/root/docker/Packages中)
vi /etc/yum.repos.d/docker.repo
[docker]
name=docker
baseurl=file:///root/docker
enabled=1
gpgcheck=0
createrepo /root/docker/
docker库创建完成
yum -y install docker-ce
systemctl start docker.service
systemctl enable docker.service
可以使用ifconfig命令查看是否已经出现docker的网卡
ifconfig
docker load < centos7.tar
docker run -it 4cbf48630b46 bash //启动容器 i:交互 t:分配终端
4cbf48630b46 根据’docker images’命令查看)
进入容器后使用可’exit’命令退出
container id查看方法
docker ps -l4
使用exec进入容器
docker exec -it [container id] bash
例如:# docker exec -it 056201367c1d bash
使用attach从后台切换到前台,再切换回后台需要先ctrl+p再ctrl+q
docker attach [container id]
例如:# docker attach 056201367c1d
查看docker运行日志
docker logs [container id]
停止容器
docker stop [container id]
启动后台容器
docker start [container id]
杀死进程
docker kill [container id]
删除所有未运行的容器
docker ps -a -q | xargs docker rm
批量停止容器
docker ps | awk '{print $1}' | grep -v CONTAINER | while read line;do docker stop $line; done
批量开启容器
docker ps | awk '{print $1}' | grep -v CONTAINER | while read line;do docker start $line; done
批量删除容器
for line in `docker ps -a | awk '{print $1}' | grep -v CONTAINER`;do docker kill $line;docker rm $line;done
因笔者所处环境为无网络环境,所以笔者使用的是局域网yum源
首先需要创建一个使用局域网yum源的docker镜像
mkdir -pv /docker/yum-wlan
cd /docker/yum-wlan
为编写dockerfile的准备工作
vi /docker/yum-wlan /wlan.repo
vi /docker/yum-wlan/yum-wlan-conf.sh //编写配置局域网yum源脚本
编写dockerfile文件
vim /docker/yum-wlan/dockerfile
cd /docker/yum-wlan
docker build -t yum-wlan . //注意最后有个点,指使用当前路径的dockerfile通过’docker images’命令查看刚刚生成的 yum-wlan 镜像
以刚刚制作的局域网yum源镜像的基础上创建nginx的docker容器
mkdir -pv /docker/nginx
cd /docker/nginx/
为编写dockerfile的准备工作
vi /docker/nginx/nginx-install.sh //编写安装nginx的脚本
vim /docker/nginx/dockerfile
容器启动时执行的那条入口命令一旦结束了,容器也会结束。如果启动命令单纯是以后台守护(daemon)模式启动nginx,那么启动命令会立即结束,容器也会立即结束。
其实只要在任何命令之后加一句 && cat,就会让这条命令卡在前台而不会结束,不是非得用daemon off
FROM #代表自定义的镜像基于centos7镜像的ID 4cbf48630b46,通过docker images命令获取
MAINTAINER #代表维护者信息,姓名与邮箱
COPY #把宿主系统的文件拷贝到镜像里面
RUN #在镜像里面运行命令
#安装完后记录删除源码包等,预防镜像过大 可以在分好后加一个 \rm -rf /usr/local/src/* 但是也就不能再次编译了。谨慎使用吧
使用dockerfile构建nginx镜像
cd /docker/nginx
docker build -t nginx_docker . //注意最后有个点
启动容器进行测试,由于nginx是前台永久运行的,可直接启动nginx进行测试
docker run -d nginx_docker bash -c '/usr/local/nginx/sbin/nginx'
-d:后台运行指定镜像
-c:执行指定命令,示例为启动nginx服务