docker和Jenkins
本节内容:
1:docker的安装
2:docker的使用
文档可以参考菜鸟教程:
https://m.runoob.com/docker/
docker和Jenkins之前有写到语雀:https://www.yuque.com/cranr/qcxvha
一、docker安装
推荐使用菜鸟教程的官网安装脚本:
curl -sSL https://get.daocloud.io/docker | sh
二、docker的使用
Docker 01 概述
Docker 02 基本命令
Docker 03 镜像命令
Docker 04 容器命令
Docker 05 常用命令
Docker 06 部署Nginx
Docker 07 部署Tomcat
Docker 08 部署Elasticsearch
Docker 09 可视化
Docker 10 镜像原理
Docker 11 自定义镜像
Docker 12 数据卷
Docker 13 Dockerfile
Docker 14 网络
Docker 15 Compose、swarm
三、docker-compose
3.1:问题引入
如果你看了上面的docker网络之后,就可以知道我们的docker容器是有一个网关的概念还有局域网的概念。
比如说我们有两个容器一个是Nginx提供80端口服务,一个是alpine【最小的linux系统】,我的alpine容器想访问Nginx可以有两种实现方式的!
上面我们可以使用: curl 172.17.0.2 IP的方式去访问我们的Nginx。 也可以通过类似dns域名【myng】的方式访问
3.2:实现第二访问Nginx方式
docker run -dit --link myng:myng alpine #--link 将其他容器加到本容器中去
3.3:docker-compose引出
上图,我们要对外暴露Nginx的服务,但是Nginx使用到了php,pho又使用了mysql做一个增删改查的。按之前说的,我们
这整个过程是比较繁琐的!你之后比如服务宕机 重启、或者到别的服务器也要部署。这太麻烦了
那么有没有一种方式能够我们部署的这些指令全部弄到一个配置文件里,然后我们统一的进行配置?
-----》这个就是docker compose
3.4:docker-omopose安装
我们知道docker-compose是docker的组件,不是集成的所以我们可以直接去下载他。
3.4.1:GitHub上面搜索docker/compose
3.4.2:下载docker-compose
3.4.3:chomd + x 并且移动到Path环境中去
chmod +x docker-compose-linux-x86_64 mv docker-compose-linux-x86_64 docker-compose echo $PATH mv docker-compose /usr/bin/
3.4.4:验证是否成功
3.5:docker-compose实现
https://docs.docker.com/compose/gettingstarted/
app.py
import tornado.ioloop
import tornado.web
import redis
conn = redis.StrictRedis(host="redis",db=0) #这里的host使用redis
class MainHandler(tornado.web.RequestHandler):
def get(self):
conn.incr("pv",1)
result = conn.get("pv").decode("utf8")
self.write("Hello, world,I has been seen %s times"%result)
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
],debug=True)
if __name__ == "__main__":
app = make_app()
app.listen(8888)
print("服务开启了:",8888)
tornado.ioloop.IOLoop.current().start()
requirements.txt
tornado==6.1 redis
Dockerfile
FROM python:3.8 WORKDIR /data COPY . /data EXPOSE 5000 RUN pip3 install -r requirements.txt CMD ["python","app.py"]
docker-compose.yml
version: "3"
services:
web:
build: .
ports:
- "8080:8888"
redis:
image: "redis:alpine"
启动:
3.6:docker-compose的其他命令
docker-compose up -d --build #--build 重新构建
四、使用比较忘记混淆的点
3.1:dockerfile-expose
首先 EXPOSE命令只是起到一个声明的作用。告诉查看Dockerfile的人,这个容器想暴露5000这个端口,如果你有之后一些关于容器端口的操作可以使用5000端口。
在宿主机上运行Docker时并不会因为这个声明应用就会开启这个端口的服务,如果你想在宿主机上访问对应5000端口的服务是,需要使用命令将端口进行映射
docker run -p 宿主机端口:容器端口 image
3.2:使用swarm集群启动命令
docker stack deploy -c docker-compose.yml myswarm