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 "[email protected]" //坐着

    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就可以了。当然,这只是一种方案,大家可以在网上找到更加自动化的方案

    


你可能感兴趣的:(docker学习之快速入门)