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做一个增删改查的。按之前说的,我们

Nginx上面要--link php,然后php 容器上面也要 --link mysql 。并且这是有优先级的,我们比如先启动mysql,再启动phh,最后启动Nginx。

这整个过程是比较繁琐的!你之后比如服务宕机 重启、或者到别的服务器也要部署。这太麻烦了

那么有没有一种方式能够我们部署的这些指令全部弄到一个配置文件里,然后我们统一的进行配置?

-----》这个就是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实现

实现docker官网的计数功能  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

官网地址:https://docs.docker.com/compose/compose-file/#image

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 

  

 

posted @ 2022-04-13 14:13  你是我的神奇  阅读(646)  评论(0编辑  收藏  举报