(一)简介

Docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker的应用场景

• Web 应用的自动化打包和发布。
• 自动化测试和持续集成、发布。
• 在服务型环境中部署和调整数据库或其他的后台应用。
• 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

Docker 的优点

• 1、简化程序:
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
• 2、避免选择恐惧症:
如果你有选择恐惧症,还是资深患者。那么你可以使用 Docker 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
• 3、节省开支:
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

我的理解是可以将依赖程序等打包好,就像一个镜像一下,下载下来可以直接用,省了一大堆的安装步骤

介绍与优点

https://blog.csdn.net/nfzhlk/article/details/78430152
可以在windows上使用

(二)安装

从官网下载比较慢:
在这个DaoCloud网站可以快速下载
https://www.jianshu.com/p/b21c508514ae
https://www.cnblogs.com/mq0036/p/8512703.html

加速

Docker For Windows
在桌面右下角状态栏中右键 docker 图标,修改在 Docker Daemon 标签页中的 json ,把下面的地址:
http://f1361db2.m.daocloud.io
加到” registry-mirrors”的数组里。点击 Apply 。

pull报错

在docker pull 镜像时一直报错:
Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 10.0.2.3:53: server misbehaving
一开始以为服务器挂了,后来觉得不太可能,就网上搜了下,原来是dns服务器的错误,把服务器改成8.8.8.8或者114.114.114.114即可
linux下安装不了也可能是DNS错误

官网docker安装

1. 建立
Docker镜像是一个私有文件系统,仅适用于您的容器。它提供了容器所需的所有文件和代码。运行docker build命令可以使用Dockerfile创建Docker镜像。此构建的映像位于计算机的本地Docker映像注册表中。

cd doodle\cheers2019 ; docker build -t qinxing/cheers2019 .

2. run
docker run -it --rm qinxing/cheers2019
3. 分享
docker login ; docker push qinxing/cheers2019

(三)常用命令:

docker run ubuntu:15.10 /bin/echo "Hello world"
docker run -i -t ubuntu:15.10 /bin/bash

• -t:在新容器内指定一个伪终端或终端。
• -i:允许你对容器内的标准输入 (STDIN) 进行交互
• ubuntu:15.10指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
• /bin/echo “Hello world”: 在启动的容器里执行的命令

  1. 查看运行的容器:docker ps
  2. 查看容器标准输出 :docker logs
  3. 载入镜像: docker pull name
  4. docker run -d -P training/webapp python app.py
    • -d:让容器在后台运行。
    • -P:将容器内部使用的网络端口映射到我们使用的主机上。
    • -p : 是容器内部端口绑定到指定的主机端口。
      可以通过 -p 参数来设置不一样的端口,前面的是主机端口,后者是docker端口
      docker run -d -p 5000:5000 training/webapp python app.py
  5. 查看docker底层信息: docker inspect

(四)使用docker现成的xwiki模板来部署

安装教程:

  1. https://github.com/xwiki-contrib/docker-xwiki/blob/master/README.md#docker-run-example
  2. http://help.websoft9.com/lms-guide/xwiki/install.html

步骤

  1. 创建网络
    docker network create -d bridge xwiki-nw

  2. 创建mysql
    docker run --net=xwiki-nw --name mysql-xwiki -v /my/own/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xwiki -e MYSQL_USER=xwiki -e MYSQL_PASSWORD=xwiki -e MYSQL_DATABASE=xwiki -d mysql:5.7 --character-set-server=utf8 --collation-server=utf8_bin --explicit-defaults-for-timestamp=1

  3. 创建xwiki
    docker run -d --net=xwiki-nw --name xwiki -p 0.0.0.0:8080:8080 -v /my/own/xwiki:/usr/local/xwiki -e DB_USER=xwiki -e DB_PASSWORD=xwiki -e DB_DATABASE=xwiki -e DB_HOST=mysql-xwiki xwiki:mysql-tomcat

注意事项

  1. 外网可以访问需要指定IP:0.0.0.0
    之前是127.0.0.1,结果外网无法访问,需要改成0.0.0.0。要去搞清楚两者的区别。

TIPS:0.0.0.0,127.0.0.1和localhost之间有什么区别?

127.0.0.1

是个(特殊的)IP地址,往往被分配给了loopback或仅局域网可以访问的接口本地接口
这是一个伪照的,假的,网络适配器,其只能于同主机的主机内通信
常用于:让一个可以支持网络的程序,仅仅响应于同主机的主机内的客户端
一个程序监听127.0.0.1的话,则只能接受来自于本地的访问

localhost

往往是127.0.0.1这个IP地址的主机名的主机名

  • Linux的中是在/etc/hosts中设置的
  • windows中等价于host,往往在%WINDIR%中设置的
    • 换句话说,你也可以设置为其它名字
    • ping localhost,则会输出:127.0.0.1

0.0.0.0

本身包含很多方面的含义,但是此处指的是:
当一个服务器监听这个IP地址的话,意味着:监听所有的网络请求
(对应着IP地址为127.0.0.1的)回送这个适配器适配器的请求,就像其它本机中的其它的网络适配器一样。
如果一个服务器有两个IP地址:192.168.1.1和10.1.2.1,则本机中的一个服务监听0.0.0.0的话,则两个IP地址都可以访问该服务