docker学习之快速入门

       docker是一个容器,在这个容器中可以运行镜像,就好像tomcat可以运行war包一样,我们可以把项目打包成一个镜像,丢到docker里面,让它运行,同时一台物理机器可以运行多个docker容器,且他们相互隔离,不会互相影响抢夺cpu和内存

 

docker基本命令

docker run ubuntu:15.10 /bin/bash 

-i: 交互式操作。

-t: 终端。以命令模式进入容器

-d: 容器在后台运行

-P:将容器内部使用的网络端口随机映射到我们使用的主机上。比如-P 5001:5000

ubuntu: ubuntu 15.10版本镜像。

/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

 

docker ps -a

获取所有容器,可以看到容器id

docker start/stop/restart   b750bbbcfd88

启动/停止/重启ID为b750bbbcfd88的容器

docker exec 1e560fca3906 

退出容器

docker export 1e560fca3906 > ubuntu.tar

 

docker run -d -P 5001:5000 training/webapp python app.py

-d:让容器在后台运行。

-P:将容器内部使用的网络端口随机映射到我们使用的主机上。通过5001端口来访问容器5000端口

 

docker commit -m="has update" -a="runoob" e218edb10161 ubuntu:v2

将已有的容器id e218edb10161 创建为一个新的镜像,ubuntu, 它的版本号是v2

 

DockerFile的作用

由一系列的命令组成,是build或者运行docker时要执行的指令

COPY 复制文件或目录

ENV  设置环境变量

VOLUME 路径,定义匿名数据卷,避免数据因容器重启丢失

 

        dockerfile 例子 :

 

FROM    centos:6.7  //这个镜像基于centos 6.7版本创建

    MAINTAINER      Fisher "fisher@sudops.com" //坐着

    RUN     /bin/echo 'root:123456' |chpasswd  //修改镜像centos 6.7中root用户的密码,用于新镜像的密码

    RUN     useradd runoob

    RUN     /bin/echo 'runoob:123456' |chpasswd

    RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local

    EXPOSE  22

    EXPOSE  80

    CMD     /usr/sbin/sshd -D //创建出来的docker镜像被启动后执行cmd后面的命令,

docker build -t runoob/centos:6.8   //创建一个新的 centos 6.8镜像, 它的root用户密码为123456

 

 

Docker Compose

       Dockerfile 可以让用户管理一个单独的容器,那么如果我要管理多个容器呢?那就要用到docker compose了。

docker compose使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

 

  使用举例:

      1.准备一个测试目录,目录下先生成一个app.py文件,这个代码含义是用python的flask框架,为127.0.0.1:5000路径创建了一段逻辑,输出"Hello World! I have been seen {N} times"。

import time

 

import redis

from flask import Flask

 

app = Flask(__name__)

cache = redis.Redis(host='redis', port=6379)

 

 

def get_hit_count():

    retries = 5

    while True:

        try:

            return cache.incr('hits')

        except redis.exceptions.ConnectionError as exc:

            if retries == 0:

                raise exc

            retries -= 1

            time.sleep(0.5)

 

 

@app.route('/')

def hello():

    count = get_hit_count()

    return 'Hello World! I have been seen {} times.\n'.format(count)

 

然后目录下新建docker-compose.yml,这里是表示以5000端口启动web服务,同时在此容器中启动redis。

# yaml 配置

version: '3'

services:

  web:

    build: .

    ports:

     - "5000:5000"

  redis:

    image: "redis:alpine"

最后新建DockerFile,大家用的时候,记得去掉//和注释。

FROM python:3.7-alpine

    WORKDIR /code

    ENV FLASK_APP app.py  // FLASK_APP变量 用来说明Flask实例对象 app 所在的模块位置

    ENV FLASK_RUN_HOST 0.0.0.0

    RUN apk add --no-cache gcc musl-dev linux-headers

    COPY requirements.txt requirements.txt

    RUN pip install -r requirements.txt

    COPY . .

    CMD ["flask", "run"]  //运行开发服务器

 

    最后在当前目录的终端下输入docker-compose up,就可以编译出一个docker镜像,并运行起来。访问“http://127.0.0.1:5000就能看到对应输出。

    ​大家如果有任何问题,欢迎关注"Java自学之路"这个公众号来提问,里面也有自学全套视频(含项目)和Idea激活码等信息。

    对于java来说,可以把代码达成war包,然后在docker compose中配置需要tomcat服务,然后在tomcat服务build过程中,把war包复制到tomcat的webapps文件夹,启动docker就可以了。当然,这只是一种方案,大家可以在网上找到更加自动化的方案

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值