序
Docker文档:https://docs.docker.com/get-started/
Docker 架构
1、Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
2、Docker 容器通过 Docker 镜像来创建。
3、容器与镜像的关系类似于面向对象编程中的对象与类。
Docker的应用场景
1、Web 应用的自动化打包和发布。
2、自动化测试和持续集成、发布。
3、在服务型环境中部署和调整数据库或其他的后台应用。
4、从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
Docker简介很好的参考文章:https://blog.51cto.com/13043516/2119839
正文
Ubantu16.04下安装Docker环境
- 准备安装环境
uname -r
- 更新环境(因为在虚拟机下安装,更新环境first)
sudo apt-get update sudo apt-get install apt-transport-https ca-certificates sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock
- 获取安装秘钥及下载镜像源(update即可下载)
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list sudo apt-get update
- 下载完成——正式安装
sudo apt-get install docker-engine sudo apt-get update --fix-missing sudo apt-get install docker-engine
- 启动docker
sudo systemctl enable docker sudo systemctl start docker
- 查看docker版本
docker version
- 运行helloworld
sudo docker run hello-world
Docker配置自己的镜像helloworld
根据官方教程part2:https://docs.docker.com/get-started/part2/
教程2就是教我们熟悉Docker运行指令及运行步骤——发布一个app需要如下三个配置文件即可:
-
根据教程创建目录
Dockerfile
,创建三个文件(文件内容见上述part2链接):
-
进入Dockerfile,创建容器friendlyhello,运行镜像到浏览器
cd Dockerfile sudo docker build --tag=friendlyhello .
-
查看镜像
sudo docker image ls
这里可以看到我同时运行了三个镜像:hello-world、mysql、friendlyhello(他们有自己的容器ID);这里就可以提现容器的特点:类似于在windows的任务管理器,他可以给每个进程(容器)分配不同的运行空间,并进行区分。
-
运行镜像
sudo docker run -p 4000:80 friendlyhello
到这里,我们的网页就推送成功了!步骤是很简单的。
-
现在让我们在后台以分离模式运行应用程序:
sudo docker run -d -p 4000:80 friendlyhello
-
停止程序:
sudo docker container ls sudo docker container stop bf33c49412b5 sudo docker container ls
Docker配置Tomcat镜像
-
下载tomcat镜像,运行到8080端口:
sudo docker pull docker.io/tomcat sudo docker run -p 8080:8080 docker.io/tomcat
这里是不是很熟悉了呢,对于熟悉java项目的工程师们,到这一步就可以大展拳脚了。
后面说一说如何通过外网访问,以及在docker下上传war进行,项目的发布。 -
查看本机ip:
ifconfig
局域网Windows下——通过虚拟机ip和端口号查看虚拟机部署的网页:
外网访问:
需要在阿里云或者其他云平台(拥有外网ip),部署完成后,可以通过公网ip(或域名)进行访问。 -
部署自己的web应用:
(1) 查看正在运行的容器:tomcat的容器ID为:d3f9867d22bd
(2)进入容器(这里是进入:容器/tomcat/bin/bash
,这里是一个由容器装载的通道)sudo docker ps sudo docker exec -it d3f9867d22bd /bin/bash
现在就进入:
容器/usr/local/tomcat#
,
(1)可以在这里cd webapps
进入webapps目录,
(2)ls
查看tomcat上已发布的内容,当然这里还为空: -
另打开一个终端,找到需要发布的war包(在mydockerfile目录下我有一个
myweb.war
)sudo docker cp myweb.war d3f9867d22bd:/usr/local/tomcat/webapps
-
现在切回tomcat终端,
ls
查看webapps目录:
-
这里输入项目路径就可以查看我们的网页啦!
现在有一个问题是:每次重启后,webapps目录会清空,需要重新上传发布war包:
这是因为:docker在测试时,war项目会不断进行修改,如果修改完毕,确认最终发布版本!
如何配置Docker自启动就发布项目?
如何默认启动发布war包,和前面第二步建立Dockerfile,创建app和dockerfile.txt和程序进行发布,原理相同,把命令全部写到dockerfile中(启动镜像时:会自动添加本地war到tomcat容器目录下),当重新发布时,这样就不用手动配置了,比较方便:
参考教程:https://blog.csdn.net/qq_32351227/article/details/78673591
多镜像发布,就是生成新的镜像,在docker下启动,这里可以生成超多个:
总结
- 镜像的理解:
添加镜像就像在windows下打开一个个软件,在任务管理器中可以看到他们的运行状况,可以不限的同时打开多个程序,运行;有的程序运行需要配置——端口号; - Docker命令的理解:
(1)程序(镜像)的运行(docker run)和停止(docker run -d)以及应用下载(sudo docker pull docker.io/tomcat )这些都是封装在docker命令下的;
(2)Docker命令和ROS操作系统命令:运行(rosrun)、(roslaunch)以及下载(rosdep install --from-paths src --ignore-src --rosdistro=kinetic)都有相似之处。 - Docker用途的理解:
(1)Docker是一个客户端/服务器(C/S)架构的程序,Docker客户端只需向Docker服务器或守护进程(有时也称为Docker引擎)发出请求,服务器或守护进程将完成所有工作并返回结果。
(2)Docker提供docker命令工具和一整套RESTful APT来与守护进程交互,用于可以在同一台宿主机运行Docker守护进程和客户端,也可以从本地Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。
附:
Mysql镜像的添加:https://blog.csdn.net/bingzhongdehuoyan/article/details/79412914