待完善!!
1. 简介
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
2. 架构
3. 应用场景
Web 应用的自动化打包和发布。
自动化测试和持续集成、发布。
在服务型环境中部署和调整数据库或其他的后台应用。
从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
4. 优点
4.1 简化程序:
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
4.2 避免选择恐惧症:
如果你有选择恐惧症,还是资深患者。那么你可以使用 Docker 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
4.3 节省开支:
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
5. 相关概念
5.1 镜像(Image)
像软件安装包。我们可以把镜像拉(pull)下来,增加我们的更改,然后发布(push)成新的镜像,别人也可以下载我们发布的镜像,然后继续更改,继续发布;
5.2 容器(Container)
镜像安装后运行的实例;同一个镜像可以在同一台服务器上安装成多个容器,同一个镜像可以同时装在多个不同的服务器上。
5.3 镜像layer
对于一个镜像的多次修改push就会有多个layer,一个镜像通常由多个layer组成。
6. CentOS Docker 安装
6.1 uname -r 查看当前的内核版本
[zhuph@zhuph ~]$ uname -r
3.10.0-957.el7.x86_64
[zhuph@zhuph ~]$ uname -a
Linux zhuph.com 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
6.2 确保 yum 包更新到最新
sudo yum -y update
6.3 移除旧的版本:
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
6.4 安装一些必要的系统工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
6.5 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看所有仓库中的版本
yum list docker-ce --showduplicates | sort -r
6.6 安装 Docker-ce
sudo yum -y install docker-ce
6.7 启动 Docker 后台服务
sudo systemctl start docker
开机启动
sudo systemctl enable docker
验证安装
docker version
ps -ef|grep docker
6.8 测试运行 hello-world
docker run hello-world
6.9 镜像加速
鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com。新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 来配置 Daemon。请在该配置文件中加入(没有该文件的话,请先建一个):
{
“registry-mirrors”: [“http://hub-mirror.c.163.com”]
}
重启docker
service docker restart
6.10 删除Docker CE
$ sudo yum remove docker-ce
$ sudo rm -rf /var/lib/docker
7. 镜像相关
搜索镜像 (Docker Hub)
docker search java
下载镜像
docker pull java:8
列出镜像
docker images
删除本地镜像
docker rmi java
8. 容器相关
创建并启动容器 docker run
docker run -d -P --name runoob training/webapp python app.py
docker run -d -p 91:80 nginx
列出容器
docker ps
查看容器所有信息
docker inspect 0bfef5b02f3e
curl http://172.17.0.2/
停止容器
docker stop 0bfef5b02f3e
强制停止容器
docker kill 0bfef5b02f3e
启动已经停止的容器
docker start 0bfef5b02f3e
查看容器日志
docker container logs 0bfef5b02f3e
查看容器的进程
docker top 0bfef5b02f3e
进入容器
docker container exec -it 0bfef5b02f3e /bin/bash
9. 定制镜像
[root@zhuph app]# docker build -t nginx:zph .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM nginx
---> f68d6e55e065
Step 2/2 : RUN echo '<h1> This is messi!!!</h1>' > /usr/share/nginx/html/index.html
---> Running in 26f9bff3f266
Removing intermediate container 26f9bff3f266
---> fc382c18e052
Successfully built fc382c18e052
Successfully tagged nginx:zph
10. Dockerfile
FROM java:8
VOLUME /tmp
ADD eureka-server-0.0.1-SNAPSHOT.jar /app.jar
EXPOSE 8761
ENTRYPOINT ["java","-jar","/app.jar"]
构建
docker build -t eureka-server-0.0.1 .
docker run -p 8761:8761 eureka-server-0.0.1